如何将CloudFront的CORS限制到指定自定义域名?
限制CloudFront分发仅允许www.example.com访问的解决方案
要实现仅向www.example.com提供服务、对其他域名(如www.leech-domain.com)返回403的需求,可通过以下步骤配置:
1. 创建并关联CloudFront查看器请求函数
CloudFront函数能在请求到达源站之前拦截并验证请求来源,是轻量且高效的方案:
- 登录AWS控制台,进入CloudFront服务,创建新的查看器请求函数,粘贴以下代码:
function handler(event) { const request = event.request; const allowedHost = 'www.example.com'; const hostHeader = request.headers.host.value; if (hostHeader !== allowedHost) { return { statusCode: 403, statusDescription: 'Forbidden', headers: { 'content-type': { value: 'text/plain' } }, body: 'Access denied: Only requests from www.example.com are allowed.' }; } return request; }
- 将该函数发布到生产环境,关联到你的CloudFront分发的所有缓存行为上,触发阶段选择查看器请求。
2. 加固S3桶访问权限(可选但推荐)
为防止绕开CloudFront直接访问S3桶,需配置S3桶策略仅允许CloudFront的源访问身份(OAI)访问:
- 找到你的CloudFront分发对应的OAI ARN(格式为
arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [OAI_ID]) - 在S3桶的权限配置中,替换现有桶策略为以下内容(替换占位符为你的实际信息):
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity YOUR_OAI_ID" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*" } ] }
3. 验证配置效果
- 使用
www.example.com访问资源,确认正常返回内容 - 使用
www.leech-domain.com或其他域名访问,确认返回403状态码 - 直接访问S3桶的资源地址,确认无法访问(配置OAI后)
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

