You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:13:22