如何修复打开图片网址时的“访问被拒绝”

时间:2019-01-09 16:58:37

标签: amazon-web-services amazon-s3

我终于设法将一些图像上传到我的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/*"
        }
    ]
}

但是它似乎不起作用。我还能做些什么吗?

2 个答案:

答案 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/*"
            ]
}