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
Certificate Manager で管理される証明書です。
「Google マネージド証明書」と「セルフマネージド証明書」の2種類があります。
単一ドメイン用の証明書のほか、ワイルドカード証明書も発行・管理できます。
Certificate Map
ロードバランサ(Target HTTPS Proxy)と証明書を紐づけるための中間エンティティです。 Certificate Map の中には、複数の Certificate Map Entry が所属できます。
ロードバランサの Target HTTPS Proxy については以下の記事で紹介しています。
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
を作成したい場合、--domain
は example.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にも選出)。休みの日はだいたいゲームをしているか、時々自転車で遠出をしています。
Follow @ryu_dohara