はじめに
こんにちは、株式会社エーピーコミュニケーションズ クラウド事業部の藤江です。
今回はタグ+動的グループ+インスタンスプリンシパルを使ったOCI CLIの動作環境の構築方法を提示します。
OCI上のインスタンスのみ有効な方法でありますがOCI CLIを使うためだけのユーザ追加が不要で権限管理が容易になるメリットがあります。
権限の割り当て管理は動的グループに割り当てることで実現します。
またインスタンスにタグを割り当てることで、動的グループへの所属を容易に行えます。
コンピュート・インスタンスのOCIDを使って動的グループに所属させることも可能ですが、どのインスタンスに権限を割り当てているのか分かりにくくなり、追加インスタンスへの権限付与の度にポリシーの編集が必要になり管理が面倒になります。そのためタグを使うことでインスタンスを容易に動的グループに所属させることが出来、インスタンスへの権限付与も容易となります。
今回は下図のようにコンピュートインスタンスを動的グループに所属させ、OCICLIを使ってオブジェクトストレージにアクセスする例を提示します。

検証用の設定内容
今回利用した検証用の設定内容について記します。 オブジェクト・ストレージのバケットにOCI CLIからアクセスできる環境の設定内容を提示します。
リソース設置用のコンパートメントの作成
testコンパートメント配下にリソースを配置するコンパートメントを作成します。 下記のような構成でコンパートメントを作成します。
test
├── test-compartment-cli
├── test-compartment-objectstorage1
└── test-compartment-objectstorage2
各コンパートメントの概要は以下の通りです。
| コンパート名 | 概要 |
|---|---|
| test | 上位のコンパートメントです。リソースは設置しません。 |
| test-compartment-cli | インスタンスを配置するコンパートメントです。 |
| test-compartment-objectstorage1 | オブジェクトストレージへのアクセス権限を付与するコンパートメントです。 |
| test-compartment-objectstorage2 | オブジェクトストレージへのアクセス権限を付与しないコンパートメントです。 |
識別用タグの作成
下記の内容で定義済みタグを作成します。
| 項目 | 設定値 |
|---|---|
| 名前空間 | test |
| タグ名 | CliEnabled |
| 値 | リスト形式でtrue ,falseを設定します。 |
動的グループの作成
下記の設定でルールを作成します。 一致ルールにタグを使うことでタグを割り当てたインスタンスのみグループに所属できるようになります。
| 項目 | 設定値 |
|---|---|
| 動的グループ名 | test-cli-group |
| 一致ルール | tag.test.CliEnabled.value = 'true' |
ポリシーを定義して動的グループに権限を割り当てる
ポリシーを用いて動的グループに権限を割り当てます。 動的グループtest-cli-groupに対してコンパートメントtest-compartment-objectstorage1配下にあるバケットへの管理権限を付与します。
| 項目 | 設定値 |
|---|---|
| ポリシー名 | test-cli-group-policy |
| ポリシー文 | 'Allow dynamic-group test-cli-group to manage object-family in compartment test-compartment-objectstorage1' |
テスト用のインスタンスを作成する
テスト用のインスタンスの作成方法については割愛します。 ただし、タグに名前空間test、タグ名CliEnabled、値trueを割り当てることを忘れないでください。 インスタンス作成後にOCI CLIをインストールします。 インストール方法は公式ドキュメントを参照してください。
テスト用のオブジェクトストレージを作成する
テスト用に2つのコンパートメントにバケットを作成します。 配置するコンパートメントとバケット名は以下の通りです。
| コンパートメント名 | バケット名 | アクセス権限の設定内容 |
|---|---|---|
| test-compartment-objectstorage1 | test-bucket1 | OCI CLIからアクセス可能にする |
| test-compartment-objectstorage2 | test-bucket2 | アクセス権限を設定しない |
動作確認
インスタンスにログインして、バケットの操作を検証してみます。 今回の例ではbash環境での操作を想定しています。 他のシェル環境の場合は適宜読み替えてください。
# OCI CLIでインスタンスプリンシパル認証を有効化します。 export OCI_CLI_AUTH='instance_principal' # 操作対象をtest-bucket1にして実行します。 bucket_name="test-bucket1" # test.txtファイルを作成してバケットにアップロード、一覧取得、削除を実行します。 # 動的グループ、ポリシー、タグの設定が適切に行われていれば # test-bucket1にはアクセス権限が付与されているため正常に動作するはずです。 echo test > test.txt oci os put -bn $bucket_name --file test.txt oci os list -bn $bucket_name oci os delete -bn $bucket_name --object-name test.txt # 操作対象をtest-bucket2に変更して実行してみる # こちらのバケットにはアクセス権限が付与されていないためエラーになるはずです。 bucket_name="test-bucket2" oci os put -bn $bucket_name --file test.txt
まとめ
- タグ+動的グループ+インスタンスプリンシパルを使ったOCI CLIの動作環境の構築方法を提示しました。
- 今回提示した手法は複数のインスタンスに対して容易に権限を付与できるようになり、OCI CLIを使うためだけのユーザ追加が不要になるメリットがあります。
- またタグを使うことでどのインスタンスに権限が割り当てられているのか分かりやすくなり、管理が容易になります。