GoogleマネージドSSL/TLS証明書をDNS認証で作成する方法

記事タイトルとURLをコピーする

G-gen の堂原です。Google Cloud (旧称 GCP) の Cloud Load Balancing で利用できる Google マネージド SSL/TLS 証明書を、Certificate Manager で作成する方法を紹介します。

Certificate Manager について

Certificate Manager とは

Certificate Manager は Cloud Load Balancing(以下、ロードバランサ)用の SSL/TLS 証明書(以下、証明書)の作成・管理・デプロイが行えるサービスです。

Certificate Manager で管理できる証明書には「Google マネージド証明書」と「セルフマネージド証明書」があります。前者は Google により発行されるドメイン認証 (DV) 証明書であり、100 枚まで無料で作成 できます。

2023年5月現在では Google Cloud コンソール (Web UI) での証明書の作成・管理はできず、公式ドキュメントでは gcloud や Terraform を用いた操作方法が紹介されています。

構成

Certificate Manager においては大きく 4 つのコンポーネントが登場します。 それぞれの関わりは以下の図のとおりです。

Certificate Manager の構成図

Certificate

Certificate Manager で管理される証明書です。

Google マネージド証明書」と「セルフマネージド証明書」の2種類があります。

単一ドメイン用の証明書のほか、ワイルドカード証明書も発行・管理できます。

Certificate Map

ロードバランサ(Target HTTPS Proxy)と証明書を紐づけるための中間エンティティです。 Certificate Map の中には、複数の Certificate Map Entry が所属できます。

ロードバランサの Target HTTPS Proxy については以下の記事で紹介しています。

blog.g-gen.co.jp

Certificate Map Entry

ドメイン名と Certificate の紐づけをするコンポーネントです。www.example.com には証明書 A を、xxx.example.com には証明書 B を適応させるといった設定が可能です。

他のどの Certificate Map Entry でも指定されてないドメインへのアクセスをまとめて処理する Certificate Map Entry の作成も可能です。

DNS Authorization

証明書の認証情報を管理するコンポーネントで、DNS 認証に用いられます。

作成時に 1 つの CNAME レコードが指定され、それをネームサーバに登録することで、ドメインの所有者であることが認証されます。

認証後、DNS Authorization を Certificate にアタッチすることで、認証済みの証明書を作成することができます。

DNS Authorization をアタッチしていない Certificate は自動的に、後述する Load balancer 認証になります。

証明書の構成方法

ロードバランサにアタッチするための 証明書(セルフマネージド・Google マネージド)には 2 つの構成方法があります。

  • Compute Engine SSL 証明書リソース
    • Certificate Manager のコンソール画面では「従来の証明書」タグに表示される
    • 認証方法は Load balancer 認証のみ (後述)
    • コンソールから作成が可能
  • Certificate Manager
    • Certificate Manager のコンソール画面では「証明書」タグに表示される
    • 認証方法は Load balancer 認証 と DNS 認証から選択
    • コンソールから作成が不可 (2023年5月現在)。gcloud コマンド等を利用

当記事では後者の紹介をしています。後者であれば DNS 認証が利用でき、ワイルドカード証明書の発行も可能であるなどの利点があります。

Google マネージド 証明書の認証方法

Google マネージド 証明書

Google マネージド 証明書は先述の通り、Google が無償で発行する DV 証明書です。ロードバランサにこの証明書をアタッチすることで、Google Cloud で公開する Web サイト / Web アプリケーションを無料で HTTP (SSL/TLS) 化することができます。

この証明書を発行する際は、ドメインの正当な所有者であることを証明するため、ドメイン認証を行う必要があります。

Google マネージド 証明書の認証方法には次の 2 つがあります。

Load balancer 認証

証明書に設定したドメインでロードバランサにアクセス可能であることをもって認証する方法です。以下のような DNS レコードを作成する必要があります。

設定名
レコード名 証明書のドメイン名
レコードタイプ A または AAAA
レコード値 ロードバランサの IP アドレス

