如何配置AWS S3 Bucket策略仅允许指定域名访问
解决AWS S3存储桶Referer策略无效问题
问题分析
你配置的Referer策略未生效,视频仍可直接通过S3 URL访问,核心原因可能是:
- 存储桶开启了公开访问ACL,优先级覆盖了Bucket策略;
- 仅配置了Allow规则,未明确拒绝不符合条件的请求,导致其他隐性权限(如IAM角色、默认ACL)绕过限制。
修复步骤
1. 关闭存储桶公开访问
进入S3控制台,找到目标存储桶creativecoder:
- 切换到「权限」标签页;
- 开启「阻止公共访问」的所有选项,确保没有通过ACL或其他方式授予公共读权限。
2. 修正Bucket策略
替换原有策略为以下配置,通过先允许、再拒绝的逻辑强化访问控制:
{ "Version": "2012-10-17", "Id": "RestrictRefererPolicy", "Statement": [ { "Sid": "AllowValidReferers", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject", "s3:GetObjectVersion"], "Resource": "arn:aws:s3:::creativecoder/*", "Condition": { "StringLike": { "aws:Referer": [ "https://www.creativecodermm.com/*", "https://creativecodermm.com/*" ] } } }, { "Sid": "DenyInvalidReferers", "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject", "s3:GetObjectVersion"], "Resource": "arn:aws:s3:::creativecoder/*", "Condition": { "StringNotLike": { "aws:Referer": [ "https://www.creativecodermm.com/*", "https://creativecodermm.com/*" ] } } } ] }
注意:如果有其他合法访问场景(如内部IAM用户管理文件),需额外添加对应的Allow规则,避免被Deny语句拦截。
3. 关于Referer策略的局限性
HTTP Referer头可被伪造,若需更安全的保护方案,建议:
- 使用CloudFront配合签名URL/签名Cookie,仅允许经过签名的请求访问;
- 生成S3预签名URL,为用户提供限时访问权限。
内容的提问来源于stack exchange,提问作者hlaingminthan
相关产品推荐
相关产品推荐

