はじめに
AWSでいう「アカウント」、Google Cloudでいう「プロジェクト」に近い概念がOCIにもあり、それがOracle Cloud Infrastructureでいう「テナンシー」です。
参考:https://docs.oracle.com/ja-jp/iaas/Content/GSG/Concepts/concepts-account.htm
今回は、テナンシーAからテナンシーBへアクセスし、テナンシーBのリソース情報を取得したく、テナンシー間アクセス(クロステナンシー)をやってみたので方法や注意点をまとめました。
前提知識
- テナンシー: 「AWSのアカウント」や「Google Cloudのプロジェクト」に近い概念。
- コンパートメント: テナンシーの中を分離する仕組み。階層化できる箱のようなもの。
- ルートコンパートメント: テナンシーそのものを指す。テナンシーが作成されると、自動的に同名のルートコンパートメントが作成される。ルートコンパートメントは、テナンシー内に作成される他のすべてのコンパートメント(サブコンパートメント)の親となる。
参考:https://docs.oracle.com/ja-jp/iaas/Content/GSG/Concepts/settinguptenancy.htm#Understa
前提条件
- テナンシー間アクセスは「アイデンティティとセキュリティ」にてポリシーの設定を行いアクセスを制御します。
- この際、「Admin」ポリシーの設定が必要でした。「Admin」ポリシーの作成はルートコンパートメントで行うため作業者にルートコンパートメントへのアクセス権限の付与が必要でした。
ポリシー設定
※ポリシーはルートコンパートメント(テナンシー直下)に作成します。
設定の全体イメージ図
テナンシーA(アクセス元/リクエスト元)で作成するポリシー
- テナンシーBへアクセスすることを承認(Endorse)するためのポリシー
Define tenancy DestinationTenancy as <テナンシーBのOCID> Endorse group <テナンシーAのアクセスを行うグループ名> to <許可する操作> in tenancy DestinationTenancy
テナンシーB(アクセス先/リソース保有)で作成するポリシー
- テナンシーAからのアクセスを許可(Admit)するためのポリシー
Define tenancy SourceTenancy as <テナンシーAのOCID> Define group GroupFromSource as <テナンシーA内の、アクセスするグループのOCID> Admit group GroupFromSource of tenancy SourceTenancy to <許可する操作> in compartment <テナンシーBに存在する、リソースを取得したいコンパートメントのOCID>
※ in compartment <テナンシーBに存在する、リソースを取得したいコンパートメントのOCID> は in tenancy
とすることで、テナンシーB全体の読み取りを許可できます。
参考:https://docs.oracle.com/en-us/iaas/Content/Identity/policieshow/iam-cross-domain.htm
アクセスできるかの確認
ブラウザでテナンシーAのOCIコンソールから確認できます。
- OCIコンソール右上のDeveloper tools > Cloud Shell を開く
- コマンド実行例(Block volume一覧を取得する場合)
oci bv volume list --compartment-id テナンシーBのコンパートメントID --region リージョン
※–compartment-id では取得対象のリソースが存在する直下のcompartment-idを指定する必要がありました。
まとめ
OCIにおけるクロステナンシーアクセスは、異なるテナンシー間でリソースを安全に共有するための仕組みです。
アクセス元のテナンシーでアクセスを「承認(Endorse)」し、アクセス先のテナンシーでアクセスを「許可(Admit)」する、という双方向の設定が必要になります。
注意すべきは、この設定にはルートコンパートメントでのポリシー作成が必要であり、そのための適切な権限をつけることです。
クロステナンシーアクセスは、複数のプロジェクトや部署でリソースを共有する際に不可欠な仕組みであり、本記事で紹介したポリシー設定の基本を押さえ、セキュリティを考慮しながら活用していきましょう。