即使使用存储桶和/或用户策略,访问在AWS s3存储桶中被拒绝
我已经尝试了几乎所有可能的存储桶策略。还尝试向用户添加策略,但每次尝试使用AWS控制台从s3存储桶下载对象时,都会收到“拒绝访问”。即使使用存储桶和/或用户策略,访问在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/*"
]
}
]
}
至于因为这听起来很奇怪,有可能要将对象上传到Amazon S3,那么拥有存储桶的帐户将无法访问。
将对象上载到Amazon S3(PutObject
)时,可以指定访问控制列表(ACL)。可能的值是:
- 私人
- 公共阅读
- 公共读写
- 验证读取
- AWS-EXEC阅读
- 桶所有者读
- 桶拥有者全控制
通常应该使用bucket-owner-full-control
ACL上传对象。这允许存储桶的所有者访问该对象并有权控制该对象(例如删除它)。
如果未提供此权限,则他们无法访问或修改对象。
我知道它与您认为水桶应该工作的方式相矛盾,但这是真的!
如何解决此问题:与bucket-owner-full-control
ACL,或
- 重新上传物件的原始上传者可遍历的对象,做一个就地
CopyObject
一个新的ACL。这改变了权限而不必重新上传。
不应该有一种方式让我有一个桶或用户政策,只是说“无论如何上传,这个用户有权限从这个桶下载任何东西”? – scottndecker
如果上传的对象没有Bucket Owner权限,则不可能。我知道 - 这很奇怪! –
谢谢!我发现这些文章很有帮助:http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html和http://docs.aws.amazon.com/AmazonS3/latest/API/ RESTObjectPUT.html。最后,我做了一个restRequest.AddHeader(“x-amz-acl”,“bucket-owner-full-control”)并解决了它。 – scottndecker
您可以通过使用解决它:http://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-acl.html
奚落对象ACL:这必须由原始上传来完成。
但肯定比再次复制数据更快。
我有TB的数据需要处理。
aws s3api put-bucket-acl --bucket $foldername --key $i --grant-full-control uri=http://acs.amazonaws.com/groups/global/AllUsers
你能列出通过控制台的对象,但只是不下载它们?最初加载到桶中的对象是如何的?他们是通过CLI复制的吗? –
@JohnRotenstein过程:应用程序在桶中放置一个对象。我刷新控制台,我看到它出现。我选择它并点击“下载”。我得到了一个丑陋的网页,说拒绝访问。如果我通过控制台手动上传对象,我可以立即下载它。 – scottndecker