IAM 策略中跨多个 json 策略的评估逻辑
Evaluation logic in IAM policy across multiple json policies
对于 IAM 策略,假设有两个策略:
- 包含允许访问的单个语句的策略。
- 第二个策略只有一条语句来拒绝访问。
例如:
// first document
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ListRead",
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "*",
"Principal": { "AWS": "arn:aws:iam::12345:group/davidsgroup" }
}
]
}
// second document
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyS3ListRead",
"Effect": "Deny",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "*",
"Principal": { "AWS": "arn:aws:iam::12345:user/david" }
}
]
}
如果声明冲突,资源最终是否拒绝给用户,如何判断?例如,是按文件顺序吗?原则的粒度?或者,当有 多个政策文件 可能适用于给定用户时,通常如何确定。
最基本的级别:显式拒绝 > 显式允许 > 隐式拒绝。
在您的示例中,即使明确允许 David 的 IAM 组调用 s3:ListAllMyBuckets
,David 的 IAM 用户也被明确拒绝相同的操作。在这种情况下,显式拒绝胜过显式允许,David 被拒绝了。
如需更深入的了解,请参阅 Policy evaluation logic。
对于 IAM 策略,假设有两个策略:
- 包含允许访问的单个语句的策略。
- 第二个策略只有一条语句来拒绝访问。
例如:
// first document
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ListRead",
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "*",
"Principal": { "AWS": "arn:aws:iam::12345:group/davidsgroup" }
}
]
}
// second document
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyS3ListRead",
"Effect": "Deny",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "*",
"Principal": { "AWS": "arn:aws:iam::12345:user/david" }
}
]
}
如果声明冲突,资源最终是否拒绝给用户,如何判断?例如,是按文件顺序吗?原则的粒度?或者,当有 多个政策文件 可能适用于给定用户时,通常如何确定。
最基本的级别:显式拒绝 > 显式允许 > 隐式拒绝。
在您的示例中,即使明确允许 David 的 IAM 组调用 s3:ListAllMyBuckets
,David 的 IAM 用户也被明确拒绝相同的操作。在这种情况下,显式拒绝胜过显式允许,David 被拒绝了。
如需更深入的了解,请参阅 Policy evaluation logic。