目次
CloudFormation を使って ACM で証明書を取得して ELB に適用したみた
こんにちは、SRE 課の栩野です。
職場からの帰り道が桜満開で春を感じてます。
前回は CloudFormation で Route53 にホストゾーンを作成して、www の A レコードに
ELB の DNS 名を設定してみました。
今回は ACM (AWS Certificate Manager) で Amazon が発行する証明書を取得して
ELB に適用するまでを CloudFormation で自動化するテンプレートを作成してみようと思います。
前提として、すでに Route53 にホストゾーンは作成済みで、www の A レコードには ELB の
DNS 名が設定してあるといった形で進めていきます。
そこまでの設定方法については、以下前回のブログ等々参考にしていただければと思います。
CLOUDFORMATION で ROUTE53 のホストゾーンを作成して EIP と ELB の DNS 名をレコードに追加する
ACM のテンプレート作成
それでは早速、ACM のテンプレートを作成していきます。
テンプレートの内容としては、ホストゾーンを作成しているドメイン名で
ワイルドカード証明書(*.ドメイン名)を ACM で取得し、ELB のリスナーに適用する。
といったようなテンプレートになります。
ACM で証明書を取得する際には、ドメインの CNAME レコードを使って DNS の検証が必要になるので
設定するドメインのネームサーバが、 事前にしっかり Route53 に向いている必要があります。
下記がテンプレートの内容になります。
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
# とりあえずは、スタック作成時にパラメータとして証明書を取得したいドメイン名を入力します。
# ドメイン名は作成しているホストゾーンのドメイン名を入力してください。
record01:
Type: String
Default: "tochi-hoge.work"
Description: domain name
Resources:
# ------------------------------------------------------------#
# ACM
# ------------------------------------------------------------#
ACM:
Type: AWS::CertificateManager::Certificate
Properties:
# 証明書を取得するドメイン名を設定します。 (パラメータで入力したドメイン名が入ります。)
DomainName: !Sub "${record01}"
# DNS検証を行うドメインを設定します。 (上記同様にドメイン名が入ります。)
DomainValidationOptions:
- DomainName: !Sub "${record01}"
# Route53のホストゾーンIDをインポートして読み込みます。 (別スタックでアウトプットしておく必要有)
HostedZoneId: !ImportValue "hostedzoneid"
# 追加で取得したい証明書を設定します。 (今回はワイルドカード証明書を取得します。)
SubjectAlternativeNames:
# ワイルドカードを取得する場合は、ドメイン名の手前に*.をつけます。
- !Sub "*.${record01}"
# 検証方法はDNSを指定します。
ValidationMethod: DNS
# ------------------------------------------------------------#
# ALB HTTPS LISTENER
# ------------------------------------------------------------#
# 既存のELBにhttps用のリスナーを設定します。
ALBListenerHTTPS:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
# ポートは443で設定します。
Port: 443
Protocol: HTTPS
# リスナーにACMで取得した証明書を適用します。
Certificates:
- CertificateArn: !Ref ACM
DefaultActions:
# ELBのターゲットグループを指定します。(別スタックでアウトプットしておく必要有)
- TargetGroupArn: !ImportValue "alb-tg"
Type: forward
# ALBを指定します。 (別スタックでアウトプットしておく必要有)
LoadBalancerArn: !ImportValue "alb"
上記のテンプレートからスタックを作成すると...
Route53 には CNAME で DNS 検証用のレコードが作成されます。
ACM では DNS 検証が実施され、問題なければ無事に Amazon が発行する証明書の取得が完了します。
ELB のリスナーを確認すると、443 ポートのリスナーに ACM で取得した証明書が適用されています。
最後に、EC2 で Apache を稼働させた状態で、今回設定したドメイン名(tochi-hoge.work)に https でアクセスしてみると...
無事に AMC で取得した証明書が適用され、HTTPS でアクセスできるようになりました!
あとがき
CloudFormation を一発走らせるだけで、証明書が取得できて、ELB にも適用できてと超便利です。
しかも Amazon が発行する ACM の証明書は自動更新なので、更新時期を気にする必要もありません。
以上、ありがとうございました!
参考
AWS :: CertificateManager :: Certificate (AWS ドキュメント)
運用サービス課 課長
運用・監視の設計から導入まで、運用サービスを担当してます。
運用監視やセキュリティ関連の話題に興味があるので、そのあたりのブログを多めで投稿していきたいと思ってます。
LINK
クラウドベリージャム:プロフィールページ