我终于设法将一些图像上传到我的s3存储桶中,但无法打开它们。如果我在存储桶中导航到它们,则会得到“对象URL”,但是每次尝试打开它时,都会得到:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>7F4BB573F589D927</RequestId>
<HostId>GkYjQGNkrh84HodCaQxfTHKFCDLle82B5d4oa6EyeK1ZJMt/BeZG09eS2CIiR6Ri2Va/IvQIcIE=</HostId>
</Error>
我添加了存储桶策略:
{
"Version": "2012-10-17",
"Id": "Policy1547051060680",
"Statement": [
{
"Sid": "Stmt1547051055882",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket-name06/*"
}
]
}
但是它似乎不起作用。我还能做些什么吗?
答案 0 :(得分:1)
您的存储桶策略已经公开,因此您无需修改策略中的任何内容。使用PutObject API时,需要将ACL属性设置为“ public-read”。另外,请勿将存储桶策略公开设置为限制上传的策略。
答案 1 :(得分:0)
您需要赋予您用于访问帐户的IAM角色,读取存储桶的权限。您可以执行附加策略,也可以在json中看起来像这样
{
"Sid": "S3Read",
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::bucket-name06",
"arn:aws:s3:::bucket-name06/*"
]
}
假设s3存储桶与您尝试访问的IAM角色位于同一帐户,则无需启用跨帐户访问。如果不是,则需要让存储区一侧的IAM角色读取存储区。
如果您需要写访问权限,则可以执行类似的操作
{
"Sid": "S3Write",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:Get*",
"s3:List*",
"s3:Put*",
],
"Resource": [
"arn:aws:s3:::bucket-name06",
"arn:aws:s3:::bucket-name06/*"
]
}