即使使用存储桶和/或用户策略,AWS s3存储桶上的访问也被拒绝

时间:2017-08-16 03:11:22

标签: amazon-web-services amazon-s3 permissions access-denied

我已经尝试了几乎所有可能的存储桶策略。还尝试向用户添加策略,但每当我尝试使用AWS控制台从s3存储桶下载对象时,我都会拒绝访问。

广告管理政策:

{
    "Version": "2012-10-17",
    "Id": "MyPolicy",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12345678901011:user/my-username"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "XX.XXX.XXX.XXX/24",
                        "XXX.XXX.XXX.XXX/24"
                    ]
                }
            }
        }
    ]
}

这不起作用所以我尝试在我的用户名中添加政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StmtXXXXXXXXXX",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ]
        }
    ]
}

2 个答案:

答案 0 :(得分:12)

听起来很奇怪,可以将对象上传到Amazon S3,拥有存储桶的帐户无法访问

当对象上传到Amazon S3(PutObject)时,可以指定访问控制列表(ACL)。可能的值有:

  • 私有
  • 公共读
  • 公共读写
  • 验证读
  • AWS-EXEC读
  • 斗所有者读
  • 斗所有者全控制

您通常应该使用bucket-owner-full-control ACL上传对象。这允许桶的所有者访问对象和控制对象的权限(例如删除它)。

如果未提供此权限,则他们无法访问或修改对象。

我知道这与你认为水桶应该有效的方式相矛盾,但这是真的!

如何修复:

  • 使用bucket-owner-full-control ACL或
  • 重新上传对象
  • 原始上传器可以遍历对象并使用新ACL执行就地CopyObject。这会更改权限,而无需重新上传。

答案 1 :(得分:1)

您可以使用:http://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-acl.html

解决此问题

put-object-acl:这必须由原始上传者完成。

但肯定比再次复制数据更快。

我有TB的数据要处理。

aws s3api put-bucket-acl --bucket $foldername --key $i --grant-full-control uri=http://acs.amazonaws.com/groups/global/AllUsers