Amazon S3存储桶返回403禁止访问错误

74

我最近继承了一个使用S3存储资源的Rails应用程序。我已经将所有资源转移到我的S3存储桶中,没有任何问题。但是,当我更改应用程序指向新存储桶时,我收到403禁止状态。

我的S3存储桶设置如下:

权限

所有人都可以列出

存储桶策略

{
 "Version": "2012-10-17",
 "Statement": [
    {
        "Sid": "PublicReadGetObject",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucketname/*"
    }
 ]
}

CORS配置

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>https://www.appdomain.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

静态网站托管

已启用。

我还能做什么来让公众可以访问这些资源?


在我的情况下,错误是由于S3存储桶的公共访问被禁用而导致的,因为它与CloudFront相关联。目前还没有找到解决方案。可能我需要设置PreSignedUrl机制,但相关内容较少,文档看起来像大学生的考试副本,充斥着无关/无用的内容,以写长答案获得更高分数。 - Lalit Fauzdar
17个回答

0

请确保使用正确的 AWS 配置文件!!!(dev \ prod 等...)


0

对我而言,其他的答案都不起作用。文件权限、存储桶策略和时间都没问题。对我而言,这个问题是间歇性的,虽然听起来可能很平凡,但以下两种方法以前都适用于我:

  1. 退出并重新登录。
  2. 如果你试图上传单个文件,请尝试批量上传。反之,如果尝试上传单个文件,请尝试批量上传。

0

对我来说,这是在“访问控制”选项卡下的公共访问

只需确保公共访问下的读写权限为Yes,默认情况下为-,表示No

编码愉快。

JFYI:我正在使用Flutter进行Android开发。

enter image description here


0

我在我的iPhone应用程序上发现了同样的问题。使用相同的配置和S3设置,Android完全正常工作,但iPhone应用程序会抛出错误。我联系了亚马逊支持团队,他们检查了日志后告诉我,你的iPhone日期和时间不正确。然后我进入我的iPhone设置,调整了正确的日期和时间。然后我尝试上传新图像,结果如预期。

如果您遇到相同的问题,并且您的iPhone或模拟器中的日期或时间不正确,则可能会有所帮助。

谢谢!


0
在我的情况下,我正在生成签名 URL 进行上传,但是收到了 403 错误。
用于生成签名 URL 的 API 运行在一个 ECS 集群上,并分配了任务角色。 任务角色没有访问文件的 PutObjectAcl 权限,因此收到了 403 错误。
更新集群的任务角色可以解决问题。
TLDR:对于公共读取,请检查凭据/角色/策略是否具有 PutObjectAcl 权限。

0
我不确定这会不会对任何人有所帮助,但是我们上周开始在之前运行良好的代码上遇到了"访问被禁止"的问题。我升级了aws-sdk到v3版本,并创建了一些新的函数,然后它又开始正常工作了。

0
请注意:如果您的存储桶启用了使用KMS的服务器端加密,您需要授予您的角色对该KMS密钥上的相关操作的访问权限。以下操作应该有效:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::${bucket_id}/*",
                "arn:aws:s3:::${bucket_id}"
            ]
        },
        {
            "Sid": "AllowKMS",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:kms:${region}:${account_id}:key/${key_id}"
        }
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接