お久しぶりです @ktoshi です!
4月になり新入社員も入ってきて、初々しかった昔を思い出す今日この頃。
早いもので社会人生活10年目になりました。
普段、GCPを使うことが多いのですが、AWSでサーバを構築する機会があり、
その際、Terraform で持込の証明書を設定するときに少し困ったので備忘録的に書きたいと思います。
概要
EC2 でWebサーバを構築し、その前段に ALB を配置し、 SSL 証明書は ALB に設定する。
AWS Certificate Manager を利用するとマネージドの証明書も利用可能だが、
今回は別途取得した SSL 証明書をインポートして利用する。
環境
OS
$ cat /etc/redhat-release
CentOS Linux release 8.3.2011
Terraform
$ terraform version
Terraform v0.14.3
Let's Enjoy!!
今回は証明書を設定する、という目的なので、EC2などの設定は省きます。
なお、SSL証明書・中間証明書・秘密鍵を事前にサーバ上に保存しておいてください。
証明書のインポート
証明書の内容を直接書き込むこともできますが、
今回はファイルを参照して読み込むようにします。
resource "aws_acm_certificate" "certificate" {
certificate_body = file("example.com.crt") # SSL証明書
certificate_chain = file("example.com.dvcacert.pem") # 中間証明書
private_key = file("example.com.rsa.key") # 秘密鍵
}
なお、中間証明書はなくても設定可能です。
ALB への紐づけ
SSL証明書はHTTPS用のリスナーに紐づけます。
※ 下記はALBを作成する設定の一部です。
# ALB の設定
resource "aws_lb" "alb" {
name_prefix = "alb-"
security_groups = [aws_security_group.lb-sg.id]
subnets = [aws_default_subnet.default-1a.id,aws_default_subnet.default-1c.id,aws_default_subnet.default-1d.id]
internal = false
enable_deletion_protection = false
load_balancer_type = "application"
}
# リスナーの設定
resource "aws_lb_listener" "https_listener" {
load_balancer_arn = aws_lb.alb.arn
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016-08"
# 先ほどインポートしたSSL証明書を指定
certificate_arn = aws_acm_certificate.certificate.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.target_group.arn
}
}
まとめ
AWS ではフルマネージドのSSL証明書が利用でき、
運用を楽にすることができますが、サイトによってはサードパーティーから発行されるより高レベルな証明書が必要になる場合があります。
その場合は AWS Certificate Manager で利用できるようにインポートする必要がありますので、
その際にこの記事をご参考いただければと思います。
それではみなさんも素敵な証明書ライフを…!