IAM ロールのポリシー評価
次のフローチャートは、単一のアカウント内の IAM ロールに対してポリシー評価の判定がどのように行われるかに関する詳細を示しています。

IAM ユーザーのポリシー評価
次のフローチャートは、1 つのアカウント内の IAM ユーザーに対してポリシー評価の判定がどのように行われるかの詳細を示しています。

アイデンティティベースのポリシーおよびリソースベースのポリシーの評価の例
最も一般的なポリシータイプは、アイデンティティベースのポリシーとリソースベースのポリシーです。リソースへのアクセスがリクエストされると、同じアカウント内の少なくとも 1 つの許可について、AWS はポリシーによって付与されたすべてのアクセス許可を評価します。これらのポリシーのいずれかが明示的に拒否された場合、許可は無効になります。
重要
同じアカウント内の ID ベースのポリシーまたはリソースベースのポリシーの一方がリクエストを許可し、他方が許可しない場合でも、リクエストは許可されます。
Carlos のユーザー名が carlossalazar
で、ファイルを Amazon S3 バケット amzn-s3-demo-bucket-carlossalazar-logs
に保存するとします。
また、次のポリシーを IAM ユーザー carlossalazar
にアタッチするとします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ListRead",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetAccountPublicAccessBlock",
"s3:ListAccessPoints",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Sid": "AllowS3Self",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
"arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
]
},
{
"Sid": "DenyS3Logs",
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::*log*"
}
]
}
このポリシーの AllowS3ListRead
ステートメントでは、アカウント内のすべてのバケットを一覧表示することを Carlos に許可します。AllowS3Self
ステートメントでは、Carlos のユーザー名と同じ名前のバケットに対するフルアクセスを Carlos に許可します。DenyS3Logs
ステートメントでは、名前に log
が含まれている S3 バケットへのアクセスを Carlos に拒否します。
さらに、次のリソースベースのポリシー (バケットポリシー) を amzn-s3-demo-bucket-carlossalazar
バケットにアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012
:user/carlossalazar"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
"arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
]
}
]
}
このポリシーでは、carlossalazar
ユーザーのみが amzn-s3-demo-bucket-carlossalazar
バケットにアクセスできることを指定します。
Carlos がファイルを amzn-s3-demo-bucket-carlossalazar-logs
バケットに保存することをリクエストすると、AWS はこのリクエストに適用されるポリシーを決定します。この例では、アイデンティティベースのポリシーとリソースベースのポリシーのみが適用されます。これらは両方ともアクセス許可ポリシーです。アクセス許可の境界は適用されないため、評価ロジックは次のロジックに限定されます。

AWS は、最初にリクエストのコンテキストに適用される Deny
ステートメントの有無を確認します。アイデンティティベースのポリシーでは、Carlos に対してログ記録用の S3 バケットへのアクセスが明示的に拒否されるため、該当するステートメントが見つかります。Carlos はアクセスが拒否されます。
彼は間違いに気が付いて、ファイルを amzn-s3-demo-bucket-carlossalazar
バケットに保存しようとします。AWS は Deny
ステートメントを探しますが、1 つも見つかりません。次に、アクセス許可ポリシーを確認します。ID ベースのポリシーとリソースベースのポリシーの両方で、リクエストが許可されます。従って、AWS でリクエストが許可されます。どちらでもステートメントが明示的に拒否された場合、リクエストは拒否されます。いずれかのポリシータイプでリクエストが許可され、もう一方では許可されない場合でも、リクエストは許可されます。