AWS S3存储桶策略中不允许使用某些条件?

时间:2016-02-06 04:41:54

标签: amazon-web-services amazon-s3 amazon-iam

我想定义一个限制特定用户访问权限的S3存储桶级策略(例如使用Cognito ID)。为什么不能在Bucket策略中使用如下所示的Condition块?

{  
   "Statement":[  
      {  
         "Effect":"Allow",
         "Principal": "*",
         "Condition": {  
            "StringEquals":{  
               "cognito-identity.amazonaws.com:aud":[  
                  "us-east-1:12345678-abcd-abcd-abcd-123456790ab",
                  "us-east-1:98765432-dcba-dcba-dcba-123456790ab"
               ]
            }
         },
         "Action":"s3:ListBucket",
         "Resource":"arn:aws:s3:::my-bucket-name"
      }
   ]
}

当我尝试时,我得到了错误:
政策条件无效 - cognito-identity.amazonaws.com:aud

但是这个块在用户级策略中工作正常(减去Principal)。我试图理解规则是什么,所以我不必盲目地尝试做出改变,并且看看哪些有效,"。

可以从存储桶策略中引用${cognito-identity.amazonaws.com:sub}(例如,在资源URL内部);但我可以将它作为条件键(如上例所示)。

那么:存储桶策略的规则是否与其他策略不同?这是在某处记录的吗?我特别喜欢这里指向权威来源的指针,因为我怀疑我可能会遗漏一些重要的文档。

1 个答案:

答案 0 :(得分:0)

您似乎无法在存储桶级策略中添加基于Cognito-id的条件,但这可以通过向您的身份池auth角色添加策略来实现。

假设您希望标识池中的每个用户都能够读取已删除但仅限特定用户的内容。这可以通过以下政策来实现。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>/*"
            ],
            "Condition": {
                "StringEquals": {
                    "cognito-identity.amazonaws.com:sub": [
                        "<cognito id1>",
                        "<conito id2>"
                    ]
                }
            }
        }
    ]
}