为什么即使我在存储桶策略中授予了权限,用户仍无法访问我们的S3存储桶?

时间:2020-10-08 13:51:41

标签: amazon-web-services amazon-s3

我组织中的其他一些用户需要访问我们的S3存储桶。我进入了存储桶策略,复制并粘贴了现有的部分,并输入了他们给我的帐户ID(我称为ABC和DEF)。

他们尝试过,并且在尝试列出对象时仍然被拒绝。还有什么需要做的吗?

像List *这样的通配符是否实际起作用,还是我必须说ListObject?有人在政策中的其他地方做了。

{
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::AWS-account-id-ABC:role/prod-role",
            "arn:aws:iam::AWS-account-id-DEF:role/dev-role"
        ]
    },
    "Action": [
        "s3:Get*",
        "s3:Put*",
        "s3:List*"
    ],
    "Resource": "arn:aws:s3:::bucket_name/*"
}

2 个答案:

答案 0 :(得分:2)

由于主体位于不同的AWS账户中,因此IAM策略和存储桶策略均有效。

检查附加到这些角色的IAM策略是否具有S3:ListBucket权限。 ( S3:ListBucket 是允许用户列出存储桶中对象的权限名称。ListObjects是API调用。)

答案 1 :(得分:2)

根据documentationListBucket需要存储桶资源(不是您提供的对象资源)。因此,我认为您应该按如下方式修改政策。

{
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::AWS-account-id-ABC:role/prod-role",
            "arn:aws:iam::AWS-account-id-DEF:role/dev-role"
        ]
    },
    "Action": [
        "s3:Get*",
        "s3:Put*"
    ],
    "Resource": "arn:aws:s3:::bucket_name/*"
},
{
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::AWS-account-id-ABC:role/prod-role",
            "arn:aws:iam::AWS-account-id-DEF:role/dev-role"
        ]
    },
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::bucket_name"
}