AWS政策评估

时间:2017-05-18 20:24:26

标签: amazon-s3 amazon-iam

我有一个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请求。这是明确的还是隐含的否认?为什么呢?

1 个答案:

答案 0 :(得分:1)

基于AWS Policy evaluation logic

  

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

     
      
  1. 默认情况下,拒绝所有请求。 (一般来说,提出要求   使用帐户凭据来获取帐户中的资源   永远允许。)
  2.   
  3. 显式允许会覆盖此默认值。
  4.   
  5. 明确的拒绝会覆盖任何允许。
  6.   

现在,如果我们查看S3 access policy language documentation

  

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

现在指定Conditions in S3 policy documentation

  

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

从这3个部分,特别是最后一部分我们可以说你的情况是“条件允许”,因为 “条件元素允许你指定政策何时生效的条件 < / strong>“此处您的政策中的条件是”允许“。

修改 以下是来自AWS "How does authorization work with multiple access control mechanisms?"

的另一篇有趣博客
  

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

     

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