TLS を ALB に設定 | AWS CDK
- ホストゾーン ID を取得
- ACM で証明書発行
- DNS 検証用のレコードを Route 53 に登録
- 検証の完了を待つ
- CDK で ALB のリスナーに証明書を設定
ALB 用の証明書は、ALB と同じリージョンで発行する(CloudFront 用なら us-east-1)。
ホストゾーン ID を取得
ドメイン名は末尾にドットを付けて指定する。
aws route53 list-hosted-zones \
--profile <your-profile> \
--query "HostedZones[?Name=='example.com.'].Id" \
--output text
ACM で証明書発行
aws acm request-certificate \
--domain-name example.com \
--validation-method DNS \
--profile <your-profile> \
--region ap-northeast-1
出力された CertificateArn を控える。
DNS 検証用のレコードを登録
検証用の CNAME レコードの名前と値を取得する。
aws acm describe-certificate \
--certificate-arn <certificate-arn> \
--query "Certificate.DomainValidationOptions[0].ResourceRecord" \
--profile <your-profile> \
--region ap-northeast-1
validation.json を作成して、Route 53 に登録する。
{
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "<ResourceRecord の Name>",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [{ "Value": "<ResourceRecord の Value>" }]
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id <hosted-zone-id> \
--change-batch file://validation.json \
--profile <your-profile>
検証の完了を待つ
aws acm wait certificate-validated \
--certificate-arn <certificate-arn> \
--profile <your-profile> \
--region ap-northeast-1
CDK で ALB のリスナーに証明書を設定
作成済みの証明書を ARN で参照する。
const certificate = acm.Certificate.fromCertificateArn(this, 'Certificate', certificateArn);
const listener = alb.addListener('HttpsListener', {
port: 443,
protocol: elbv2.ApplicationProtocol.HTTPS,
certificates: [certificate],
});
証明書の ARN にはアカウント ID が含まれるため、コードやドキュメントに貼るときはマスクする。
同一アカウントの Route 53 ホストゾーンを使う場合は、CDK の acm.Certificate に CertificateValidation.fromDns(hostedZone) を指定して、発行と検証を自動化する方法もある。ただし、デプロイが検証の完了待ちになる点に注意する。