Facebook Twitter
お問い合わせ
TOPICS
更新情報
ホーム > ブログ > Oracle Cloud > OCI IAM ポリシーの基本

OCI IAM ポリシーの基本

ブログ
Oracle Cloud
2025.02.21

皆さま、こんにちは!y.takanashiです。

詳細解説系の記事の第3弾となります。

今回は IAM ポリシー の基本機能について紹介します。

IAM ポリシーはOCI のアクセス管理において重要な役割を果たし、適切な設定が求められます。

本記事では、ポリシーの仕組みを理解し、実践的な活用方法を学んでいきましょう。

過去の詳細解説系の記事は以下からご覧いただけます。

Cloudiiブログ - 「OCI DRGの構成要素について解説してみる」

Cloudiiブログ - 「OCI モニタリングを詳しく解説する」

※注意
本記事はあくまで個人の検証に基づく内容です。

詳細情報については、以下のドキュメントをご参照ください。

OCI公式ドキュメント - 「ポリシーの仕組み」

Speaker Deck - 「IDおよびアクセス管理 概要」

※10ページ目からポリシーについての解説が記載されています。


IAM ポリシーとは?

IAM ポリシー(以下ポリシー)とは、Oracle Cloud Infrastructure (以下OCI)でリソースへのアクセス権限を制御する仕組みです。

これにより、以下を定義できます。

  • 誰が(Subject)
  • どのような操作を(Verb)
  • どのリソースに対して(Resource Type)
  • どの範囲で(Location)
  • どの条件で(Conditions)

これらの要素を組み合わせることで、リソースに対してきめ細かいアクセス制御を実現できます。

ポリシーは複数のステートメントによってアクセス権限を制御します。

基本構文は次の通りです。

Allow <Subject> to <Verb> <Resource Type> in <Location> [where <Conditions>]

ポリシー内では最大50個までステートメントを定義可能です。

(以降、ポリシー=ステートメントと捉えてください。)


注意点

ポリシーを作成する際、以下の点に注意が必要です。

  • ポリシーは常に「Allow」で始まり、「Deny」は使用不可
    • ただし、特定の操作を拒否する場合は 条件(Conditions) 内で定義可能(詳細は後日投稿する記事で紹介します。)
  • ユーザーはグループに所属しないとポリシーによるアクセス制御ができない
    • そのため、ユーザー作成時に必ず何らかのグループに所属させる必要 あり
    • 「any-user」で定義可能だが、個別ユーザー毎の権限付与は不可
  • デフォルトでは「最小権限の原則」により全操作が拒否される
    • そのためユーザーをグループに追加した後、ポリシーで必要な権限を付与する必要がある
  • ポリシーは大文字小文字を区別せず特定の文字列を認識するため、リソース名はテナンシ内で一意にする必要がある
  • 「Administrators」グループにはデフォルトで全権限が付与され、削除・変更不可
    (OCIで最初に登録したユーザーには自動で登録され、以降各設定を行えるようになる)

IAM ポリシーの構成要素

「1 IAM ポリシーとは?」で説明した以下構成要素について解説します。

  • 主体(Subject)
  • 動詞(Verb)
  • リソース・タイプ(Resource Type)
  • 場所(Location)
  • 条件(Conditions)

主体(Subject)

主体(Subject)は「誰が」実行するか定義します。

ポリシーは 個々のユーザーには適用できず必ずグループに所属させる必要 があります。そのため、ユーザーを作成した際には、適切なグループに追加することが重要です。

また、通常のグループに加えて、動的グループ(OCIDやリソース・タイプを指定して、コンピュート・インスタンス等のリソースをグループ化する仕組み)を使用してポリシーを定義することも可能です。これにより、特定のインスタンスやリソースに対して柔軟な権限付与が可能になります。

詳細はOCI 公式ドキュメントをご覧ください。

OCI公式ドキュメント - 「動的グループの管理」

グループ名の定義方法

ポリシー作成時には、グループ名の前に所属ドメインを定義する必要があります。

例)「A-Domain」というドメインに所属する「A-Admins」に IAM ポリシーを適用する場合:

Allow group 'A-Domain'/'A-Admins' to ~

※Defaultドメインに所属するグループの場合、ドメイン名の指定は省略可能です。

この場合、以下のように定義できます。

Allow group 'A-Admins' to ~

通常、IAM ポリシーは単一のグループに対して定義しますが、 複数のグループを指定することも可能です。その場合は、カンマ区切りで指定します。

