【OCI_19】プライベート・サブネット上の Oracle Linux からOCI バケット(Object Storage)へファイルをアップロードする
以前、OCI バケット(Object Storage)を作成してブラウザからアップロード、ダウンロードを検証しました。
今回は、プライベート・サブネット上の Oracle Linux からOCI バケット(Object Storage)へファイルをアップロードなど検証してみたいと思います。
chatgpt に聞くと「OCI CLIインストール」「動的グループ作成」「ポリシー作成」が必要とのことですので、そのとおり進めていきたいと思います。
ここで「動的グループ」を作成する際の注意です。
chatgptに確認しながら作業を進めていたところ、Compute インスタンス、Object Storage、Vault、Certificate Authority などのOCIネイティブサービスは、内部的には Defaultドメイン のIAM空間を使って動作するため、サービス間連携を目的とする動的グループはDefaultドメイン側に作成する必要があると説明されましたが、実は検証するとカスタムドメイン(Defaultドメイン以外)の動的グループとポリシーでも正常に機能しました。
デフォルトで作成されるDefaultドメインを利用することが一般的なことや混乱や運用ミスを避けるため、多くの導入例・チュートリアルでは Default ドメインに動的グループを配置する流れが主流と chatgpt は言ってました。
目次
事前準備
●OCI バケット(Object Storage)が作成済みである。
●サービス・ゲートウェイを作成してプライベート・サブネットのOracle Linux からcurl で自身のリージョンのオブジェクトストレージのエンドポイントにアクセス可能である。
リージョンが Japan Central (Osaka) の場合:
curl -v https://objectstorage.ap-osaka-1.oraclecloud.com
[opc@instance-10-1-2-100 ~]$ sudo curl -v https://objectstorage.ap-osaka-1.oraclecloud.com
* Trying 134.***.***.***:443…
* Connected to objectstorage.ap-osaka-1.oraclecloud.com (134.***.***.***) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
~ 以下省略 ~
●OCI CLIのインストールが完了している
動的グループを作成(OCIコンソール)
動的グループを設定するのでルート・アカウントでサインインし直します。Defaultドメインへアクセスできるユーザーであればルート・アカウント以外でも問題ありません。
インスタンスID(OCID)の確認
動的グループのルール作成時に必要となるのでOCI バケット(Object Storage)へ接続したいインスタンスのインスタンスIDを確認します。
左ペインのコンピュート > インスタンス をクリックします。
適用済フィルタでコンパートメントを指定し、該当インスタンスをクリックします。

OCIDのコピーをクリックしてOCIDを控えます。

動的グループを作成
今回は、Defaultドメインへ動的グループを作成します。(※カスタムドメインでも問題ありません)
左ペインのアイデンティティとセキュリティ > ドメイン > Default をクリックします。

「動的グループ」タブ > 「動的グループの作成」をクリックします。

動的グループの作成で以下を選択、入力し、右下の「作成」をクリックします。
名前:任意名
説明:任意(プライベート・サブネットのインスタンスからObject Storage利用)
一致ルール:下で定義したいずれかのルールに一致
ルール・ビルダー:ANY {instance.id = ‘該当インスタンスのOCID’}
※もし2台のインスタンスを個別に記載したい場合は、ANY {instance.id = ‘該当インスタンスのOCID’ , instance.id = ‘該当インスタンスのOCID’} と記述する
ANY {instance.id = ‘ocid1.instance.oc1.ap-osaka-1.anvwsljr5ekurxycfmowvkvx6vhplw6djefca6xqqpm3e5xpwiyzm34ewaha’}

動的グループ「dg-private-instance」が作成されました。

ポリシーを作成(OCIコンソール)
作成した動的グループのリソース(今回はインスタンス)がバケット(Object Storage)へアクセスできるようポリシーを作成します。
左ペインのアイデンティティとセキュリティ > ポリシー をクリックします。
適用済みフィルタは、ルート・テナンシを選択します。(※ポリシーは、ルート・テナンシである必要はありません)
「ポリシーの作成」をクリックします。

ポリシーの作成で以下を選択、入力し、右下の「作成」をクリックします。
名前:任意名
説明:任意(プライベートインスタンスからObject Storage利用)
コンパートメント:ここではルート・テナンシを選択
ポリシー・ビルダー:手動エディタの表示をクリック
Allow dynamic-group 動的グループ名 to manage objects in compartment 適用したいコンパートメント名
※カスタムドメインの動的グループを参照する場合は、カスタムドメイン名/動的グループ名にする
Allow dynamic-group dg-private-instance to manage objects in compartment test_compartment

ポリシーが作成されました。

OCI CLI の認証をインスタンス認証(Instance Principal)に切り替えて確認
Oracle LinuxへSSHで接続し、以下コマンドを実行します。
コマンドは、Object Storage(バケット/オブジェクトを扱うサービス)において、「ネームスペース(namespace)」を取得する操作です。
ネームスペースとは、テナンシ(クラウド契約単位)で一意に割り当てられた “オブジェクト収納用の識別空間名” のことです。
jsonで以下のように表示されれば、認証OKでこのインスタンスがIAMで認証されたことになります。
参考:
–auth instance_principal オプションについて:
このコマンドを、今回実行中のコンピュート・インスタンス自身の“アイデンティティ”(インスタンス・プリンシパル)を使って実行することを指定しています。
つまり ユーザーのAPIキーを使ってではなく、インスタンスが自身で認証・実行する方法となり、この仕組みによって、インスタンスからOCIのサービスを呼び出すためにユーザー鍵を用意しなくてもよいようになります。
oci os ns get –auth instance_principal

OCI バケット(Object Storage)へファイルをアップロード
テストファイル(testfile.txt)を作成します。
echo “Hello from private instance!” > testfile.txt
ls

バケット名を確認(OCIコンソール)します。
左ペインのストレージ > バケット をクリックします。
自分で作成したバケット名を確認します。(例:bucket-20251015)

ファイルアップロードを実行
Oracle LinuxへSSHで接続します。
以下コマンドへバケット名、アップロードするファイル名入力し、実行します。
コマンド例:oci os object put -bn バケット名 –file アップロードするファイル名 –auth instance_principal
oci os object put -bn bucket-20251015 –file testfile.txt –auth instance_principal

参考:
アップロードに失敗する一例(動的グループ、またはポリシーの内容が不適切)

アップロードを確認
コマンドで確認してみます。バケットには3つのファイルが存在し、アップロードされたファイルも確認できます。
コマンド例:oci os object list -bn バケット名 –auth instance_principal
oci os object list -bn bucket-20251015 –auth instance_principal

OCIコンソールでも確認してみます。

ダウンロードを検証
コマンドで事前にサーバにあるファイルを削除してからダウンロードしてみます。
rm -f testfile.txt
ls

次に以下コマンドを実行し、OCIバケットにある「testfile.txt」を別名「downloaded.txt」としてダウンロードします。
コマンド例:oci os object get -bn バケット名 –name testfile.txt –file ./downloaded.txt –auth instance_principal
oci os object get -bn bucket-20251015 –name testfile.txt –file ./downloaded.txt –auth instance_principal

まとめ
プライベート・サブネット上の Oracle Linux からOCI バケット(Object Storage)へファイルをアップロードすることができました。
途中、動的グループを理解するうえで chatgpt に惑わされて時間がかかりましたが、その分、理解も深まりました。
以下、他の記事をまとめた一覧です。OCI以外にAWSもまとめています。