ふと電車の中でX見てたら「OCI IAMでDeny(拒否)ポリシーが導入」というのを見かけたので。こういうの大好きなんです。
まずはリリースノートから
Deny Policies in IAM: Explicit Access Control
- Opt-in Protection: Disabled by default. Deliberate, permanent activation required.
デフォルトは無効。
- Explicit Denial: Allow for precise blocking of actions, even overriding previously granted permissions.
有効を無効で上書きできる。そりゃ、基本動作が無効なので、これができなきゃ意味がない。
- Explicit Tenancy Guardrail: Help enforce strict resource protection at compartment levels.
コンパートメントレベルで動く。Allowと同じように使えるってことね。
- Account Lockout Prevention: Default administrator group in the default domain are always exempt from deny statements.
Administoratorsグループは拒否ポリシーの対象外、かな?要検証。
- Deny policies don't override identity domains administrator roles.
Administoratorsグループに所属していなくても、ドメインの管理者なら拒否ポリシーの対象外ってことかな?ここも要検証。
- Enabling a deny policy is irreversible in the UI. However, you can write a deny statement that restricts users, except for the default administrator group of the default domain, from creating these statements.
一度有効にしたら無効化できないとな。ちょっと勇気がいるけど、やっちゃいますか。
ちなみに、すでに既知の問題も公開されています。
ざっと見た感じ、タグベースのIAM Policyとは相性が良くなさそう?
では、有効にしてみましょう
無効化できないので、どきどきですね。
ポリシーはテナントの設定なので、ドメインごと、コンパートメントごとに有効無効とかはできないですね。
拒否ポリシーの作成を「拒否」するポリシーが作成されました。
request.principal.idのところに有効化した際のユーザのOCIDが入ってますね。

まずは挙動確認
Denyを書きたい筆頭は、おそらく「リソース削除」ですよね。
ということで、こういうIAMポリシーを作ってみました。末尾のany-userで削除そのものを拒否します。
allow group DEV-Group to manage instance-family in compartment DEV
allow group DEV-Group to use virtual-network-family in compartment DEV
deny any-user to manage all-resources in compartment DEV where request.permission = /*_DELETE/
では実際に削除してみましょう。
cannot be terminated because this user does not have sufficient permissions
で失敗しますね。想定通り。

検証1: Administratorsグループに入れるとどうなるか?
消せました。ドキュメントの記載通り、Denyは対象外になるようですね。
検証2: ドメイン管理者のみだとどうなるか?
Administratorsグループに入ると自動的にアイデンティティ・ドメイン管理者にもなりますが、Administoratorsグループから抜けて、手動でアイデンティティ・ドメイン管理者に追加します。
先ほどインスタンスを消してしまっているので、再作成したうえで実行。
ですよねー。先のドキュメントの「identity domains administrator roles」は、Administorators向けの権限を指しているんでしょうね。

ちなみに、この後、追加したユーザをアイデンティティ・ドメイン管理者から消せなくなりました。これはSRかな。。。
活用方法
やっぱりぱっと思いつくのは削除機能で、タグと組み合わせて誤削除を防止、みたいなことを考えるのですが、既知の問題にあるように、タグを条件に入れても、コンソールからの削除はブロックしないんですよね。そのうち対応されることを期待しましょう。 後で試したらうまくいったので、訂正。すみません。
今は無難に、複雑になりすぎたIAM Policyを整理する用途で使うのが良いのかなと思います。




