ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
タグ・ベースのOracle Cloud Infrastructure Identity and Access Managementポリシーの詳細
イントロダクション
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシーは、堅牢でセキュアなクラウド環境の基盤です。OCIリソースへのアクセスを制御する強力で柔軟なメカニズムを提供し、認可されたユーザーとサービスのみが指定されたリソースに対して特定のアクションを実行できるようにします。
OCI IAMポリシーの中核は、人間が読める構文で記述された宣言文のセットで、誰が何にアクセスできるか、どの条件でアクセスできるかを指定します。これらのポリシーにより、組織は最小権限の原則を適用でき、ユーザーおよびサービスにタスクの実行に必要な権限のみを付与でき、それ以上何も付与できません。これにより、運用効率を維持しながらセキュリティ・リスクを最小限に抑えることができます。
OCI IAMポリシーは、コンパートメント、テナンシ、特定のリソースなど、OCI階層の様々なレベルで適用されるため、複雑な組織構造に高度に適応できます。OCIのポリシー継承と区分化により、管理者は特定のセキュリティおよび運用要件に合せたきめ細かい制御を確立できます。OCIポリシーの詳細は、ポリシーの開始を参照してください。
このチュートリアルでは、ポリシー最適化の重要性、最適な結果を達成するためのポリシーの微調整のベストプラクティス、およびポリシー最適化を最大限に活用できるシナリオのハイライトについて説明します。
目的
-
ポリシー・コンポーネントおよび構文を非表示にします。
-
OCI IAMポリシーのチューニングがスケーラビリティとポリシーの制限に不可欠な理由を理解します。
-
実用的なベストプラクティスを提供します。
-
ポリシー管理におけるタグ付けの役割を強調します。
-
現実世界のユース・ケースを紹介することで、一般的な課題とソリューションを強調します。
前提条件
-
OCIテナンシへのアクセス。
-
OCIの概念の基本的な理解。
-
OCI IAMの知識。
-
ポリシー構文について理解します。
-
コンパートメント化とタグ付けの基本の理解。
-
最低限の権限の原則の認識。
-
OCIポリシーは、知識を制限します。
-
ガバナンスおよびコンプライアンス標準に関する経験。
ポリシーのコンポーネントと構文の判別
OCI IAMポリシーを効果的にチューニングするには、その構造と主要コンポーネントを理解することが不可欠です。OCIのポリシーでは、誰が(プリンシパル)、何を(アクション)、どこで(スコープ)するかを指定することで、権限を定義します。これについて説明します。
OCI IAMポリシーの主要コンポーネント
-
プリンシパル(サブジェクト):アクセスをリクエストしているエンティティ。次のいずれかになります。
-
ユーザー: OCI内の個々のアカウントで、通常は個人を表します。詳細は、ユーザーの管理を参照してください。
-
グループ:共有アクセス・ニーズを持つユーザーのコレクション。詳細は、Working with Groupsを参照してください。
-
動的グループ:特定のルールによって識別されるOCIリソースのセット(コンピュート・インスタンス、関数など)。動的グループ内のリソースは、タグやメタデータなどの基準に基づいて自動的にグループ化されます。詳細は、動的グループの管理を参照してください。
-
リソース・プリンシパル:独自に動作するサービス(OCI FunctionsやOracle Autonomous Databaseなど)。リソース・プリンシパルを使用すると、サービスは、明示的な資格証明を必要とせずにOCIおよびその他のリソースで安全に認証できます。詳細は、リソース・プリンシパル認証を参照してください。
-
Instance Principal:コンピュート・インスタンスに固有のリソース・プリンシパルのタイプ。これにより、インスタンスで実行されているアプリケーションに資格証明を埋め込むことなく、OCI IAMポリシーを使用して、インスタンスがOCIサービス(OCIオブジェクト・ストレージやアイデンティティなど)と直接対話できます。詳細は、Instance Principalsを参照してください。
-
-
アクション(動詞):主体が実行できる操作を指定します。
inspect
:リソースに関するメタデータを表示します。read
:リソース内のメタデータおよびデータを表示します。use
:読取りアクションおよび制限された管理操作を実行します。manage
:リソースの作成および削除を含むすべてのアクションを実行します。
詳細については、Operationsを参照してください。
-
リソース(リソース・タイプ):アクションが適用されるOCIリソースのタイプを定義します。次に例を示します:
- コンピュート・インスタンス、ストレージ・バケット、VCNs、データベースなど。
- リソースは、コンパートメントを使用して階層的に編成できるため、管理が向上します。
詳細は、リソースを参照してください。
-
スコープ(場所):ポリシーが適用される場所を指定します。
- コンパートメント:階層編成を可能にするリソース用の論理コンテナ。
- テナンシ: OCIアカウント全体。通常はグローバル権限に使用されます。
詳細は、場所を参照してください。
-
一致ルール(条件): 1つ以上の条件を指定します。論理ORまたはANDには、anyまたは allを複数の条件で使用します。
- 単一条件の構文:
variable =|!= value
。 - 複数条件の構文:
any|all {<condition>,<condition>,...}
。
詳細は、条件を参照してください。
- 単一条件の構文:
ボーナス・ヒント: OCI IAMポリシーでのSet-Intersectの概念の理解
OCI IAMポリシーのset-intersectは、2つの値セット間に重複がある場合にのみアクセス権を付与するために使用されます。これにより、ポリシー内の特定のユーザーまたはグループをハードコーディングするのではなく、グループ・メンバーシップ、リソース・タグまたはその他の属性に基づいて権限が動的に付与されます。
-
OCI IAMポリシーのSet-Intersectの例
Allow any-user to manage database-family-resources in tenancy where sets-intersect(request.groups.name, target.resource.compartment.tag.database.admins)
ポリシー・ステートメントの分解:
-
任意のユーザーの許可:このポリシーは、(特定のグループ・メンバーシップに関係なく) OCIの認証済ユーザーに適用されます。
-
database-family-resourcesの管理:すべてのデータベース関連リソース(自律型データベース、データベース・システム、バックアップなど)に対する完全な管理制御を付与します。
-
テナンシ内:ポリシーはテナンシ全体(すべてのコンパートメント)に適用されます。
-
ここで、set-intersect(
request.groups.name
、target.resource.compartment.tag.database.admins
)request.groups.name
:ユーザーが属するグループを表します。target.resource.compartment.tag.database.admins
:コンパートメント上のタグ。そのコンパートメント内のデータベース・リソースを管理できる許可グループのリストが含まれます。- sets-intersect(...):ユーザーがタグにリストされている少なくとも1つのグループに属する場合にのみ、アクセス権が付与されるようにします。
-
大規模向けのOCI IAMポリシー・モデル
OCI IAMポリシーは、OCI上のワークロードを保護する基本的な要素の1つです。大規模なワークロードをお客様向けに拡張してサポートすることは非常に重要です。そのため、OCIのポリシー制限内で、あらゆるサイズのワークロードに対応できる少数のポリシーを必要とするポリシー・モデルを作成しました。次に、スケーラブルなポリシー・モデルを採用する理由をいくつか示します。詳細は、アイデンティティ・ドメインのあるIAMの制限を参照してください。
OCI IAMポリシーのチューニングは、OCIのポリシー制限内に留まりながら、セキュアでスケーラブルかつ効率的なクラウド環境を維持するための重要なタスクです。このプロセスが不可欠な理由は次のとおりです。
-
ポリシー制限と制約: OCIは、テナンシおよびコンパートメント内に作成できるポリシーの数に特定の制限を適用します。これらの制限は、ポリシーが最適化されていない場合、大規模または複雑な環境で迅速に使い果たすことができます。
-
主な理由は次のとおりです。
- 冗長性の回避:異なるコンパートメントまたはリソースに対して同様のポリシーを何度も定義すると、ポリシーが膨らむ可能性があり、管理が困難になります。
- OCIポリシー制限内に留まる: OCIには、ポリシーごとおよびテナンシごとに最大数のポリシー・ステートメントがあります。チューニングにより、これらの制限を早期に満たさないようにできます。
-
-
管理性の向上:組織の成長に伴い、複数のコンパートメントにわたる数百のポリシーの管理は、チューニングを行わずに煩雑になる可能性があります。最適化されたポリシー:
- ポリシーの合計数を減らすことで管理を簡素化します。
- 明確性を高め、ルールの重複や競合を回避して、デバッグや監査を容易にします。
-
複雑な環境間のスケーラビリティ:チューニングされたポリシーにより、次の方法でシームレスにスケーリングできます。
-
パフォーマンスの最適化: OCIは、アクセス・リクエストごとにポリシーを評価します。多数の冗長ポリシーまたは過剰に特定のポリシーによって評価時間が長くなり、アクセス制御の決定が遅くなる可能性があります。最適化されたポリシーにより、オーバーヘッドが軽減され、より迅速かつ効率的な運用が保証されます。
-
最小権限の原則への準拠:スケーラビリティのチューニング時には、最小権限の原則を維持することが重要です。幅広い未チェックのポリシーによってセキュリティが損なわれる可能性があるため、最小限のアクセスとスケーラビリティのバランスを取ることが不可欠です。
ポリシー管理でのタグ付けの役割
タグ付けは、リソースに対するきめ細かな制御を可能にすることでポリシー管理を大幅に強化するOCIの強力な機能です。タグは、キーと値のペアとして表されるメタデータ・ラベルで、リソースにアタッチできます。アクセス制御は、特に複数のチームやプロジェクトを持つ複雑なクラウド環境で、大規模な編成、管理および実施に役立ちます。詳細は、タグ付けの概要に関する項を参照してください
タグ付けによってポリシー管理がどのように強化されるか
-
リソース識別を簡素化:タグは、プロジェクト、環境、所有者、部門などの属性に基づいてリソースを分類する統一された方法を提供します。これにより、リソースの特定のサブセットにポリシーを適用するプロセスが簡略化されます。
例:
Project: ProjectX
でリソースをタグ付けすると、ターゲット・アクセス・ポリシーが有効になります。Allow group Developers to manage instances in tenancy where tag.Project = 'ProjectX'
-
動的ポリシー強制の有効化:リソース属性の変更に適応するタグに基づくポリシー。たとえば、新しいインスタンスに
Environment: Production
というタグが付けられている場合、本番環境に定義されたポリシーが自動的に継承されます。サンプル・ポリシー:
Allow group QA to inspect instances in tenancy where tag.Environment = 'Test'
-
マルチプロジェクトおよびマルチチーム・ガバナンスを合理化:タグは、リソースを特定のチームまたはプロジェクトに関連付けることで、アクセスを分離するのに役立ちます。これにより、複数のグループ間で権限を管理する際の複雑さが軽減されます。
-
自動化の促進:タグによって、リソースの作成、監視およびライフサイクル管理のワークフローを自動化できます。たとえば、コスト・トラッキング・スクリプトは、CostCenter: Marketingというタグが付いたすべてのリソースを取得して、詳細な経費精算書を生成できます。
-
コスト管理およびレポートの改善:タグにより、特定のプロジェクト、部門または環境に対する詳細なコスト属性が可能になります。これにより、組織は支出を追跡し、予算をより効果的に最適化できます。
タグ・ガバナンス: タグ管理の制御
ポリシー管理の一貫性、信頼性、およびセキュリティを維持するには、タグの作成と変更を厳密に制御する必要があります。ガバナンスにより、タグが正しく適用され、組織標準に準拠することが保証されます。タグ管理を特定の個人またはグループのセットに制限することは、組織のクラウド環境内で制御、一貫性およびセキュリティを維持する重要な要素です。
-
タグ管理を制限する理由
Taggingはリソースを編成および制御するための強力なツールですが、管理が不十分な場合、一貫性がないか認可されていないアクセス制御、コスト追跡の問題およびガバナンスの課題につながる可能性があります。組織は、タグを管理できるユーザーに関する厳格なポリシーを実装することで、認可された担当者のみがクリティカル・タグを作成、変更または削除できるようにし、環境の整合性を維持できます。
-
未承認の変更の防止:タグは、多くの場合、コスト割当て、リソースの分類、アクセス制御などの重要なビジネス・プロセスに関連付けられます。タグを変更するための無制限のアクセスを許可すると、不正な変更や偶発的な変更が発生し、操作が中断されたり、リソースが誤って割り当てられたりする可能性があります。
-
一貫したタグ付け基準の確保:組織は、リソースの編成と簡単な追跡を可能にする、標準化されたタグ付けスキーマを利用できます。組織は、タグ管理を定義された管理者グループに制限することで、これらの標準を確実に遵守し、タグ付けの慣行における断片化と不整合を防止できます。
-
セキュリティとコンプライアンスの維持:タグを活用して、セキュリティ・ポリシーとコンプライアンス要件を適用できます。たとえば、タグは環境(本番、開発など)または機密データの分類を定義できます。権限のあるユーザーのみがこれらのタグを変更できるようにすることで、機密性の高い環境が保護され、アクセス制御が正しく実施されます。
-
ポリシーの構成ミスによるリスクの軽減: OCIのタグベースのポリシー(リソース・アクセス制御など)は、一貫性のある正確なタグの使用に依存します。間違ったグループまたは個人がタグを変更または削除できる場合、誤ってアクセス・ポリシーが大きくなりすぎたり制限されたりする可能性があります。
-
-
OCIでのタグ管理の制限方法
OCIでは、タグの作成、更新、削除などのタグ操作を実行できるユーザーを定義するOCI IAMポリシーを作成および適用することで、タグ管理を制御できます。これらのポリシーは、特定のユーザー、グループまたはコンパートメントへのアクセス権を付与するように調整でき、認可された個人のみがクリティカル・タグを変更できるようにします。
タグ管理を特定の個人またはグループに制限する方法を次に示します。
-
グループ・ベースのアクセス制御の使用:タグ管理を制御する最初のステップは、タグの管理に必要な権限が特定のグループにのみ付与されるようにすることです。たとえば、
TagAdmins
などの指定されたグループに、タグの作成および更新を処理するための排他権限を付与できます。OCI IAMポリシーの例:
Allow group TagAdmins to manage tag-namespaces in tenancy
このポリシーにより、
TagAdmins
グループのみがテナンシ全体のタグおよびタグ・ネームスペースを作成、変更または削除できるようになります。devopsエンジニアやTerraform Runnerグループなどの一部のグループがスクリプトのコンソールからこれらの作成済タグを使用できるようにするには、次のポリシーを定義できます。Allow group devopsTeam to use tag-namespaces in tenancy Allow group terraformRunner to use tag-namespaces in tenancy Allow dynamic-group terraformRunner to use tag-namespaces in tenancy
-
きめ細かい制御のためのコンパートメント・レベルのポリシーの使用:タグ管理ポリシーはコンパートメント・レベルで適用できるため、特定のコンパートメントにのみタグ管理アクセス権があります。たとえば、タグ管理を特定のプロジェクトまたはビジネス・ユニットに制限する場合は、関連するコンパートメント内のタグ・アクセスを制限するポリシーを適用できます。
コンパートメント固有のタグ管理のポリシーの例:
Allow group TagAdmins to manage tag-namespaces in compartment ProjectA
これにより、
TagAdmins
グループのユーザーのみがProjectA
コンパートメント内のタグを管理できるようになり、他のコンパートメントへのアクセスが制限されます。また、グループを作成して、作成したタグの使用のみをユーザーに許可し、コンパートメント・レベルでは変更できないようにすることもできます。Allow group TagUser to use tag-namespaces in compartment ProjectA
-
タグ・ネームスペースを使用したタグ付け制御: OCIは、関連するタグをグループ化する
tag namespaces
をサポートしています。特定のネームスペース内のタグを管理できるユーザーを制御でき、これにより、特定のタイプのタグにアクセスできるユーザーをより詳細に制御できます。ネームスペース固有のタグ管理のポリシーの例:
Allow group TagAdmins to manage tag-namespaces in tenancy where tag.namespace = 'Billing'
これにより、
TagAdmins
権限を持つユーザーのみが請求ネームスペース内のタグを管理できるようになり、コスト・トラッキング・タグに関するガバナンスが強化されます。 -
タグ変更の監査およびモニター:タグ管理がセキュアであることを保証するために、組織は、タグに加えられた変更を追跡するための監査およびモニタリング・ポリシーを実装する必要があります。OCIの監査ログは、タグの作成、削除、変更に関連するアクションを可視化します。これらのログを監視すると、タグまたは管理の誤りを示唆するパターンを変更しようとする未承認の試行を識別できます。
-
リアル・ライフ・ユース・ケース向けのタグ・ベースのOCI IAMポリシー
前述のすべてを学習したので、実際のユース・ケースで、ユーザー原則とインスタンス原則のOCI IAMポリシーのチューニングに取り組んでみましょう。しかし、その前に、ユースケースに関係なくすべての顧客が必要とする一般的なポリシーがいくつかあります。
-
一般的なOCI IAMポリシー:
-
ユーザー管理のためのOCI IAMポリシー:
IAMAdmin
グループは、OCI IAMドメイン、ユーザー、グループなどのOCI IAM関連の構成の管理を担当します。Allow group IAMAdmin to manage domains in tenancy Allow group IAMAdmin to manage users in tenancy Allow group IAMAdmin to manage groups in tenancy
-
タグ管理用のOCI IAMポリシー:
InfoSec
グループは、OCI IAMポリシー、ユーザー、タグ・ネームスペースなどのセキュリティ関連の構成の管理を担当します。Allow group InfoSec to manage tag-namespaces in tenancy Allow group InfoSec to manage policies in tenancy Allow group InfoSec to use users in tenancy Allow group InfoSec to manage groups in tenancy where all {target.group.name != ‘Administrators’, target.group.name != ‘InfoSec’}
-
OCI IAMポリシー(Terraform Runner):
terraform-runner
グループは、インフラストラクチャ・プロビジョニング用のTerraform自動化スクリプトの実行専用です。Allow group terraform-runner to use tag-namespaces in tenancy Allow group terraform-runner to manage instance-family in compartment Tenants Allow group terraform-runner to manage virtual-network-family in compartment Tenants Allow group terraform-runner to manage volume-family in compartment Tenants Allow group terraform-runner to manage object-family in compartment Storage Allow group terraform-runner to manage secret-family in compartment Tenants Allow group terraform-runner to manage key-family in compartment Tenants
-
ユーザー・プリンシパルのOCI IAMポリシーのスケーリング
OCI IAMポリシー・モデル:このポリシー・モデルでは、属性ベースのアクセス制御とも呼ばれる、データ(ここではタグ)によって通知される、より管理しやすい少数のポリシーを記述することが目的です。アクセス制御用にターゲット・リソースまたはターゲット・リソース・コンパートメントに割り当てられているタグを権限タグと呼びます。
権限タグ:テナンシ内のすべての動詞(アクション)とリソース・タイプの組合せに対して権限タグを定義します。ターゲット・リソースのユーザーのグループに割り当てる必要がある一意の権限を定義します。リストは一度設定および完了していません。少数の許可タグから開始します。ポリシー・モデルに対するハンドルを取得したら、権限タグをさらに追加できます。このチュートリアルでは、permission tag namespaceをmgmt
として作成します。また、gname
という名前の1つのタグ・キーを使用して、タグ・ネームスペースを作成します(このinfosec
をコールします)。
-
4つのリソース・タイプを持つ次のコンパートメント構造について、それらのリソースに対する管理権限および使用権限を割り当てるには、権限タグを作成します。
-
ターゲットに割り当てる必要があるすべての権限(ほとんどの場合コンパートメント)について、グループを作成します。リソース(コンパートメントのデフォルト・タグを使用)およびリソース・コンパートメントに権限タグを割り当てます。タグ値は、ターゲット・リソースに対する指定された権限を持つグループです。
-
権限タグを定義したら、ポリシーを記述できます。最終的には、テナンシで定義された権限タグごとに1つのポリシーのみが必要になります。指定された権限に対して同じポリシーがテナンシ全体で動作します。
-
より多くのワークロードをオンボーディングする際、管理するリソース・タイプがさらに多い場合は、それらの権限タグに対する権限タグおよびポリシーを追加する必要がある場合があります。それ以外の場合は、既存の権限タグを、アクセス権を持つユーザー・グループを持つ新しいワークロードに割り当てます。新しいワークロードに対して新しいポリシーを記述する必要はありません。
このアプローチは、OCI IAMグループおよびポリシーを定義する基盤となる、ここで説明するすべての例で一貫性を保ちます。
例1: すべてのアプリケーションのコンパートメント
ステップ1: 顧客のビジネス概要を包括的に理解する
CompanyAは、クライアント向けに複数のクラウドネイティブ・アプリケーションを開発およびデプロイする、成長するテクノロジー企業です。各アプリケーションは、厳格なセキュリティとコンプライアンス要件を備えた特定の顧客セグメントに適合します。CompanyAは、分離、スケーラビリティおよび効率的なアクセス制御を確保するために、構造化された区分化アプローチを使用してOCIリソースを編成します。
ステップ2: ワークロードのコンパートメント構造の設計
説明されているように、CompanyAは、OCI IAMポリシーをスケーリングするためのOCI IAMポリシー・モデルに従います。リソースの分離を維持するために、アプリケーション用に個別のコンパートメントが作成されています。
ノート:
mgmt
およびinfosec
タグ・ネームスペースを管理できるのは管理者のみです。
ステップ3: タイプVerb+Resourceの組合せの次の権限タグの設計
OCIでグループを作成します。
-
グループを作成する権限を持つ管理アカウントでOCI IAMドメインにログインします。
-
「アイデンティティとセキュリティ」に移動して、「アイデンティティ」の「ドメイン」をクリックします。
-
コンパートメントを選択し、グループを作成するドメインをクリックします。
-
「グループ」をクリックします。
-
権限タグに基づいてグループを定義します。(オプション)ユーザーをこれらのグループに追加します。
ノート:権限とターゲットの一意の組合せに対してグループを作成する必要があります。同じ機能グループのユーザー(NetworkAdmin)が、すべてのターゲットでネットワークを管理するためのアクセス権を持っている必要がある場合、すべてのターゲットでアクセスを管理するには1つのグループのみが必要です。
次に、これらのタグの権限タグとOCI IAMグループを示します。前述のステップに従って、定義された各権限タグのグループを作成します。
-
ルート・コンパートメント:ルート・コンパートメントは、最上位の管理レイヤーとして機能します。ここで、管理者グループが権限タグでタグ付けされます。次のタグがあります。
- 管理者:テナンシ管理全体を管理するための
manageall
権限。 - UseAdministrators:テナンシ全体のリソースにアクセスするための
useall
権限。 - 監査者:テナンシ全体を監視するためのリソースへの読取り専用アクセス権を持つ
readall
権限。
- 管理者:テナンシ管理全体を管理するための
-
アプリケーションごとのコンパートメント・モデル: CompanyAには、複数のクラウドベースのアプリケーションがあります。アプリケーションごとに個別の親コンパートメントを作成します。このモデルが、親コンパートメントとしてアプリケーション1 (App1)およびアプリケーション2 (App2)にどのように適用されるかを確認します。
-
アプリケーション1 (App1): OCIでホストされる顧客向けアプリケーション。
- ネットワーク・コンパートメント: VCN、サブネットなど、すべてのネットワーク関連リソースのコンパートメント。ここで、権限タグとそれぞれのOCI IAMグループを作成します。
- App1NetworkAdmin:
managenetwork
App1のネットワーク・リソースを管理するエンジニア用のリソース権限タグ。 - App1NetworkUser:
usenetwork
App1のネットワーク構成へのアクセスを制限する必要がある開発者向けのリソース権限タグ。 - App1NetworkReader:
readnetwork
App1のネットワーク設定を検証する監査者のリソース権限タグ。
- App1NetworkAdmin:
- コンピュート・コンパートメント:コンピュート・インスタンスのコンパートメント。ここで、権限タグとそれぞれのOCI IAMグループを作成します。
- App1ComputeAdmin:
managecompute
App1バックエンドのコンピュート・インスタンスをプロビジョニングおよびスケーリングするシステム管理者用のリソース権限タグ。 - App1ComputeUser:
usecompute
App1のバックエンド・サービスをデプロイおよびテストする開発者向けのリソース権限タグ。 - App1ComputeReader:
readcompute
App1のコンピュート・リソース使用率を監視する監査者用のリソース権限タグ。
- App1ComputeAdmin:
- データ・コンパートメント:データベースおよびストレージ関連リソースのコンパートメント。ここで、権限タグとそれぞれのOCI IAMグループを作成します。
- App1DataAdmin: App1のOracle Autonomous DatabasesおよびOCI Object Storageを管理するデータベース管理者用の
managedb
リソース権限タグ。 - App1DataUser:
usedb
App1に関する分析のためにデータセットにアクセスするデータ・サイエンティストのリソース権限タグ。 - App1DataReader:
readdb
App1のデータベース構成を確認する監査者のリソース権限タグ。
- App1DataAdmin: App1のOracle Autonomous DatabasesおよびOCI Object Storageを管理するデータベース管理者用の
- ネットワーク・コンパートメント: VCN、サブネットなど、すべてのネットワーク関連リソースのコンパートメント。ここで、権限タグとそれぞれのOCI IAMグループを作成します。
-
アプリケーション2 (App2): CompanyAの業務のための内部エンタープライズ・リソース・プランニング(ERP)システム。
ノート:ここでも、同じコンパートメント構造のアプローチに従い、親App2コンパートメントの下にネットワーク・コンパートメント、コンピュート・コンパートメントおよびデータ・コンパートメントを作成します。冗長性を回避するために、App2の権限タグとOCI IAMグループをノートにとります。
-
ネットワーク・コンパートメント:
- App2NetworkAdmin:
managenetwork
リソース権限タグ。 - App2NetworkUser:
usenetwork
リソース権限タグ。 - App2NetworkReader:
readnetwork
リソース権限タグ。
- App2NetworkAdmin:
-
コンピュート・コンパートメント:
- App2ComputeAdmin:
managecompute
リソース権限タグ。 - App2ComputeUser:
usecompute
リソース権限タグ。 - App2ComputeReader:
readcompute
リソース権限タグ。
- App2ComputeAdmin:
-
データ・コンパートメント:
- App2DataAdmin:
managedb
リソース権限タグ。 - App2DataUser:
usedb
リソース権限タグ。 - App2DataReader:
readdb
リソース権限タグ。
- App2DataAdmin:
-
-
ノート:ターゲット(ターゲットはリソースまたはコンパートメント)に権限タグを適用して、App1およびApp2のターゲットに対する特定の権限をどのグループに付与するかを指定します。
ステップ4: これらの権限タグに対するOCI IAMポリシーの記述
CompanyAのポリシーは、ここで説明するのと同じアプローチを使用して作成します: より少なく- グループのOCI IAMポリシーのスケーリング。このためには、gname
という名前のタグ・キーを1つ持つタグ・ネームスペースを作成します(このinfosec
をコールします)。
-
ポリシーを作成する権限を持つ管理アカウントでOCI IAMドメインにログインします。
-
「アイデンティティとセキュリティ」に移動して、「アイデンティティ」の「ポリシー」をクリックします。
-
ルート「コンパートメント」を選択して、「ポリシーの作成」をクリックします。
-
ポリシーに「名前」、「説明」と入力し、ポリシー・ステートメントも追加します。「作成」をクリックします。
-
すべてのリソース・ポリシー:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
ノート:次のすべてのポリシーを定義し、それぞれのポリシー・ステートメントを追加するには、同じ手順に従います。
-
Cloudguardポリシー:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
ネットワークポリシー:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to read virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readnetwork)
-
コンピュート・ポリシー:
Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecompute) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecompute) Allow any-user to read instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcompute)
-
データベース・ポリシー:
Allow any-user to manage database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managedb) Allow any-user to use database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usedb) Allow any-user to read database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readdb)
-
例2: すべての顧客/テナントのコンパートメント
ステップ1: 顧客のビジネス概要を包括的に理解する
CompanyBソリューションは、クラウド・インフラストラクチャ、データ管理およびアナリティクスでテナントベースのSaaSアプリケーションを提供する、主要な独立系ソフトウェア・ベンダー(ISV)です。CompanyBは、様々な業界の複数のクライアントにサービスを提供し、シームレスでセキュアかつスケーラブルなソリューションを提供します。その成功は、適切に設計されたコンパートメント構造を持つOCIを使用して、セキュリティとコンプライアンスの要件に準拠しながらリソースを効率的に管理することにあります。
ステップ2: ワークロードのコンパートメント構造の設計
CompanyBは、顧客のワークロードを分離し、専用のサブ・コンパートメントを作成しました。また、ネットワーク・コンパートメント、共有ストレージおよびデータベース・コンパートメントもあります。CompanyBでも、OCI IAMポリシーをスケーリングするためのOCI IAMポリシー・モデルに従います。
ステップ3: タイプVerb+Resourceの組合せの次の権限タグの設計
グループを作成するには、例1ステップ3を参照してください。次で定義されているすべての権限タグのグループを作成する必要があります。
-
ルート・コンパートメント- 集中ガバナンス:ルート・コンポーネントは、OCIテナンシ全体のすべてのリソースおよびアクティビティを監督するための中央レイヤーとして機能します。ここで、管理者グループが権限タグでタグ付けされます。次のタグがあります。
- 管理者:テナンシ管理全体を管理するための
manageall
権限。 - UseAdministrators:テナンシ全体のリソースにアクセスするための
useall
権限。 - 監査者:テナンシ全体を監視するためのリソースへの読取り専用アクセス権を持つ
readall
権限。
- 管理者:テナンシ管理全体を管理するための
-
ネットワーク・コンパートメント- 操作のバックボーン:ネットワーク・コンパートメントはCompanyBのクラウド・ネットワーキング・インフラストラクチャをサポートし、すべてのリソース間の接続を可能にします。これには、Virtual Cloud Network (VCNs)、サブネット、ゲートウェイおよびロード・バランサが含まれます。権限タグとそのそれぞれのOCI IAMグループを定義します。
- NetworkAdmin:
managenetwork
CompanyBのネットワーク・リソースを管理するエンジニア用のリソース権限タグ。 - NetworkUser:
usenetwork
CompanyBのネットワーク構成へのアクセスを制限する必要がある開発者向けのリソース権限タグ。 - NetworkReader:
readnetwork
CompanyBのネットワーク設定を検証する監査者のリソース権限タグ。
- NetworkAdmin:
-
テナント・コンパートメント- 顧客ワークロードごとに分離されたコンパートメント:テナント・コンパートメントは、クライアント(テナント)ごとにリソースとワークロードを分離するように構造化されています。これにより、CompanyBは、運用効率を維持しながらセキュアでプライベートなサービスを提供します。
-
テナント1コンパートメント:テナント1は、アプリケーション開発およびロギング・サービスにCompanyBを使用する主要なエンタープライズ・クライアントを表します。権限タグとそれぞれのOCI IAMグループは、次のとおりです:
t1devadmin
:テナント1の開発チームに対するmanageappdev
リソース権限には、カスタム・アプリケーションに対する管理権限、構成およびデプロイ権限があります。t1devuser
:アプリケーション・リソースをモニターおよび調整するためのuseappdev
リソース権限。テナント1の開発者は、これらのリソースを日々の開発およびテストに使用します。t1logsadmin
およびt1devuser
:managelogs
およびuselogs
のロールをロギングおよびモニタリングするためのリソース権限により、管理者がロギング・サービスを構成し、開発者がログにアクセスしてアプリケーションをデバッグおよび最適化するようにできます。t1devadmin
およびt1devuser
:テナント1のmanagecspm
およびusecspm
リソース権限は、セキュリティ状態にも焦点を当てており、セキュリティ・リスクを監視および修正する機能があります。
-
Tenant 2 and Tenant 3 Compartments: The structure for Tenant 2 and Tenant 3 mirrors that of Tenant 1, with roles like
t2devadmin
,t2devuser
,t3devadmin
,t3devuser
,t2logsadmin
andt3logsadmin
ensuring that each tenant operates in a fully isolated environment.このアプローチにより、CompanyBは、特定のテナントのニーズに対応しながら、一貫したガバナンスを維持できます。 -
共有コンパートメント- すべてのテナントの集中リソース:共有コンパートメントには、複数のテナントが利用するが、プライバシとセキュリティのために論理的に分離されたままであるデータベースやオブジェクト・ストレージなどのリソースが含まれます。
- データベース・コンパートメント:
dbadmin
: CompanyBのデータベース管理者に対するmanagedb
リソース権限は、プロビジョニング、スケーリング、パッチ適用など、すべてのテナントが使用する共有データベースを処理します。dbuser
:テナント固有のユーザーに対するusedb
リソース権限は、それぞれのデータベース・スキーマまたはサービスにアクセスします。dbreader
:監査者に対するreaddb
リソース権限には、データベース構成がセキュリティ・ポリシーに準拠していることを確認するための読取り専用アクセス権があります。
- ストレージ・コンパートメント: OCI Object Storageは、テナントごとに専用のバケットを使用して一元的に管理されます:
osadmin
:共有オブジェクト・ストレージ・リソースの管理を担当するmanageobject
リソース権限。osuser
:useobject
テナント固有のストレージ・リソース権限(t1osur
、t2osur
、t3osur
など)は、テナントがそれぞれのバケットにのみアクセスするようにします。osreader
:コンプライアンス・チームのreadobject
リソース権限は、ストレージ構成および使用パターンを確認します。
- データベース・コンパートメント:
-
ステップ4: これらの権限タグに対するOCI IAMポリシーの記述
ポリシーを作成するには、例1のステップ4を参照してください。次のポリシーを作成する必要があります。
-
すべてのリソース・ポリシー:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
-
Cloudguardポリシー:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
ネットワークポリシー:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to read virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readnetwork)
-
ログ・ポリシー:
Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to use logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.uselogs) Allow any-user to read logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readlogs)
-
Appdevポリシー:
Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageappdev) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useappdev) Allow any-user to read instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readappdev)
-
DBポリシー:
Allow any-user to manage database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managedb) Allow any-user to use database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usedb) Allow any-user to read database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readdb)
-
記憶域ポリシー:
Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to use object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useobject) Allow any-user to read object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readobject)
例3: 大規模なエンタープライズ・コンパートメント構造
ステップ1: 顧客のビジネス概要を包括的に理解する
革新的なソフトウェア・ソリューションを専門とする多国籍企業であるCompanyC Solutionsは、ミッションクリティカルなワークロードをOCIに移行することを決定しました。同社は、財務やヘルスケアなどの規制の厳しい業界で事業を展開しており、セキュリティ、コンプライアンス、スケーラビリティが最も重要です。
ステップ2: ワークロードのコンパートメント構造の設計
次に、OCI IAMポリシーをスケーリングするためのOCI IAMポリシー・モデルに従ったCompanyCのコンパートメント構造を確認します。
ステップ3: タイプVerb+Resourceの組合せの次の権限タグの設計
グループを作成するには、例1ステップ3を参照してください。次のすべての権限タグのグループを作成する必要があります。
-
ルート・コンパートメント- 集中ガバナンス:ルート・コンポーネントは、OCIテナンシ全体のすべてのリソースおよびアクティビティを監督するための中央レイヤーとして機能します。ここで、管理者グループが権限タグでタグ付けされます。次のタグがあります。
- 管理者:テナンシ管理全体を管理するための
manageall
権限。 - UseAdministrators:テナンシ全体のリソースにアクセスするための
useall
権限。 - 監査者:テナンシ全体を監視するためのリソースへの読取り専用アクセス権を持つ
readall
権限。
- 管理者:テナンシ管理全体を管理するための
-
PRODコンパートメント:業務およびエンドユーザーに直接影響を与えるミッションクリティカルな本番ワークロードをホストするためのコンパートメント。各アプリケーションには、リソースの分離と最適化された管理のための専用のサブコンパートメントがあります。権限タグとそのそれぞれのOCI IAMグループを定義します。
- NetworkAdmin:
managenetwork
CompanyCのネットワーク・リソースを管理するエンジニア用のリソース権限タグ。 - NetworkReader:
readnetwork
CompanyCのネットワーク設定を検証する監査者のリソース権限タグ。 - ComputeAdmin:
managecompute
CompanyCのコンピュート・インスタンスをプロビジョニングおよびスケーリングするシステム管理者用のリソース権限タグ。 - ComputeReader:
readcompute
CompanyCのコンピュート・リソース使用率を監視する監査者用のリソース権限タグ。 - StorageReader:ストレージ管理チームがストレージ構成を管理するための
manageobject
リソース権限。 - StorageReader:コンプライアンス・チームの
readobject
リソース権限は、ストレージ構成および使用パターンを確認します。 - SecurityAdmin:
managecspm
コンパートメントPRODのリソース権限は、セキュリティ・ポスチャにも焦点を当てており、セキュリティ・リスクを監視および修正する機能があります。
次に、アプリケーション固有のサブ・コンパートメントの権限タグとそれぞれのOCI IAMグループを定義します。時間のために、3つの異なるアプリケーション・コンパートメントすべてに対する権限をマージおよび定義しました。
- アプリケーション・コンパートメント:
- PRApp1NetAdmin、PRApp2NetAdminおよびPRApp3NetAdmin:
managenetwork
リソース権限タグがApp1、App2およびApp3のネットワーク・リソースを管理するエンジニア用の管理OCI IAMグループ。 - PRApp1NetUser、PRApp2NetUserおよびPRApp3NetUser:
usenetwork
リソース権限タグがApp1、App2およびApp3のネットワーク・リソースを管理するエンジニア用の管理OCI IAMグループ。 - PRApp1ComputeAdmin、PRApp2ComputeAdminおよびPRApp3ComputeAdmin:
managecompute
リソース権限タグがApp1、App2およびApp3のOCI Computeインスタンスを管理するエンジニア用のOCI IAMグループを管理します。 - PRApp1ComputeUser、PRApp2ComputeUserおよびPRApp3ComputeUser:
usecompute
リソース権限タグがApp1、App2およびApp3のOCIコンピュート・インスタンスを使用するエンジニアのOCI IAMグループを管理します。 - PRApp1StorageAdmin、PRApp2StorageAdminおよびPRApp3StorageAdmin:
manageobject
リソース権限タグがApp1、App2およびApp3のOCIオブジェクト・ストレージを管理するエンジニア用の管理OCI IAMグループ。 - PRApp1StorageUser、PRApp2StorageUserおよびPRApp3StorageUser: OCI Object Storage for App1、App2およびApp3をそれぞれ使用しているエンジニアの
useobject
リソース権限タグを持つ管理OCI IAMグループ。
- PRApp1NetAdmin、PRApp2NetAdminおよびPRApp3NetAdmin:
- NetworkAdmin:
-
NPRODコンパートメント: ステージング、開発および品質保証環境専用です。このコンパートメントは、一貫性を確保するためにPRODと同様に構造化されています。権限タグとそのそれぞれのOCI IAMグループを定義します。
- NetworkAdmin:
managenetwork
CompanyCのネットワーク・リソースを管理するエンジニア用のリソース権限タグ。 - NetworkReader:
readnetwork
CompanyCのネットワーク設定を検証する監査者のリソース権限タグ。 - ComputeAdmin:
managecompute
CompanyCのOCIコンピュート・インスタンスをプロビジョニングおよびスケーリングするシステム管理者用のリソース権限タグ。 - ComputeReader:
readcompute
CompanyCのOCI Computeリソース使用率を監視する監査者用のリソース権限タグ。 - StorageReader:ストレージ管理チームがストレージ構成を管理するための
manageobject
リソース権限。 - StorageReader:コンプライアンス・チームの
readStorage
リソース権限は、ストレージ構成および使用パターンを確認します。 - SecurityAdmin:
managecspm
コンパートメントNPRODのリソース権限は、セキュリティ・ポスチャにも焦点を当てており、セキュリティ・リスクを監視および修正する機能があります。
同様に、次に、アプリケーション固有のサブ・コンパートメントに対する権限タグとそれぞれのOCI IAMグループを定義します。
- アプリケーション・コンパートメント:
- NPApp1NetAdmin、NPApp2NetAdminおよびNPApp3NetAdmin:
managenetwork
リソース権限タグがApp1、App2およびApp3のネットワーク・リソースを管理するエンジニア用の管理OCI IAMグループ。 - NPApp1NetUser、NPApp2NetUserおよびNPApp3NetUser:
usenetwork
リソース権限タグがApp1、App2およびApp3のネットワーク・リソースを管理するエンジニア用の管理OCI IAMグループ。 - NPApp1ComputeAdmin、NPApp2ComputeAdminおよびNPApp3ComputeAdmin:
managecompute
リソース権限タグがApp1、App2およびApp3のOCI Computeインスタンスを管理するエンジニア用のOCI IAMグループを管理します。 - NPApp1ComputeUser、NPApp2ComputeUserおよびNPApp3ComputeUser:
usecompute
リソース権限タグがApp1、App2およびApp3のOCIコンピュート・インスタンスを使用するエンジニアのOCI IAMグループを管理します。 - NPApp1StorageAdmin、NPApp2StorageAdminおよびNPApp3StorageAdmin:
manageobject
リソース権限タグがApp1、App2およびApp3のOCIオブジェクト・ストレージを管理するエンジニア用の管理OCI IAMグループ。 - NPApp1StorageUser、NPApp2StorageUserおよびNPApp3StorageUser: OCI Object Storage for App1、App2およびApp3をそれぞれ使用しているエンジニアの
useobject
リソース権限タグを持つ管理OCI IAMグループ。
- NPApp1NetAdmin、NPApp2NetAdminおよびNPApp3NetAdmin:
- NetworkAdmin:
-
共有コンパートメント:共有コンパートメントは、ロギングやクラウド・ガードOCIサービスなどのモニタリング用のリソースをホストします。また、暗号化と復号化のための鍵も備えており、複数のテナントが利用しながら、プライバシーとセキュリティを維持するための論理的な分離を確保します。これらのサービスへのアクセスを必要とするアプリケーションからのすべての管理者が、これらのサービス用に作成されたOCI IAMグループに追加されます。権限タグとそのそれぞれのOCI IAMグループを定義しましょう。
-
Oracle Cloud Guardコンパートメント:
cspmAdmin
:managecspm
リソース権限タグを持つ管理OCI IAMグループで、PRODおよびNon PRODコンパートメントのOracle Cloud Guardを管理します。cspmUser
:usecspm
リソース権限タグを持つOCI IAMグループ(PRODおよびNon PRODコンパートメントのOracle Cloud Guardを使用/監視するエンジニア用)。cspmReader
: Oracle Cloud Guard for PRODおよびNon PRODコンパートメントを読み取るエンジニア用のリソース権限タグがreadcspm
のOCI IAMグループ。
-
OCIロギング・コンパートメント:
logsAdmin
:管理者がPRODおよび非PRODコンパートメントのOCIロギングを管理するためのmanagelogs
リソース権限タグを持つ管理OCI IAMグループ。logsUser
:uselogs
リソース権限タグを持つOCI IAMグループ(PRODおよび非PRODコンパートメントのOCIロギングを使用/監視するエンジニア用)。logsReader
: PRODおよび非PRODコンパートメントのOCIロギングを読み取るエンジニアのreadlogs
リソース権限タグを含むOCI IAMグループ。
-
キー・コンパートメント:
kmsAdmin
: PRODおよび非PRODコンパートメントのキー・ボールトを管理するためのmanagekeys
リソース権限タグを持つ管理OCI IAMグループ。kmsUser
:usekeys
リソース権限タグを持つOCI IAMグループは、PRODおよびNon PRODコンパートメントのキー・ボールトを使用/監視するエンジニア用です。kmsReader
: PRODおよび非PRODコンパートメントのキー・ボールトを読み取るエンジニア用のreadkeys
リソース権限タグを持つOCI IAMグループ。
-
-
プレイグラウンド・コンパートメント:実験、開発およびテストのための柔軟で分離された環境。このコンパートメントは本番制約やコンプライアンス制約に関連付けられていないため、イノベーションに最適です。ここでは、非常に子コンパートメント用のOCI IAM管理グループは1つのみで、テスト要件に必要なすべてのOCIリソースに対する管理権限を付与します。
-
開発コンパートメント:
DevAdmin
: Dev Compartment内の新しい実装をテストするための開発管理者のmanagenetwork
、managecompute
、manageobject
、managekeys
、managelogs
リソース権限がある管理OCI IAMグループ。
-
コンパートメントのテスト:
TestAdmin
:テスト・コンパートメント内の新しい実装をテストするための開発管理者のmanagenetwork
、managecompute
、manageobject
、managekeys
、managelogs
リソース権限がある管理OCI IAMグループ。
-
パフォーマンス・テスト・コンパートメント:
PerfTestAdmin
:パフォーマンス・テスト・コンパートメント内の新しい実装をテストするための開発管理者のmanagenetwork
、managecompute
、manageobject
、managekeys
、managelogs
リソース権限を持つ管理OCI IAMグループ。
-
ステップ4: これらの権限タグに対するOCI IAMポリシーの記述
ポリシーを作成するには、例1のステップ4を参照してください。次のポリシーを作成する必要があります。
-
すべてのリソース・ポリシー:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
-
ログ・ポリシー:
Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to use logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.uselogs) Allow any-user to read logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readlogs)
-
Cloudguardポリシー:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
鍵ポリシー
Allow any-user to manage keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managekeys) Allow any-user to use keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usekeys) Allow any-user to read keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readkeys)
-
アプリケーション・ポリシー:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecompute) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecompute) Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to use object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useobject)
-
プレイグラウンドポリシー:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to manage vaults in compartment Playground where request.principal.group.tag.infosec.gname=target.compartment.tag.mgmt.manageVaults Allow any-user to manage keys in compartment Playground where request.principal.group.tag.infosec.gname=target.compartment.tag.mgmt.manageKeys
ノート:このようなシナリオでは、新しいワークロードをオンボーディングするたびに次のようになります。
- 追加の権限タグが必要かどうかを確認します。その場合は、それらの権限タグのOCI IAMポリシーとともに作成します。
- グループを作成して、新しいワークロード・コンパートメントへのアクセスを管理します。
- 権限タグと作成されたグループを使用してワークロード・コンパートメントにタグ付けします。
詳細なアクセス制御のためのタグ・ベースの権限モデル
これまでのすべての例では、リソース・ファミリに対する管理権限、ユーザー権限または読取り権限の作成について説明しました。ただし、ほとんどの顧客は、最小限の権限モデルに従うために、きめ細かいアクセス制御を必要とします。チュートリアルの焦点は、ポリシー・モデルの理解です。そのため、単純なユースケースについて説明しました。ただし、4人のネットワーク担当者の例と、その4人のペルソナに対してきめ細かい権限タグとOCI IAMポリシーを設計する方法について考えてみます。
-
NetworkOwner:このユーザーまたはチームは、OCIテナンシのネットワーク実装を所有します。FastConnectを設定するためのアクセス権と、すべてのアプリケーションのネットワークを管理する権限があります。
-
NetworkAdmin:このチームは、アプリケーション・チームのネットワーク実装を所有します。アプリケーション・チームのVCNsを作成できます。ただし、ネットワーク・ファイアウォールまたはFastConnectを設定するためのアクセス権はありません。
-
NetworkOperator:このチームは、アプリケーションのネットワークを所有します。チームは、アプリケーションのVCNまたは共有VCNにアプリケーション・サブネットを作成できます。ただし、VCNsを管理または更新する権限はありません。
-
NetworkUser:アプリケーション・ネットワーク・リソースの使用権限を必要とするアプリケーション管理チームです。
networkowner
、networkadmin
、networkoperator
およびnetworkuser
は、ネットワーク・コンパートメントの4つのタグとして定義します。これらのタグには、ネットワーク・コンパートメントへのアクセス権を持つグループ名を割り当てます。
-
NetworkOwnerポリシー:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkowner)
-
NetworkAdminポリシー:
Allow any-user to manage vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage route-tables in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage dhcp-options in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage local-peering-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage service-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage internet-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin)
-
NetworkOperatorポリシー:
Allow any-user to {VCN_ATTACH,VCN_DETACH} in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to inspect vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage route-tables in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage dhcp-options in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator)
-
NetworkUserポリシー:
Allow any-user to inspect vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use vnics in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser)
Instance PrincipalsのOCI IAMポリシーのスケーリング
例1: OCIの共有ストレージおよびシークレットに対するマルチテナント・インスタンス・アクセス制御
ステップ1: 顧客のビジネス概要を包括的に理解する
XYZ Cloud Solutionsは、OCIでホストされているドキュメント管理システム(DMS)を提供するSaaSプロバイダです。このプラットフォームは、複数の企業顧客にサービスを提供し、それぞれが共有インフラストラクチャを活用しながらデータを厳密に分離する必要があります。
顧客の要求:
- 各企業(テナント)には、ドキュメントを処理および管理するための独立したインスタンスが必要です。
- 各テナントのシークレット(APIキー、データベース資格証明)にアクセスできるのは、そのテナントのインスタンスのみです。
- すべてのテナントは、一元化されたOCI Object Storageコンパートメントにドキュメントを格納しますが、独自のバケットにのみアクセスする必要があります。
- システムでは、新しいテナントの自動スケーリングおよび簡単なオンボーディングをサポートする必要があります。
ステップ2: ワークロードのコンパートメント構造の設計
ここでは、OCI IAMポリシーをスケーリングするためのOCI IAMポリシー・モデルに従ったXYZ Cloud Solutionsのコンパートメント構造について説明します。
-
コンパートメントによるテナントの分離:
- エンタープライズ顧客(Tenant1、Tenant2など)ごとに専用のOCIコンパートメントを作成します。
- コンピュート・インスタンス(VM、ファンクションまたはコンテナ)をそれぞれのコンパートメント内にデプロイします。
- アクセス制御を備えた一元化されたストレージ。
-
OCIオブジェクト・ストレージ・バケットの共有ストレージ・コンパートメントを維持します:
- 各テナントは、
Enterprise.Tenant=<TenantName>
でタグ付けされた専用バケットを取得します。 - OCI IAMポリシーは、各テナントのインスタンスが自身のバケットからのみ読み取れるようにします。
- OCI Vaultによるシークレット管理。
- 各テナントは、
-
OCI Vaultにデータベース資格証明、APIキーおよび暗号化キーを格納します。
- 各テナントのシークレットには、
Enterprise.Tenant=<TenantName>
というタグが付けられます。 - OCI IAMポリシーでは、そのテナントのインスタンスのみがシークレットを取得できます。
- ガバナンスのためのエンタープライズ・タグ付け戦略。
- 各テナントのシークレットには、
-
Enterprise.Tenant
を使用してエンタープライズ・タグ・ネームスペースを定義し、テナント所有権を追跡します。- コンパートメントのデフォルト・タグを適用して、各テナントのコンパートメント内のリソースに自動的にタグ付けします。
- 自動アクセス制御のために、タグに基づいたポリシーを使用します。
ステップ3: OCI IAMグループの作成
OCIマルチテナント環境でセキュアで分離されたアクセス管理を確保するために、次のポリシーが定義されます。
-
InfoSecグループ:ポリシー、タグ、ユーザーおよびグループを管理するためのアクセス権を持つセキュリティ管理者。
-
Terraform-Runnerグループ: OCIリソースを管理するためのInfrastructure-as-Code (IaC)実行グループ。
ノート:これらのグループおよびOCI IAMポリシーは、「共通OCI IAMポリシー」条項に記載のとおりすでに作成されています。
ステップ4: 定義済グループのOCI IAMポリシーの作成
テナント・リソース・アクセス・ポリシー:データの分離を維持するために、テナント・リソースは自身のシークレットおよびオブジェクト・ストレージにのみアクセスできる必要があります。
Allow any-user to use object-family in compartment Storage where request.principal.compartment.tag.Enterprise.Tenant = target.resource.tag.Enterprise.Tenant
Allow any-user to use secret-family in compartment Tenants where request.principal.compartment.tag.Enterprise.Tenant = target.resource.tag.Enterprise.Tenant
テナント・インスタンスの原則で新しいオブジェクトを作成する権限も必要な場合は、テナント名と同じ名前のバケット名を作成し、テナント名タグを使用してバケット名と比較できます。
Allow any-user to manage objects in compartment Storage where request.principal.compartment.tag.Enterprise.Tenant = target.bucket.name
例2: 共有OCIストレージ・モデルでのマルチサービス・データ・アクセスのファイングレイン・アクセス制御
ステップ1: 顧客のビジネス概要を包括的に理解する
XYZ Corpは、デジタル・トランスフォーメーション・ソリューションを専門とする急速に成長している企業です。グローバル・プレゼンスにより、XYZ Corpは複数のリージョンで事業を展開し、OCIを活用して重要なアプリケーションのホスティング、データの管理、チーム間のシームレスなコラボレーションを実現します。
顧客の要求:
- 特定のテナントの管理サービスのすべてのインスタンスは、共有ストレージ・コンパートメント内の管理バケットを読み取ることができます。
- 特定のテナントの営業サービスのすべてのインスタンスは、共有ストレージ・コンパートメント内の販売バケットを読み取ることができます。
- 特定のテナントのサプライ・サービスのすべてのインスタンスは、共有ストレージ・コンパートメント内の供給バケットを読み取ることができます。
- 特定のテナントのすべてのインスタンスは、共有ストレージ・コンパートメント内のShared Servicesバケットを読み取ることができます。
- 特定のテナントのすべてのインスタンスは、テナント・コンパートメント内のそのテナントのシークレットを読み取ることができます。
ステップ2: ワークロードのコンパートメント構造の設計
ここでは、OCI IAMポリシーをスケーリングするためのOCI IAMポリシー・モデルに従ったXYZ Corpのコンパートメント構造について説明します。
-
テナント固有のコンパートメントの作成:
- テナントごとに専用コンパートメントを作成します。
- テナントに属するすべてのリソースは、そのテナントのコンパートメント内にプロビジョニングする必要があります。
-
エンタープライズ・タグ付けネームスペース:
- 次のタグ・キーを使用してエンタープライズ・タグ・ネームスペースを定義します。
Enterprise.Tenant
テナント名を取得します。Enterprise.Service
サービス・タイプを取得します。たとえば、「管理」、「販売」、「供給」または「共有」です。
- 次のタグ・キーを使用してエンタープライズ・タグ・ネームスペースを定義します。
-
テナント・コンパートメントのデフォルト・タグ:
- 各テナント・コンパートメントのコンパートメント・デフォルト・タグを構成し、
Enterprise.Tenant
タグがコンパートメント内のすべてのリソースに自動的に適用され、テナント名が取得されるようにします。
- 各テナント・コンパートメントのコンパートメント・デフォルト・タグを構成し、
-
リソース・レベルのタグ付け:
- テナント・コンパートメント内のすべてのリソースには、サービス・タイプを指定する
Enterprise.Service
でタグ付けする必要があります。たとえば、「管理」、「販売」、「供給」などです。
- テナント・コンパートメント内のすべてのリソースには、サービス・タイプを指定する
-
ターゲット・リソースのタグ付け(バケットおよびシークレット):
- すべてのターゲット・リソース(バケットやシークレットなど)に次のタグを付けます。
Enterprise.Tenant
テナント名を取得します。Enterprise.Service
関連付けられたサービス・タイプを取得します。
- すべてのターゲット・リソース(バケットやシークレットなど)に次のタグを付けます。
-
共有バケットのタグ付け:
- 共有バケット・リソースの場合、
Enterprise.Service = 'Shared'
を設定して、サービス間のアクセシビリティを示します。
- 共有バケット・リソースの場合、
ステップ3: OCI IAMグループの作成
OCIマルチテナント環境でセキュアで分離されたアクセス管理を確保するために、次のポリシーが定義されます。
-
InfoSecグループ:ポリシー、タグ、ユーザーおよびグループを管理するためのアクセス権を持つセキュリティ管理者。
-
Terraform-Runnerグループ: OCIリソースを管理するためのInfrastructure-as-Code (IaC)実行グループ。
-
動的グループAdminInstances:一致ルール
All {tag.Enterprise.Service.value=’Admin’}
を使用します。 -
動的グループSalesInstances:一致ルール
All {tag.Enterprise.Service.value=’Sales’}
を使用します。 -
動的グループSupplyInstances:一致ルール
All {tag.Enterprise.Service.value=’Supply’}
を使用します。
ノート: InfoSecおよびTerraform-RunnerグループとIAMポリシーは、「一般的なOCI IAMポリシー」の項の説明に従ってすでに作成されています。
ステップ4: 定義済グループのOCI IAMポリシーの作成
テナント・リソース・アクセス・ポリシー:データの分離を維持するために、テナント・リソースは自身のシークレットおよびオブジェクト・ストレージにのみアクセスできる必要があります。
Allow dynamic-group AdminInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Admin’}
Allow dynamic-group SalesInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Sales’}
Allow dynamic-group SupplyInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Supply’}
Allow any-user to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Shared’}
Allow dynamic-group AdminInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Admin’}
Allow dynamic-group SalesInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Sales’}
Allow dynamic-group SupplyInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Supply’}
関連リンク
承認
-
著者 - Chetan Soni (シニア・クラウド・エンジニア)
-
貢献者 - Kiran Thakkar (マスター・プリンシパル・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Deep Dive into Tag based Oracle Cloud Infrastructure Identity and Access Management Policies
G30368-01
Copyright ©2025, Oracle and/or its affiliates.