AWS S3访问被拒绝错误

时间:2015-07-04 10:45:51

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

当我尝试打开我在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管理中创建的用户所获得的。

1 个答案:

答案 0 :(得分:0)

实际上没有很好地记录,但你需要两个访问语句。

除了允许你真正想要完成的事情的语句(GetObject to&#34; arn:aws:s3 ::: **** storage / *&#34;)之外,你还需要一个允许的语句ListBucket到桶本身,&#34; arn:aws:s3 ::: **** storage&#34;。在内部,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,你可以跳过&#34;校长&#34;一部分。