🛡️
TerraformでALB+ACMのHTTPS環境を作る
ALBでHTTPS終端する定番の構成です。
一部Terraform化して試してみました。
こちらのコードにHTTPS用の記述を追加しています。
概要図
Terraform化の対象
- HTTPSリスナー・リスナールール
Terraform化の対象にしない
これらは手動で作成します。
- ACM
- 作成するまでは手動で実施し、Terraformではdataブロックを使い外部参照します。
- Route53ホストゾーン
- ALB用Aレコード
環境・前提
- Terraform 1.4.6
- ACMで使用するドメインのRoute53ホストゾーン作成済み
流れ
- ACMで証明書取得
- HTTPSリスナー追加
- セキュリティグループ(443)開放
- Aレコード追加
- 動作確認
手順
ACMで証明書取得
SSL終端用の証明書をACMで取得します。
今回はALBでの使用のため、バージニア北部(us-east-1
)でリクエストする必要はありません。
ALBの存在するリージョンでOKです。
- 証明書リクエストまで
- ACMコンソールへ
- パブリック証明書をリクエスト
- FQDN(ドメイン名)を入力
- DNS検証を選択(ホストゾーン設定済みのため)
- 署名アルゴリズムを選択
- DNS検証
-
Pending validation
ステータスの証明書にて「Create record in Route 53」を選択する
-
- 〜30分待ってステータスが
Issued
となればOK
ACMで取得したSSL証明書をALBと紐付ける
こちらのページを参考にしながら、Terraformでコードを用意します。
ACMのSSL証明書
こちらでTerraformから参照します。
ドメイン名を入れればOKです。
# ACM
data "aws_acm_certificate" "acm" {
domain = "example.com"
}
HTTPSリスナー
certificate_arn
ではdataで指定したSSL証明書、ssl_policy
ではTLS1.3のセキュリティポリシーを使用します。
# httpsリスナー
resource "aws_lb_listener" "https_listener" {
load_balancer_arn = aws_lb.test_lb.arn
port = 443
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06"
certificate_arn = data.aws_acm_certificate.acm.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.test_target_group.arn
}
}
ALBでのTLS1.3は3月下旬に有効になっていました。
セキュリティグループ設定
ALBのセキュリティグループの443ポートを忘れずに開けましょう
ingress {
- from_port = 80
- to_port = 80
+ from_port = 443
+ to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ここまででTerraformの準備OKです。
terraform apply
し、Aレコードの追加をします。
Aレコード追加
管理しているドメインでALBにアクセス出来るようにAレコードを追加します。
動作確認
このようにHTTPSでアクセスできればOKです。
証明書を見るとこのように署名がAmazonのものとなっており、1年間の期限ということもわかります
参考
Discussion