相反するIAMポリシーをつけたらどうなるのか&AWSサポートからの回答あり【検証】【AWS】

IAMユーザーに相反するIAMポリシーを2つつけたらどうなるのでしょうか、検証してみました。
記事の目次
結論:拒否ルールが優先される
許可ルールと拒否ルールがある場合は、拒否が優先されるそうです。
下記に検証フローを紹介します。
最初の状態
IAMユーザーに付与している権限は下記の通り

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListAllMyBuckets",
"s3:ListBucket"
],
"Resource": "*"
}
]
}
可能なアクション
もちろんですが、S3バケット表示可能です。

アップロード/ダウンロードも可能です。

相反するポリシーを付与
下記の拒否ポリシーをアタッチ

この状態でテスト

AllowとDenyがある状態でアップロード/ダウンロードしてみる
S3からダウンロード

S3にアップロード

どうやら許可と拒否を含めていると、拒否が優先されるようですね。
【AWSサポートに聞いてみた!】
【質問】
[1] AWS エンフォースメントコードロジックがリクエストを評価してアクセスを許可または拒否する方法 – AWS Identity and Access Management https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-denyallow.html
同一のIAMロールにS3のアップロード許可ポリシーとS3のアップロード拒否ポリシーをアタッチしている場合アクセスが拒否されると認識しております。
これは、IAMポリシーの評価の際に、すべてのポリシーに対して評価を行っているため発生しているという認識でお間違い無いでしょうか
【回答】
ご認識の通りです。
IAM ポリシーの評価では、すべてのポリシーを評価し、1つでも明示的な拒否が存在する場合は、他に許可のポリシーが存在していても最終的に拒否される仕様となっております。
【IAM ポリシー評価の仕組み】
AWS 公式ドキュメント[1]では、IAM ポリシーの評価ロジックについて以下のように説明されております。
> デフォルトでは、すべてのリクエストが拒否されます。(これをデフォルトの拒否と呼びます。)明示的に許可されている場合にのみ、そのリクエストは許可されます。
【詳細な評価ロジック】
IAM ポリシーは、以下の順序で評価されます:
– 順序1. 認証 – IAM は最初にポリシーを使用して、リクエスト者を認証します。
– 順序2. 処理 – IAM は、リクエストのコンテキストに適用されるすべてのポリシーを処理します。
– 順序3. 明示的な拒否がないかチェック – IAM は最初に、適用可能なすべてのポリシーの中に明示的な拒否がないかをチェックします。明示的な拒否が 1 つでも見つかった場合、IAM は「拒否」の決定を返します。
– 順序4. 明示的な許可がないかチェック – IAM は次に、適用可能なすべてのポリシーの中に明示的な許可がないかをチェックします。明示的な許可が 1 つでも見つかった場合、IAM は「許可」の決定を返します。
– 順序5. 拒否を返す – 明示的な許可も明示的な拒否も見つからない場合、IAM はデフォルトの「拒否」を返します。
このため、ご質問の例のように、同一の IAM ロールに Amazon S3 のアップロード許可ポリシー(順序4)とアップロード拒否ポリシー(順序3)が存在する場合、明示的な拒否(順序3)が優先され、アクセスは拒否されます。詳細につきましてはこちらの参考資料[2]をご覧ください。
[2] ポリシーの評価論理 – AWS Identity and Access Management https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
- タグ:
- IAM