7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新登場したIAM Denyポリシーを使ってみる。

Last updated at Posted at 2025-12-01

これまで、OCIのIAMポリシーではプリンシパルに対して何らかの権限を許可(Allow)していくタイプの権限付与のみを行うことができましたが、あらたなIAMポリシー構文として拒否ポリシー(Deny Policy)が登場しました。

管理者側から一括でユーザーに対してなんらかの権限を制限したいような場合に利用できそうです。

ドキュメントの内容を確認しながら、実際に試してみます。

テナンシでDenyポリシーの有効化

Denyポリシーはデフォルトでは無効化されています。利用するためにはテナンシレベルで有効化を行う必要があり、一度有効化すると無効化はできません

Default Identity DomainのAdministratorsグループのメンバーのみがコンソール上で有効化作業を実施できます。
image-20251127105120795.png

  1. メニュー「アイデンティティとセキュリティ」→「ポリシー」を表示し、「アクション」から「ポリシー設定」を選択
    image-20251127105010961.png

  2. 「IAM拒否ポリシーの有効化」のトグルをクリック
    image-20251127105027860.png

  3. 「IAM拒否ポリシーの有効化の確認」の注意書きがポップアップするので、内容を確認して「有効化」をクリック。(コンソールの注意書きにはもとに戻せないとは書いてないので注意。)

    • 全てのユーザーがDenyステートメントを作成できないようにするデフォルトのDenyポリシーが自動的に作成される。
    • Default DomainのAdministratorsグループ、もしくはこの操作を行ったユーザーのみがDenyポリシーを作成、管理することができる。
      image-20251127105047286.png
  4. 有効化が成功image-20251127115821081.png

  5. 自動的に「IAMDenyPolicy」というポリシーが作成され、ポリシーのページにリダイレクトされます。image-20251127115930844.png

  6. ステートメントは以下の1つのみ記載されています。image-20251127115953880.png

    • deny any-user to manage policies in tenancy where all {target.policy.type = 'deny', request.principal.id != 'ocid1.user.oc1..aaaaaaaa3lbyx2nrbuqcgu23rpj5hoeuw4dvtmrmc23tjngd6rqhtayrkgaa'}
      

    有効化したユーザーのOCIDだけを除外し、他のユーザーはdenyポリシーは作成できないというポリシーになっています。

    また、このポリシーの有無にかかわらず、Default DomainのAdministratorsグループのユーザーは常に拒否ポリシーの適用対象外となっています。

    つまり、テナンシレベルで有効化を行ってもデフォルトでは管理者以外はDenyポリシーを作成することはできないようになっています。また、管理者は常にDenyポリシーの影響を受けないようになっています。あやまったDenyポリシーを作成してしまって管理者ですら操作ができなくなってしまうことや、既存の権限設定に影響を与えることを防ぐためです。

    以上で有効化の作業は完了です。

    Denyポリシー作成前後での動作確認

    前提:テスト用のユーザー testuser をグループ testgroup に所属させ、以下のAllowポリシーでtestgroupにhandsonコンパートメントのmanage all-resources権限を付与している状態です。また、Cloud Shellの利用権限も与えています。

    allow group testgroup to manage all-resources in compartment handson
    

    image-20251127134536925.png

    Denyポリシー作成前のオブジェクトストレージ操作

    1. testuserでコンソールからオブジェクト・ストレージのバケットにオブジェクトをアップロードし、CLIでダウンロードしてみます。image-20251127135023149.png

      image-20251127135901772.png

    2. 問題なくアップロード、ダウンロードができることが確認できました。

    Denyポリシー作成

    1. 管理者ユーザーで以下のDenyポリシー文を追加します。既存のAllow文に変更は加えていません。

      deny group testgroup to manage objects in tenancy
      

      image-20251128085715322.png

    Denyポリシー作成後のオブジェクトストレージ操作(Manageを拒否)

    1. testuserでさきほどと同じくオブジェクトのアップロードを試します。

    2. 以下のエラーで失敗しました。AllowのポリシーよりもDenyのポリシーのほうが優先されるため、objectのmanageを必要とするアップロード作業はできなくなったことがわかりました。

      APIエラー
      
      Either the bucket named 'test_bucket' does not exist in the namespace  'xxxxxxxxxxx' or you are not authorized to access it. (BucketNotFound).
      

      image-20251128085848955.png

    3. ただしオブジェクトのダウンロードは引き続き可能です。オブジェクトのreadは拒否していないためです。
      image-20251128090108939.png

Denyポリシー作成後のオブジェクトストレージ操作(Readを拒否)

  1. 次に、管理者ユーザーでDeny文を編集して、readを拒否します。

    • 変更前:

      deny group testgroup to manage objects in tenancy
      
    • 変更後:

      deny group testgroup to read objects in tenancy
      

    image-20251128090330447.png

  2. testuserで先ほどと同様にオブジェクトのアップロードとダウンロードを試します。

  3. アップロードは先ほどと同じエラーで失敗しました。image-20251128090718999.png

  4. 今回はダウンロードも同じく失敗しました。ダウンロードするにはReadが必要なためです。image-20251128090756437.png

  5. ただし、listコマンドは成功します。これは、listに必要なinspectは拒否されていないためです。image-20251128091042730.png

以上のことから、IAMポリシーの動詞に関してはドキュメントに記載されている通り以下のとおりであることが実際に確認できました。

  • IAMポリシーの動詞は累積的で、Manage > Use > Read > Inspect の順でより多くの(強い)権限が含まれています。
  • Allow文の場合は上位の動詞を許可すれば下位の動詞も必ず含まれることになります。つまり、Manageを許可すればUse, Read, Inspectの内容もすべて許可されていることになります。
  • Deny文の場合は逆で、下位の動詞を拒否すれば上位の動詞も含まれることになります。たとえばReadを拒否すればその上位のUseやManageも拒否されますが、Inspectは拒否されません。 これによって、読み取りまではできるけれど作成や削除をさせたくない、あるいは、リスト表示まではできるけれどリソースの内容の参照はさせたくない、といったケースに対応することができます。
  • 詳細:ドキュメント Metaverb Inversion

今回、Denyポリシーの基本的な動きは確認できました。AllowよりもDenyは優先されるため、もし利用する際には誤って必要な権限まで剥奪してしまわないように十分に注意しながら設定していく必要があると感じました。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?