IAMポリシーのEffectに指定するAllow、Denyについて備忘を兼ね、まとめてみました。
Allow、Denyが設定されたときの優先度についても整理しております。
- ■はじめに
- ■はじめに、のはじめに
- ■結論
- ■明示的な拒否(Denyが記載されている)
- ■明示的な許可(Allowが記載されている)
- ■暗黙のDeny(AllowもDenyも記載されていない)
- ■例題1
- ■例題2
- ■例題3
■はじめに
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"が働くからです。
以上です。