【OCI_28】オフライン環境(プライベート・サブネット)のWindowsサーバ からバケット(Object Storage)へOCI CLIでファイルをアップロードする
以前の記事でオフライン環境(プライベート・サブネット)の Oracle Linux からOCI バケット(Object Storage)へOCI CLIでファイルアップロードを検証しました。
今回は、オフライン環境(プライベート・サブネット)のWindowsサーバ からバケット(Object Storage)へOCI CLIでファイルアップロードを検証してみたいと思います。
Oracle Linux の時と同様、「OCI CLIインストール」「動的グループ作成」「ポリシー作成」と進めていきたいと思います。
Windows サーバは、Windows Server 2022 を利用します。
以下の記事でWindowsサーバへOCI CLIをオフライン・インストールしていますので参考にしてください。
構成は、以下のとおりです。

目次
事前準備
バケット(Object Storage)を作成します。
任意の名前のバケットを作成します。設定はデフォルトのままで大丈夫です。

動的グループを作成(OCIコンソール)
動的グループを設定するのでルート・アカウントでサインインし直します。Defaultドメインへアクセスできるユーザーであればルート・アカウント以外でも問題ありません。
以前の記事でも動的グループに触れていますが、ユーザーやグループではなく、インスタンスのようなリソースをグループ化し、ポリシーを適用して認可させると理解しています。
インスタンスID(OCID)の確認
動的グループのルール作成時に必要となるのでOCI バケット(Object Storage)へ接続したいインスタンスのインスタンスIDを確認します。
今回であればプライベート・サブネットのWindowsサーバが対象となります。
左ペインのコンピュート > インスタンス をクリックします。
適用済フィルタでコンパートメントを指定し、該当インスタンスをクリックします。

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

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

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

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

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

OCI バケット(Object Storage)へファイルをアップロード、ダウンロード
テストファイル(testfile.txt)を作成します。

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

PowerShellを起動します。
先ほど作成した testfile.txt が保存されているフォルダへ移動します。
dir コマンドでファイルの存在を確認しておきます。

以下コマンドへバケット名、アップロードするファイル名入力し、実行します。
「Uploading object」が「100%」になればアップロード完了です。
コマンド例:oci os object put -bn バケット名 --file アップロードするファイル名 --auth instance_principal
oci os object put -bn bucket-20260118 --file testfile.txt --auth instance_principal

アップロードを確認
コマンドでバケットの中を確認すると「testfile.txt」が存在することが確認できます。
コマンド例:oci os object list -bn バケット名 --auth instance_principal
oci os object list -bn bucket-20260118 --auth instance_principal

OCIコンソールでもアップロードされていることが確認できました。

ダウンロードを検証
事前にサーバのダウンロード先に保存されているファイルを削除します。

次に以下コマンドを実行し、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-20260118 --name testfile.txt --file ./downloaded.txt --auth instance_principal

ダウンロードできました。

まとめ
オフライン環境(プライベート・サブネット)のWindowsサーバ からバケット(Object Storage)へOCI CLIでファイルアップロードを検証しました。ひとまずWindowsサーバを使った検証はここまでとして、また何か検証したいネタができたら挑戦したいと思います。
以下、他の記事をまとめた一覧です。OCI以外にAWSもまとめています。