この方法はシンプルですが、証明書が利用可能になる前にドメインをロードバランサの IP アドレスに向ける必要があるため、既存サービスを Google Cloud にマイグレーションする際などには利用できません。

また、この方法はワイルドカードの証明書の作成には対応していません

DNS 認証

Google Cloud から指定された CNAME レコードを DNS に登録することで認証する方法です。参考として、Amazon Web Services (AWS) の Certificate Manager の DNS 認証と似た方式と言えます。

以下のような DNS レコードを作成します。

設定名
レコード名 _acme-challenge.(ドメイン名)
レコードタイプ CNAME
レコード値 (Google が指定する英数字).authorize.certificatemanager.goog.

この方法であればロードバランサへの疎通設定をする前に証明書の作成ができるため、マイグレーションの際にも利用することができます。

また、こちらの方法であればワイルドカード証明書の作成に対応しています。

gcloud を用いた作成手順

はじめに

当手順では、ドメイン名 www.example.com のための Google マネージド証明書を発行します。

繰り返しにはなりますが、Certificate Manger の証明書はコンソールから作成できないため、以下の手順は gcloud を用いています。

1. DNS Authorization 作成

まずは Certificate (証明書) にアタッチするための DNS Authorization を作成します。

DNS Authorization の名前は test-dns-auth とします。

gcloud certificate-manager dns-authorizations create test-dns-auth --domain="www.example.com"

もし、ワイルドカードの証明書 *.example.com を作成したい場合、--domainexample.com とします。

2. CNAME レコード登録

DNS Authorization 作成後、以下のコマンドで指定された CNAME レコードの確認をします。

gcloud certificate-manager dns-authorizations describe test-dns-auth

レコード名・タイプ・値が出力されるので、その情報を元にネームサーバに CNAME レコードを登録します。

3. Certificate 作成

Certificate、つまり証明書の作成を行います。このタイミングで DNS Authorization もアタッチします。

Certificate の名前は test-cert とします。

gcloud certificate-manager certificates create test-cert \
  --domains="www.example.com" \
  --dns-authorizations=test-dns-auth

作成処理には 10 分ほどかかります。

以下のコマンドを実行、またはコンソールで test-cert を確認し、ステータスが ACTIVE (コンソールだと「正常」)となっていたら、証明書が正しく作成されたことになります。

gcloud certificate-manager certificates describe test-cert
createTime: 'xxx'
expireTime: 'xxx'
managed:
  authorizationAttemptInfo:
  - domain: www.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/xxx/locations/global/dnsAuthorizations/test-dns-auth
  domains:
  - www.example.com
  state: ACTIVE
...

4. ロードバランサにアタッチ

上記の手順で証明書の作成自体は完了しましたので、以降はロードバランサにアタッチするまでの流れとなります。

まずは Certificate Map を作成します。名前は test-cert-map とします。

gcloud certificate-manager maps create test-cert-map

次に test-cert-map の中に、ドメイン www.exmple.com と Certificate test-cert を紐づける Certificate Map Entry を作成します。名前は test-cert-map-entry とします。

gcloud certificate-manager maps entries create test-cert-map-entry \
  --map="test-cert-map" \
  --certificates="test-cert" \
  --hostname="www.example.com"

これで Certificate Manager 側の設定は完了です。

あとは、Certificate Map をロードバランサの Target HTTPS Proxy にアタッチすれば完了です。

以下のコマンドは既に存在している Traget HTTPS Proxy を更新するコマンドです。Target HTTPS Proxy の名前を test-https-proxy とします。

gcloud compute target-https-proxies update test-https-proxy \
 --certificate-map="test-cert-map"

以上で、証明書をロードバランサにアタッチすることができました。

堂原 竜希(記事一覧)

クラウドソリューション部データアナリティクス課。2023年4月より、G-genにジョイン。

Google Cloud Partner Top Engineer 2023, 2024に選出 (2024年はRookie of the yearにも選出)。休みの日はだいたいゲームをしているか、時々自転車で遠出をしています。