TerraformによるAWS Certificate Manager(ACM)からの証明書取得とドメイン検証

TerraformによるAWS Certificate Manager(ACM)からの証明書取得とドメイン検証:

掲載したコードをみてくださいで終わっても良いのですが、まぁそれではあんまりだと言うことで。

まぁ、Terraformの公式サイトと大差ありませんがコメントは入ってるよと言うくらいです。


前提

  • ワイルドカードはやりません
  • SANの利用も同様にしません
  • なので、対象はFQDN(サブドメイン付き)1つのみ


補足

ワイルドカードの証明書は便利ですが、万が一の場合利用する全サービスに影響が及ぶことを考えれば利用すべきではないと思っています。

特に、ACMのようにマネージドで自動的に更新されるのにワイルドカード証明書を使う必要はないと思います。

セキュリティのために証明書を利用するのに、セキュリティを損ねる運用を採用するのは本末転倒だと思っています。


実際のスクリプト

# zone apex domain:サブドメインを含まないものを書く 
variable "aws_acm_domain_name" { 
  description = "Domain Name" 
  default = "example.com" 
} 
# 取得対象のFQDN(サブドメイン付き) 
variable "aws_acm_sub_domain_name" { 
  description = "Sub Domain Name" 
  default = "ex.example.com" 
} 
# 検証方法(mailはterraform外部で手作業が必要なので非推奨) 
variable "aws_acm_validation_method" { 
  description = "validation method" 
  default = "DNS" 
} 
# tagはお好みでどうぞ 
variable "aws_acm_env_tag" { 
  description = "enviroment tag" 
  default = "sample" 
} 
# 証明書発行リクエスト 
resource "aws_acm_certificate" "cert" { 
  domain_name       = "${var.aws_acm_sub_domain_name}" 
  validation_method = "${var.aws_acm_validation_method}" 
 
  tags { 
    Environment = "${var.aws_acm_env_tag}" 
  } 
 
  lifecycle { 
    # lifecycleにこれを入れておくのが推奨されています 
    create_before_destroy = true 
  } 
} 
 
# Route53で管理されているドメインの情報を持ってきます 
data "aws_route53_zone" "zone" { 
  name = "${var.aws_acm_domain_name}" 
  private_zone = false 
} 
 
# DNSによる検証用レコードの登録 
resource "aws_route53_record" "cert_validation" { 
  name = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_name}" 
  type = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_type}" 
  zone_id = "${data.aws_route53_zone.zone.id}" 
  records = ["${aws_acm_certificate.cert.domain_validation_options.0.resource_record_value}"] 
  ttl = 60 
} 
# 検証 
resource "aws_acm_certificate_validation" "cert" { 
  certificate_arn = "${aws_acm_certificate.cert.arn}" 
  validation_record_fqdns = ["${aws_route53_record.cert_validation.fqdn}"] 
} 


利用

certのarnを利用します

resource "aws_lb_listener" "alb" { 
    # snip... 
    certificate_arn   = "${aws_acm_certificate_validation.cert.certificate_arn}" 
  } 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)