AWS 策略评估



我有一个 IAM 角色要附加到微服务,以便根据用户代理限制 S3 文件夹访问。微服务父账户和存储桶拥有者相同。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-test/service/${aws:useragent}/*"
]
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-test"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"service/${aws:useragent}/*"
]
}
}
}
]
}

同一 S3 存储桶具有默认 ACL,其中账户对对象和权限具有 R/W。

鉴于 ACL 和 IAM 策略,我不明白此策略如何评估。例如,具有上述角色的用户发出put_object请求,以bucket-test/service/micro-b/new_object用户代理micro-a。这是明示否认还是隐含否认?为什么?

基于 AWS 策略评估逻辑:

发出请求时,AWS 服务会决定是允许还是拒绝给定的请求。评估逻辑遵循以下规则:

  1. 默认情况下,所有请求都将被拒绝。(一般而言,提出的请求 对账户中的资源使用账户凭证是 始终允许。
  2. 显式允许将覆盖此默认值。
  3. 显式拒绝将覆盖任何允许。

现在,如果我们查看 S3 访问策略语言文档:

效果 –当用户请求特定操作时的效果 - 可以是允许或拒绝。 如果未显式授予对资源的访问权限(允许),则隐式拒绝访问。您还可以显式拒绝对资源的访问,您可以这样做以确保用户无法访问它,即使其他策略授予访问权限也是如此。

现在在 S3 策略文档中指定条件:

访问策略语言允许您在授予权限时指定条件。条件元素(或条件块)允许您指定策略生效的条件。

从这 3 个部分中,特别是最后一个我们可以说您的情况是"条件允许",因为"条件元素允许您指定策略生效时的条件",而这里的策略中的条件是"允许"。

编辑:这是AWS关于"授权如何与多种访问控制机制一起工作"的另一个有趣的博客。

每当 AWS 委托人向 S3 发出请求时,授权决策取决于所有适用的 IAM 策略、S3 存储桶策略和 S3 ACL 的联合。

根据最小特权原则,决策默认 拒绝和显式拒绝总是胜过允许。例如,如果 IAM 策略授予对对象(S3 存储桶策略)的访问权限 拒绝对该对象的访问,并且没有 S3 ACL,则访问将 被拒绝。同样,如果没有方法指定 ALLOW,则 默认情况下,请求将被拒绝。仅当没有方法指定 DENY 时 并且一个或多个方法指定允许请求的允许。

最新更新