Allow group 'A-Domain'/'A-Admins', 'A-Domain'/'B-Admins' to ~

同様に、グループ名ではなくグループの OCID を指定することも可能です。

Allow group id ocid1.group.oc1..aaaaaaaaqgroupid to ~

注意点

同じリソース名で グループ動的グループ を再作成した場合、ポリシーは自動で更新されず、以前の動的グループに対して権限が適用され続けてしまいます。

例えば、A-Resourcesという動的グループに以下ポリシーを適用したとします。

Allow dynamic-group 'A-Domain'/'A-Resources' to manage all-resources in tenancy

その後、動的グループのルールを変更した場合、ポリシーは自動で更新されず、以前の「A-Resources」に権限が残ったままとなります。

そのため同じリソース名のグループもしくは動的グループを再作成する場合、以下の手順を実施してください。

  1. 既存のポリシーを削除
  2. 新しいグループ、動的グループを作成
  3. 再度、同じポリシーを適用

これにより、新しいグループもしくは動的グループに正しく権限を適用できます。

その他の指定方法

その他ポリシーの主体として、以下のような特殊な定義も可能です。

1.any-group(グループに所属する全てのユーザーを対象)

すべてのグループのユーザーに権限を付与できます。

例)全ユーザーに対し、オブジェクト・ストレージの読み取り権限を付与する場合:

Allow any-group to read object-family in compartment Project-A

※「any-user」とほぼ同義ですが、「any-group」を使用するとグループのみに限定できるため、よりセキュアな設定が可能です。

2. service(OCI サービスに対して権限を付与)

特定の OCI サービスに対し、必要な操作権限を付与できます。

例)東京リージョンのオブジェクト・ストレージがリージョン間レプリケーションを実行できるようにする場合:

Allow service objectstorage-ap-tokyo-1 to manage object-family in compartment Project-A

これらの設定を活用することで、OCI のリソース管理をより効率的かつ安全に行うことができます。


動詞(Verb)

動詞(Verb)は上記で定義した主体(Subject)に対して「どのような操作を」実行するかを定義します。

ポリシーでは、適切な動詞を選択することで、必要最小限の権限を付与し、セキュリティリスクを低減できます。過剰な権限を付与すると、不必要な操作を許可してしまう可能性があるため、運用に応じた適切な動詞の設定が重要です。

ポリシーで利用可能な動詞は以下となっています。

動詞許可される操作対象ユーザー
manage全ての操作管理者
usereadの操作権限 + 既存リソースの操作(作成・削除は除く)日常のユーザー
readinspectの操作権限 + リソースのメタデータ取得内部監査者
inspectリソースのリスト取得外部監査者

動詞の詳細

  • manage:すべての操作を許可する最上位の権限であり、通常は管理者向けに設定されます。
  • use:readの権限に加え、既存リソースの操作(作成・削除は除く)が可能。ただし、ポリシーの更新や ネットワーク・セキュリティ・グループ(NSG)/ セキュリティ・リスト(SL)の更新 など、一部の操作は含まれません。
  • read:inspectの権限に加え、リソースのメタデータ(詳細情報)の取得が可能。内部監査目的で設定されることが多いです。
  • inspect:最も制限の厳しい動詞で、リソースのリスト表示のみが可能。リソースの詳細な内容にはアクセスできませんが、 VCN のメタデータ(ルート表の内容や NSG/SL の詳細)や ポリシーのステートメントの閲覧 は可能です。

動詞の選択は、付与する権限の粒度を決定する重要な要素です。以下の基準を参考に、適切な動詞を選択してください。

フルアクセスが必要な場合manage

リソースの管理はできるが、更新範囲を制限したい場合use

監査目的で、リソースの詳細を閲覧させたい場合read

リソースの一覧表示のみを許可したい場合inspect

適切な動詞を設定することで、OCI 環境のセキュリティを強化し、運用管理を効率化できます。


リソース・タイプ(Resource Type)

リソース・タイプ(Resource Type)は「どのリソースに対して」実行できるかを定義します。

例えば、VCNに対して権限を付与する場合、以下のように定義します。

Allow 'A-Domain'/'A-Admins' to manage vcns in compartment Project-A

しかし、サブネットやルート表など、別のネットワーク系リソースにも権限を付与する場合、それぞれ個別に Iポリシーを定義する必要があります。

そのため、 ファミリー・リソース を使用することで、関連するリソースを一括管理できます。

例えば、ネットワーク系の全てのリソースに対し、以下のように定義できます。

