因为原先的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.net ,AWS 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 权限全部开放,不安全,可以自行研究怎么授权吧。
参考
- Snap packaging of AWS CLI
- 为 CloudFront 分配设置 CNAME 别名时,如何解决 CNAMEAlreadyExists 错误?
- 「存档」为 CloudFront 分配设置 CNAME 别名时,如何解决 CNAMEAlreadyExists 错误?