AWS CloudFront 强制添加 CNAME

因为原先的AWS CloudFront 账号被禁用无法登陆,在使用其他AWS CloudFront 账号添加相同的域名时,会提示“One or more of the CNAMEs you provided are already associated with a different resource.”,这时就要用到 AWS CLI 强制添加 CNAME 解析了。

准备

1.获取AWS 访问密钥

访问AWS  IAM 页面,按照“访问管理”-“用户”-“添加用户”,新建用户,在“选择 AWS 凭证类型”勾选“访问密钥 – 编程访问“,其他默认,到结束会有“访问密钥 ID”和“私有访问密钥”。下载或保存访问密钥。

选择编程访问
下载或保存访问密钥

2.安装 AWS CLI

有AWS CLI 官方安装教程,我嫌需要装的软件太多,会将 VPS 环境搞乱,因此使用 Snap 安装。
首先安装 Snap 运行环境,请自行在网上查找自己系统如何安装 Snap ,在此就不详细介绍了。
安装 Snap 版 AWS CLI ,只要运行 sudo snap install amz-aws-cli 即可安装,同时运行 sudo snap alias amz-aws-cli aws ,修改二进制名称。重启机器后运行 amz-aws-cli.setup ,将获取的 AWS 访问密钥按照要求填写进去,其他默认。

3.在 AWS  IAM 中设置访问权限

在第一步中只是创建了访问密钥,但没有设置具体权限,接下来操作前要设置权限了。

开放所有AWS CloudFront 权限,虽然不符合安全准则,但快速简单,具体JSON如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cloudfront:*",
            "Resource": "*"
        }
    ]
}

4.在 AWS CloudFront 创建新的分配

按照往常的操作,先在 AWS CloudFront 创建项目,不需要添加 CNAME 和加密证书。

5.创建通配符证书

编辑新创建的 AWS CloudFront 项目,在“自定义 SSL 证书 – 可选”下,点击“请求证书”链接,创建通配符证书,之后返回 CloudFront 项目界面,选择对应的加密证书。

操作

1.获取必要的一些参数

在新的 CloudFront 项目中找到“分配域”,格式一般为“XXX.cloudfront.net”,在“分配”中找到“ID”,并记录下来。

获取项目ID
获取分配域名

2.修改域名DNS解析(例子说明)

AWS 已经颁发 example.com 的通配符证书,想要添加的二级域名为 ceshi.example.com , AWS CloudFront 分配域为 example.cloudfront.netAWS CloudFront 项目ID为 E1B2MVI89030W9,找到以上几项后,就可以修改域名解析,具体格式如下:

ceshi.example.com   CNAME example.cloudfront.net 
_ceshi.example.com  TXT   example.cloudfront.net

待上方解析生效后,就可以继续接下来操作了。

3.强制为 CloudFront 项目添加已在其他账户添加的域名

在上方的域名解析生效后,执行一下命令就可以添加域名了,

aws cloudfront associate-alias --target-distribution-id 项目ID --alias 要添加的域名
aws cloudfront associate-alias --target-distribution-id E1B2MVI89030W9 --alias ceshi.example.com

在以上操作后就能将域名添加到 CloudFront 项目了。

总结

要先申请通配符证书,再修改域名解析,最后在执行命令。另外,AWS CloudFront 权限全部开放,不安全,可以自行研究怎么授权吧。

参考