亚马逊 S3 配置跨域及读取权限
一、跨域资源共享(CORS)配置
CORS(Cross-Origin Resource Sharing)是允许浏览器发起跨域请求的机制。在 AWS S3 中,配置 CORS 允许来自不同域的前端应用访问存储在 S3 中的资源。
1.1 如何配置 S3 CORS
步骤:
-
登录 AWS 管理控制台
登录 AWS 管理控制台,进入 S3 服务。 -
选择存储桶
选择你需要配置跨域访问权限的 S3 存储桶。 -
配置 CORS
选择存储桶后,点击 “权限” 标签,然后选择 “CORS 配置”。 -
编辑 CORS 配置
在弹出的编辑框中,填写 CORS 配置的 JSON 格式内容。
示例 CORS 配置:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"HEAD",
"DELETE"
],
"AllowedOrigins": [
"*",
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
配置说明:
-
AllowedOrigin:指定哪些域名可以访问 S3 存储桶的资源。* 表示允许所有域名访问。
-
AllowedMethod:指定允许的 HTTP 方法,常见的有 GET、POST、PUT、DELETE、OPTIONS。
-
AllowedHeader:允许的请求头,* 表示接受所有的请求头。
-
MaxAgeSeconds:指定预检请求的缓存时间。
1.2 常见问题:
-
CORS 配置不生效:可能是由于浏览器缓存的 CORS 配置导致,清除浏览器缓存或等待缓存过期可以解决。
-
限制 CORS 跨域来源:尽量避免使用 *,可以限定特定的域名来增强安全性。
二、设置 S3 存储桶的读取权限
S3 存储桶默认是私有的,只有拥有相应权限的用户可以访问。如果你希望某些文件可以被公众访问(例如图片、CSS 文件等),你需要配置适当的读取权限。
2.1 配置存储桶策略(Bucket Policy)
Bucket Policy 允许你为 S3 存储桶设置更细粒度的访问控制。通过设置 Bucket Policy,你可以指定哪些 IP 地址、哪些用户角色可以访问存储桶中的内容。
步骤:
-
登录 AWS 管理控制台
登录到 AWS 管理控制台,进入 S3 服务。 -
选择存储桶
选择需要配置权限的 S3 存储桶。 -
配置存储桶策略
在存储桶的 “权限” 页面下,点击 “存储桶策略”,然后点击 “编辑”。 -
输入存储桶策略
在策略编辑框中输入适当的策略。
示例公共读取策略(让所有人可以读取存储桶中的文件):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
解释:
-
Principal:* 表示所有人都可以访问。
-
Action:s3:GetObject 允许读取操作。
-
Resource:指定要公开访问的存储桶及对象,这里 your-bucket-name/* 表示存储桶中的所有对象。
2.2 配置存储桶对象权限(ACL)
除了使用 Bucket Policy,你还可以使用 Access Control List (ACL) 来控制单个对象的访问权限。
步骤:
-
选择对象
在 S3 控制台中,选择你要配置权限的文件。 -
编辑权限
选择该文件后,点击 “权限” 标签,编辑对象的访问权限。 -
设置公开访问
勾选 公开读取,这样所有人都可以通过 URL 访问该文件。 -
通过设置 READ 权限,所有用户可以读取该对象。
三、如何让 CORS 配置和读取权限生效
-
等待时间:S3 的权限更新可能需要几分钟才能生效。
-
检查响应头:可以使用浏览器开发者工具查看 Access-Control-Allow-Origin 响应头是否正确。
-
测试 CORS:通过执行跨域请求测试 CORS 是否正常工作。可以使用浏览器控制台或者 curl 命令发起请求,检查响应是否符合预期。
四、总结
-
跨域配置(CORS):用来控制哪些外部域名可以访问存储在 S3 上的资源。通过设置 S3 存储桶的 CORS 配置,你可以管理哪些 HTTP 方法(如 GET、POST)和哪些头部可以被跨域请求。
-
读取权限配置(Bucket Policy / ACL):通过设置存储桶策略(Bucket Policy)或者对象权限(ACL),你可以控制谁可以访问 S3 存储桶中的文件。通过将 s3:GetObject 权限公开,其他用户就可以通过 URL 访问文件。
ALCs打开 设置 存储桶拥有者优先

- 本文标签: 其他
- 本文链接: https://www.battr.cn/article/121
- 版权声明: 本文由Jack.Chen原创发布,转载请遵循《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权