自由気ままに書いちゃおう

好きなことをつらつらと・・・

【AWS】IAMポリシーのAllow/Denyの優先度について

IAMポリシーのEffectに指定するAllow、Denyについて備忘を兼ね、まとめてみました。
Allow、Denyが設定されたときの優先度についても整理しております。

■はじめに

IAMポリシーには「タイプ」が6つあります。
1.アイデンティティ(ID)ベースのポリシー
2.リソースベースのポリシー
3.アクセス許可の境界
4.SCP
5.ACL
6.セッションポリシー

IAM でのポリシーとアクセス許可 - AWS Identity and Access Management

 

本記事は、上記1:アイデンティティ(ID)ベースのポリシー におけるAllow/Denyについて纏めております。

■はじめに、のはじめに

有名どころのIAMポリシーとして「AdministratorAccess」がありますが、ポリシーは以下のようになっております。

この5行目に記載のAllowやDenyの記載によって、どの条件が反映され評価されるのかを調べました。

AllowやDenyが一つだけの場合は混乱しないのですが、複数の条件が重なっている場合(=Allow、Denyが複数使われている場合)はわかりづらくなります。

■結論

優先順は下記の通りです。

明示的な拒否(Denyが記載されている)※一番強い、優先度:高


明示的な許可(Allowが記載されている)

暗黙のDeny(AllowもDenyも記載されていない)※一番弱い、優先度:低

■明示的な拒否(Denyが記載されている)

IAMポリシー内に明示的にDenyが記載されている場合、同じ条件でAllowが記載されていたとしてもDenyが勝ちます。

 

パターン1)

AdministratorAccessポリシーを複製し以下のように設定した場合、全AWSリソースへのアクセスが拒否されます。。。
※実際に使用することは無いですが、説明のためあえて作ったIAMポリシーです。

このように明示的にDenyを記載した場合、Allowよりも優先されます。

パターン2)

以下のように、全AWSリソースを明示的に拒否し、RDS関連のみ許可した場合はどうでしょうか?

この場合も、明示的なDenyが勝つので、全AWSリソースへアクセス出来ません。

パターン3)

パターン2のAllowとDenyを逆にしてみた場合は、

明示的なDenyは「rds:*」に対してのみ有効になるため、
・RDSへは全アクセス不可
・RDS以外へはアクセス可
となります。

■明示的な許可(Allowが記載されている)

こちらは実は既出です。「AdministratorAccess」ポリシーが該当します。

他の例としては、以下のように「RDSのみを許可」する記載が該当します。

このような感じで、Allowが記載されている場合、「明示的なAllow」と言います。

■暗黙のDeny(AllowもDenyも記載されていない)

こちらは「明示的なAllow」の時に使った以下のもので説明致します。
※「RDSへのアクセスはすべて許可」


この場合、RDS以外のAWSリソースへのアクセスは全て拒否されます。
IAMポリシー上にDenyが記載されていないけど、拒否されます。(なので、「暗黙の」Denyです)

■例題1



上記の場合は、
「rds全リソースへのアクセスが不可」
となります。



■例題2

若干いじわる問題ですが、
・RDSは全てアクセス不可
・ec2は送信元IPが「111.111.111.111/32」であれば、特定の操作のみ可(7行目~15行目のAction操作のみ可能)
となります。

■例題3

※例題2から5行目と25行目のAllow/Denyを逆にしました。

この場合、
・送信元IPが「111.111.111.111/32」であれば、7行目~15行目のアクセスを拒否
・送信元IPが「111.111.111.111/32」以外であれば、RDSの全アクセスが可能
となります。

送信元IPが「111.111.111.111/32」であれば、7行目~15行目以外のActionは可能でしょうか?
答えは・・・・・・・・・・・・・・・・・「アクセス不可」です。
理由は、"暗黙のDeny"が働くからです。


以上です。