【问题标题】:AWS S3 Access Denied ErrorAWS S3 访问被拒绝错误
【发布时间】:2015-09-22 01:21:18
【问题描述】:

当我尝试打开托管在我的 S3 存储桶上的文件时,我收到拒绝访问错误。

当我的 Django 应用程序尝试获取相同的文件时,我的控制台上出现 403 Forbidden Error。

我已经公开了所有文件,但仍然没有运气。

当我打开一个文件的链接时,我得到了这个。

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>D4FCD94BD9DEE9F8</RequestId>
<HostId>
J9RtjMA4wk8kL4f+Ye/6XAQaXrfi9lz5HZ1tWRut8E5Qf/b8RAQbAF/fp3j2bep8Jfd+dtim/fs=
</HostId>
</Error>

我的 CORS 配置是这样的

<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

我应该怎么做才能让我的静态文件得到正确的服务?

这是我的存储桶策略

{
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::****storage/*"
            ]
        },
        {
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::****storage",
                "arn:aws:s3:::****storage/*"
            ],
            "Principal": {
                "AWS": [
                    "arn:aws:iam::0084507*****:user/****"
                ]
            }
        }
    ]
}

我的 settings.py 中的 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 是我为我在 AWS IAM 管理中创建的用户获取的。

【问题讨论】:

  • 您有权限访问存储桶吗?
  • 我已经创建了存储桶。
  • "我已经公开了这些文件" --> 怎么样?您是否制定了政策? “我已经创建了存储桶”--> 这无关紧要,除非您向资源表明自己的身份。
  • @TJ- 那么请帮助我该怎么做。我创建了一个存储桶,如何让我的网站使用该存储桶?
  • 您使用的端点是什么?您用于将文件上传到 s3 的命令/代码是什么?

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


【解决方案1】:

确实没有很好的记录,但是您需要两个访问语句。

除了允许你真正想要做的事情的语句(GetObject to "arn:aws:s3:::****storage/*"),你还需要一个允许 ListBucket 到桶本身的语句, “arn:aws:s3:::**** 存储”。在内部,Aws 客户端会在执行操作之前尝试列出存储桶以确定它是否存在。

文档很糟糕,因此添加越来越多的权限直到出现问题似乎是一种常见的做法。

第二个语句应该是这样的:

{
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::storage/*"
            ]
        },
        {
            "Sid": "somethingElse",
            "Action": "s3:ListBucket",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::storage",
            ],
            "Principal": {
                "AWS": [
                    "arn:aws:iam::0084507*****:user/****"
                ]
            }
        }
    ]
}

注意:如果您使用 IAM,则可以跳过“主体”部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2018-06-28
    • 2021-06-09
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多