首页 > 解决方案 > 是否可以禁止公共访问 AWS 文件,但只提供特定的来源?

问题描述

最近我使用AWS S3 存储桶为我的 Django 项目提供静态文件。
这是我的设置:

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID') # 
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY') # 
AWS_STORAGE_BUCKET_NAME = 'bucket-name' 
AWS_STATIC_LOCATION = 'static'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

创建存储桶后,我可以看到这些选项默认为 True


(来源:firefoxusercontent.com

但是当我尝试从我的网站 www.my-site.com 或本地 127.0.0.0.1:8000 访问我的静态文件时,它显示 403 权限被拒绝。我想念什么?

Request URL: https://bucket-name.s3.us-east-2.amazonaws.com/static/file-name.js
Request method: GET
Remote address: 52.0.0.0:443
Status code: 403

经过一些搜索,我尝试定义一个 CORS,例如:

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

标签: djangoamazon-web-servicesamazon-s3

解决方案


将角色附加到现有/正在运行的 EC2 实例

为了能够定义 IAM 角色,您可以选择现有实例并将新角色附加为 S3 访问 EC2


推荐阅读