【问题标题】:AWS S3 browser upload getting Access Denied errorAWS S3 浏览器上传获取拒绝访问错误
【发布时间】:2016-05-23 05:32:38
【问题描述】:

我正在尝试使用 POST AWS 签名版本 4 直接从浏览器将文件上传到 S3 存储桶。最初,我遇到了签名验证错误,我设法解决了这个错误,但现在我遇到了这个错误:

<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
  <RequestId>9343E20EAA0FD14E</RequestId
  <HostId>RldZp4h5n6tK8R5WKmWnn0k8PNvJGxb6m...</HostId>
</Error>

我在我的 S3 存储桶中启用了日志记录,但它们是最小的并且没有提供任何额外的洞察力。

我有以下存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::000000000000:user/username"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::bucketname/*"
        }
    ]
}

当我使用用户的 API 密钥/秘密从我的计算机或 EC2 实例上传文件时,它可以工作,但使用带有签名策略的浏览器上传,会出现上述错误。

【问题讨论】:

  • 可能的解决方案是在CORS附加信息docs.aws.amazon.com/AmazonS3/latest/dev/cors.html中添加&lt;AllowedOrigin&gt;http://www.example1.com&lt;/AllowedOrigin&gt;&lt;AllowedMethod&gt;POST&lt;/AllowedMethod&gt;
  • 不,这不是 CORS 错误。

标签: amazon-web-services amazon-s3 amazon


【解决方案1】:

我想通了。我将请求(和内部策略)中的 acl 设置为公共读取,这需要在存储桶策略中添加权限。我将“s3:PutObjectAcl”添加到操作列表中,它起作用了。

【讨论】:

  • 我浪费了 2 个小时在网上搜索,结果发现是操作列表吸引了我。但真正奇怪的是,当我从 localhost 运行它时,我能够上传对象,而不是从真正的服务器。还是谢谢。
【解决方案2】:

对我来说,我需要访问 IAM 控制台并将策略附加到我用来签署策略的访问密钥和秘密的用户。我附加的政策是AmazonS3FullAccess

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 2020-11-10
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2017-12-24
    相关资源
    最近更新 更多