Allow 'A-Domain'/'A-Admins' to manage virtual-network-family in compartment Project-A

主なファミリー・リソース一覧

ファミリー・リソース名用途
all-resources全てのOCIリソース
cluster-familyKubernetes(OKE)
compute-management-familyインスタンス構成、インスタンス・プール
database-familyデータベース
dnsDNS
email-familyEmail Delivery
file-familyファイル・ストレージ
instance-familyコンピュート・インスタンス
object-familyオブジェクト・ストレージ
volume-familyブロック・ボリューム、ブート・ボリューム等

※IAM はファミリー・リソースには含まれておらず、個々のリソース・タイプとして定義する必要があります。

その他のリソースについては以下ドキュメントをご覧ください。

OCI公式ドキュメント - 「リソース・タイプ」


場所(Location)

場所(Location)は「どの範囲で」実行できるかを定義します。

ここではコンパートメントまたはテナンシへのアクセスの範囲を指定します。

OCI では 組織のセキュリティ管理を適切に行うため、明確なスコープを定義することが重要です。特に、ポリシーの影響範囲を誤って広く設定すると、意図しないアクセス許可が発生する可能性があります。

1.テナンシ全体へのアクセス許可

テナンシ全体に対してアクセス制御を実施する場合、tenancyを場所として使用します。

Allow 'A-Domain'/'A-Admins' to manage all-resources in tenancy

2.特定のコンパートメントへのアクセス許可

特定のコンパートメント(ここでは「Project-A」)を指定してアクセスを制御する場合、以下のように定義します。

Allow 'A-Domain'/'A-Admins' to manage all-resources in compartment Project-A

なお、 OCI ではコンパートメントの継承が適用され、指定したコンパートメント配下の子コンパートメントにも自動的に権限が継承されます。この点に注意してポリシーを設定してください。

また、 複数のコンパートメントを1つのステートメントで定義することはできません。各コンパートメントに対して個別のステートメントを作成する必要があります。

Allow 'A-Domain'/'A-Admins' to manage all-resources in compartment Project-A
Allow 'A-Domain'/'A-Admins' to manage all-resources in compartment Project-B

3. コンパートメントの OCID を使用する

主体(Subject)と同様に、 コンパートメントの OCID を指定することも可能です。

Allow 'A-Domain'/'A-Admins' to manage all-resources in compartment id ocid1.compartment.oc1..aaaaaaaaexampleocid

4. 特定のリージョンまたは可用性ドメインの指定

特定のリージョンや可用性ドメインを場所として制限したい場合、 条件(Conditions) を使用して制御可能です。

※条件については後日投稿する記事で紹介します。

Allow 'A-Domain'/'A-Admins' to manage all-resources in tenancy where request.region = 'NRT' # 東京リージョンの場合
Allow 'A-Domain'/'A-Admins' to manage all-resources in tenancy where request.ad = 'AD1' # AD-1の場合

エラー:「Compartment does not exist or not part of the policy compartment subtree」について

ポリシーの作成時に以下のエラーが発生する場合があります。

このエラーについて、以下の原因によって発生する可能性があります。

  1. コンパートメント自体がそもそも存在しない
  2. IAMポリシーを作成するコンパートメントの子コンパートメントではない

2.の場合、 コンパートメントのパスをコロン(:)で区切って指定 することで、正しく定義できます。

Allow 'A-Domain'/'A-Admins' to manage all-resources in compartment Project-A:System-A:Team-A

この方法を活用することで、IAM ポリシーの適用範囲を明確に設定し、誤ったアクセス許可を防ぐことが可能です。

OCI 環境を適切に管理するために、 必要最小限のスコープを意識しながらポリシーを定義すること をおすすめします。


最後に

IAMポリシーは、OCIのアクセス管理において重要な役割を果たします。

本記事では、IAMポリシーの基本構成要素を解説し、適切な設定や注意点について説明しました。

適切なポリシー設計により、セキュアかつ効率的なOCI環境の管理が可能になります。

尚、IAM ポリシーの詳細の記事については後日投稿しますのでお楽しみに!

以上となります。

この記事を通じて読者の皆様の問題解決の一助となれば幸いです。

最後まで読んで頂き、ありがとうございましたm(_ _)m


この記事が気に入ったら
「いいね!」

この記事を書いた人


関連コンテンツ

CONTACT お問い合わせ

Cloudiiのサービスやプロダクトについて
興味をお持ちの方は、
お気軽にお問い合わせください。