🐷

Terraform×Cloud DNSでACM証明書のDNS認証を自動化

に公開

はじめに

AWS の Route53 で親ドメインを管理しつつ、特定のサブドメイン(例:sub.example.com)を Google CloudのCloud DNS に委譲する構成は、マルチクラウド環境ではありえるパターンかと思います。

この構成の中で、sub.example.com に対して AWS Certificate Manager(ACM) を使って SSL 証明書を発行したい場合、DNS 認証レコードの登録先が Cloud DNS になるため、Terraform による自動化は工夫が必要です。

本記事では、この構成における SSL 証明書の DNS 検証を Terraform で自動化するサンプルコードを解説します。

使用するTerraformプロバイダの設定

まずは AWS と Google Cloud のプロバイダ設定を行います。

provider.tf
provider "aws" {
  alias  = "us_east_1"
  region = "us-east-1"
}

provider "google" {
  credentials = file("path/to/your-service-account.json")
  project     = "your-gcp-project-id"
  region      = "us-central1"
}

これによりAWS側とGoogleCloud側のリソースの一元管理が可能になります。

リソースをTerraformで作成

これらのリソースをterraformで定義します。

  • ACM証明書本体
  • ACMのDNS認証に必要なTXTレコード
main.tf
#ACM証明書本体
resource "aws_acm_certificate" "certificate" {
  provider          = aws.us_east_1
  domain_name       = "*.sub.example.com"
  validation_method = "DNS"

  validation_option {
    domain_name       = "*.sub.example.com"
    validation_domain = "sub.example.com"
  }
}

#ACMのDNS認証に必要なTXTレコード
resource "google_dns_record_set" "acm_validation" {
  for_each = {
      for validation in aws_acm_certificate.certificate.domain_validation_options : validation.domain_name => {
        name   = validation.resource_record_name
        type   = validation.resource_record_type
        record = validation.resource_record_value
      }
    }

  name         = each.value.name
  type         = each.value.type
  ttl          = 300
  managed_zone = "example-subdomain-zone"  # Cloud DNSのゾーン名
  rrdatas      = [each.value.record]
}

ポイントとしてはACMの domain_validation_options を動的に解釈してCloud DNSに反映している部分になるかと思います。

このコードをterraform applyするのみで、無事、認証済のレコードがデプロイされました。

まとめ

このterraformコードの強みとしては

  • マルチクラウドでもインフラ一元管理が可能
  • Terraformの宣言的記述だけで、AWSとGoogleCloudを横断した認証連携が完結
  • ACMのDNS認証を完全自動化

になるかと思います。

自動化できるかわからなかった当初は、認証のレコードは手動で管理することになるのか?と思いましたが、認証部分も無事自動化できました。

また、Terraformの宣言的な記述だけで、マルチアカウントかつマルチクラウド環境にまたがるリソース構成を柔軟に扱える点も、 Terraformの強みを改めて実感した次第です。

We're Hiring!

DELTAではチームの一員になっていただける仲間を募集中です!
下記フォームよりお気軽にご連絡ください!

https://docs.google.com/forms/d/e/1FAIpQLSfQuWNU1il5lq2rVdICM0tSK_jTsjqwc52LYEwUxBq7_ImtrQ/viewform

DELTAテックブログ

Discussion