如何配置AWS S3 Bucket仅允许自定义域名(WordPress站点)访问?
配置AWS S3 Bucket仅允许WordPress网站访问的解决方案
直接用Referer限制S3访问时容易踩细节坑,以下是经过验证的配置步骤和问题排查点:
一、修正S3 Bucket访问策略
替换以下策略中的your-bucket-name、your-wordpress-domain.com和你的IAM用户ARN,这是核心配置:
{ "Version": "2012-10-17", "Id": "RestrictBucketToWordPress", "Statement": [ { "Sid": "AllowWordPressReferer", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "StringLike": { "aws:Referer": [ "https://your-wordpress-domain.com/*", "https://www.your-wordpress-domain.com/*" ] } } }, { "Sid": "AllowIAMAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/your-admin-iam-user" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] } ] }
- 第一个规则:仅允许携带你的WordPress域名Referer的请求读取Bucket内文件,通配符
*匹配所有子页面路径,同时覆盖www和非www域名(根据你的实际情况调整)。 - 第二个规则:保留你的IAM账号对Bucket的完全管理权限,避免配置后自己无法上传/修改文件。
二、WordPress侧配置与排查
- 确认WordPress中引用S3资源的链接是直接指向S3(或关联的CloudFront)的,且请求会正确携带域名Referer。
- 如果使用了CDN(如CloudFront),需在CDN配置中开启转发
Referer请求头到S3,否则S3无法获取Referer信息导致策略失效。
三、常见踩坑点
- 协议匹配:策略中的Referer要和你的网站协议一致(http/https),比如网站用https就不能只写http域名。
- 浏览器Referer限制:部分用户浏览器或隐私插件会阻止发送Referer,这种场景下访问会被拒绝,若需兼容可考虑使用CloudFront签名URL,但仅域名限制场景下Referer是最优方案。
- 资源范围:策略中的
Resource必须包含/*(即Bucket下所有对象),仅写Bucket ARN无法限制文件访问。 - 测试验证:用浏览器开发者工具查看Network请求的
Referer头,确认是否和策略中的规则匹配,这是快速定位问题的关键。
内容的提问来源于stack exchange,提问作者Kumar Kelash
相关产品推荐
相关产品推荐

