无需重新创建ACM证书,如何为CloudFront动态增删域名?
控制台层面的解决方案梳理
一、避免重复创建ACM证书的核心方法
- 用通配符证书搞定:直接在AWS美国东部N.弗吉尼亚区的ACM控制台申请
*.your-root-domain.com通配符证书,申请时顺便把根域名your-root-domain.com也加进去。这样后面同根域下新增任何子域名,都不用重新弄证书,直接就能用。要是涉及多个根域名,就把所有需要的根域和对应通配符都加到同一张证书里,别搞太多分散的证书。
二、把域名放行逻辑转移到易管理服务的两种方案
方案1:用Lambda@Edge做域名校验
- 在Lambda控制台(得选美国东部N.弗吉尼亚区)创建一个函数,里面写上允许访问的域名列表,逻辑就是:请求的域名在列表里就放行,不在就直接返回自定义错误页(比如403或者你自己做的错误页面)。
- 进入CloudFront控制台,找到你的分发,在「行为」选项卡选对应的行为,添加Lambda@Edge关联,触发事件选「查看请求」,绑定刚才创建的Lambda函数版本就行。
- 后续要加/删域名,直接更新Lambda函数里的列表再重新部署版本,不用动CloudFront的配置。
方案2:用AWS WAF做域名白名单拦截
- 打开WAF控制台,创建一个Web ACL,关联类型选CloudFront。
- 加两条规则:第一条选「字符串匹配」,匹配位置设成请求标头的
Host,把允许的域名填进去,动作设为「允许」;第二条设为默认规则,动作选「阻止」,还能自定义返回的错误响应内容。 - 把这个Web ACL绑定到你的CloudFront分发上。
- 以后要更新允许的域名,直接在WAF的规则里改列表就行,全程不用碰CloudFront的分发配置。
三、支持全网域名指向的兼容处理
如果不在乎随便哪个域名都能指向CloudFront,只要保证:
- 你的ACM证书能覆盖用户可能用来访问的域名(用通配符证书或者包含所有必要域名的证书)。
- 靠上面的Lambda@Edge或者WAF拦截逻辑,把未批准的域名直接挡回去,返回错误页就行,不用在CloudFront里限制CNAME。
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

