我试图允许自己下载S3存储桶中的现有文件。我修改了Bucket Policy,如下所示:
{
"Sid": "someSID",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
}
}
我的理解是,添加到策略应该为我的帐户“myuid”提供“bucketname”的完全权限,包括该存储桶中已有的所有文件。但是,当我尝试通过控制台中出现的链接下载任何这些文件时,我仍然会收到“拒绝访问”错误。
有什么想法吗?
答案 0 :(得分:17)
David,您说得对,但我发现除了bennie下面提到的内容之外,您还必须向“认证用户”授予视图(或任何您想要的访问权限)# 39 ;.
但更好的解决方案可能是编辑用户的策略以仅授予对存储桶的访问权限:
{
"Statement": [
{
"Sid": "Stmt1350703615347",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {}
}
]
}
第一个块授予存储桶中所有元素的所有S3权限。第二个块授予存储桶本身的列表权限。
答案 1 :(得分:12)
答案 2 :(得分:6)
将资源arn:aws:s3:::bucketname/AWSLogs/123123123123/*
更改为arn:aws:s3:::bucketname/*
以拥有对bucketname
答案 3 :(得分:4)
使用以下方法在Android中使用TransferUtility
上传公共可读表单的任何文件。
transferUtility.upload(String bucketName, String key, File file, CannedAccessControlList cannedAcl)
示例强>
transferUtility.upload("MY_BUCKET_NAME", "FileName", your_file, CannedAccessControlList.PublicRead);
答案 4 :(得分:2)
澄清一下:它确实没有很好地记录,但你需要两个访问语句。
除了允许对资源" arn:aws:s3 ::: bucketname / AWSLogs / 123123123123 / *"进行操作的语句之外,还需要第二个语句,允许ListBucket到&#34 ; arn:aws:s3 ::: bucketname",因为在内部,Aws客户端会在执行操作之前尝试列出存储桶以确定它是否存在。
使用第二个语句,它应该如下所示:
"Statement": [
{
"Sid": "someSID",
"Action": "ActionThatYouMeantToAllow",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
},
{
"Sid": "someOtherSID",
"Action": "ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
}
]
注意:如果您正在使用IAM,请跳过"校长"一部分。
答案 5 :(得分:1)
如果您有加密存储桶,则需要允许公里数。
答案 6 :(得分:0)
转到此link并生成政策。
在Principal
字段中输入*
在Actions
中设置Get Objects
将ARN
设为arn:aws:s3:::<bucket_name>/*
然后添加语句,然后生成策略,您将获得一个JSON文件,然后只需复制该文件并将其粘贴到存储桶策略中即可。
有关更多详细信息,请转到here.
答案 7 :(得分:0)
在s3中显示静态网站:
这是存储桶策略:
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}
答案 8 :(得分:0)
可能的原因:如果文件是由另一个AWS账户用户放置/复制的,则您将无法访问该文件,因为仍然不是文件所有者。已在目录中放置文件的AWS账户用户必须在放置或复制操作期间授予访问权限。
对于放置操作,对象所有者可以运行以下命令:
aws s3api put-object --bucket destination_awsexamplebucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control
对于单个对象的复制操作,对象所有者可以运行以下命令之一:
aws s3api copy-object --bucket destination_awsexammplebucket --key source_awsexamplebucket/myobject --acl bucket-owner-full-control
ref:AWS Link
答案 9 :(得分:0)