AWS policy evaluation

Aak*_*eth 6 amazon-s3 amazon-iam

I have an IAM role to be attached to a microservice in order to limit S3 folder access based on user-agent. The microservice parent account and the bucket owner are the same.

{
    "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}/*"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

The same S3 bucket has a default ACL where the account has R/W on objects and permissions.

Given the ACL and the IAM policy, I don't understand how this policy evaluates. For example, a user with the above role makes a put_object request to bucket-test/service/micro-b/new_object with user agent micro-a. Is this an explicit or implicit deny? Why?

kos*_*osa 5

基于AWS策略评估逻辑

\n\n
\n

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

\n\n
    \n
  1. 默认情况下,所有请求都会被拒绝。(通常,始终允许使用帐户中资源的帐户凭据发出的请求。)
  2. \n
  3. 显式允许会覆盖此默认值。
  4. \n
  5. 显式拒绝会覆盖任何允许。
  6. \n
\n
\n\n

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

\n\n
\n

效果 \xe2\x80\x93当用户请求特定操作时会产生什么效果\xe2\x80\x94这可以是允许或拒绝。\n 如果您没有显式授予对资源的访问权限(允许),则访问权限为含蓄地否认。您还可以显式拒绝对资源的访问,这样做是为了确保用户无法访问该资源,即使不同的策略授予访问权限也是如此。

\n
\n\n

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

\n\n
\n

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

\n
\n\n

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

\n\n

编辑: \n这是 AWS 的另一个有趣的博客,内容是“授权如何与多种访问控制机制一起工作?”

\n\n
\n

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

\n\n

根据最小权限原则,决策默认为“拒绝”,并且显式“拒绝”始终胜过“允许”。例如,如果 IAM 策略授予对某个对象的访问权限,而 S3 存储桶策略拒绝对该对象的访问,并且没有 S3 ACL,则访问将被拒绝。同样,如果没有方法指定 ALLOW,则默认情况下该请求将被拒绝。仅当没有方法指定 DENY\n 并且一个或多个方法指定 ALLOW 时才会允许该请求。

\n
\n