このチュートリアルでは、Certificate Manager を使用して、DNS 認証でグローバル Google マネージド証明書をクロスリージョン内部アプリケーション ロードバランサにデプロイする方法について説明します。
グローバル外部ロードバランサまたはリージョン ロードバランサにデプロイする場合は、以下をご覧ください。
目標
このチュートリアルでは、次のタスクを行う方法を説明します。
- Certificate Manager を使用して、DNS 承認で公的に信頼できる証明書機関によって発行された Google マネージド証明書を作成します。
- ターゲット HTTPS プロキシを使用して、サポートされているロードバランサに証明書をデプロイします。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 一般公開 DNS ゾーンを作成する
必要なロール
このチュートリアルのタスクを完了するための次のロールがあることを確認してください。
- Certificate Manager オーナー(
roles/certificatemanager.owner
): Certificate Manager リソースの作成と管理に必要です。 - Compute ロードバランサ管理者(
roles/compute.loadBalancerAdmin
)または Compute ネットワーク管理者(roles/compute.networkAdmin
): HTTPS ターゲット プロキシの作成と管理に必要です。
- DNS 管理者(
roles/dns.admin
): DNS ソリューションとして Cloud DNS を使用する場合に必要です。
詳しくは以下をご覧ください。
- Certificate Manager のロールと権限。
- Compute Engine の Compute Engine の IAM ロールと権限。
- Cloud DNS のロールと権限。
ドメイン名
証明書を作成するには、所有するドメインの完全修飾ドメイン名(FQDN)を取得します。ドメインがない場合は、Cloud Domains を使用してドメインを登録できます。
ロードバランサを作成する
このチュートリアルでは、ロードバランサのバックエンド、ヘルスチェック、バックエンド サービス、URL マップをすでに作成して構成していることを前提としています。このチュートリアルの後半で必要になるため、URL マップの名前をメモしておきます。
クロスリージョン内部アプリケーション ロードバランサをまだ作成していない場合は、VM インスタンス グループのバックエンドを使用したクロスリージョン内部アプリケーション ロードバランサの設定をご覧ください。
DNS 認証を使用して Google マネージド証明書を作成する
証明書を作成する前に、一般公開 DNS ゾーンを作成します。次に、DNS 認証を作成し、CNAME レコードをターゲット DNS ゾーンに追加します。
DNS 認証を作成する
DNS 認証は 1 つのドメイン名のみを対象とします。ターゲット証明書で使用するドメイン名ごとに個別の DNS 認証を作成する必要があります。
*.myorg.example.com
などのワイルドカード証明書用の DNS 認証を作成する場合は、親ドメイン(myorg.example.com
など)の DNS 認証を構成します。
コンソール
DNS 認証を作成することも、証明書の作成時に既存の DNS 認証をアタッチすることもできます。詳細については、DNS 認証を参照する Google マネージド証明書を作成するをご覧ください。
gcloud
DNS 認証を作成するには、certificate-manager
dns-authorizations create
コマンドを使用します。
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME"
次のように置き換えます。
AUTHORIZATION_NAME
: DNS 認証の名前。DOMAIN_NAME
: この DNS 承認を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。
グローバル Google マネージド証明書は、デフォルトの DNS 認証タイプとして FIXED_RECORD
を使用します。PER_PROJECT_RECORD
DNS 認証を使用するには、次のコマンドを実行します。
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD"
DNS 認証を作成したら、certificate-manager dns-authorizations describe
コマンドで確認します。
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME \
出力は次のようになります。出力で dnsResourceRecord
行を見つけ、CNAME
レコード(data
、name
、type
)を取得して DNS 構成に追加します。
createTime: '2022-01-14T13:35:00.258409106Z' dnsResourceRecord: data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. name: _acme-challenge.myorg.example.com. type: CNAME domain: myorg.example.com name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization updateTime: '2022-01-14T13:35:01.571086137Z'
API
DNS 認証を作成するには、dnsAuthorizations.create
メソッドに POST
リクエストを送信します。
POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME" { "domain": "DOMAIN_NAME", "type": "PER_PROJECT_RECORD" //optional }
次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの ID。AUTHORIZATION_NAME
: DNS 認証の名前。DOMAIN_NAME
: この DNS 承認を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。
DNS 認証を参照する Google マネージド証明書を作成する
前の手順で作成した DNS 認証を参照する Google マネージド証明書を作成するには、次の手順に従います。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[証明書] タブで、[証明書を追加] をクリックします。
[証明書名] フィールドに、証明書の一意の名前を入力します。
省略可: [説明] フィールドに証明書の説明を入力します。説明で証明書を識別できます。
[ロケーション] で [グローバル] を選択します。
[スコープ] で [すべてのリージョン] を選択します。
[証明書の種類] で [Google マネージドの証明書を作成する] を選択します。
[Certificate Authority type] で [Public] を選択します。
[ドメイン名] フィールドに、証明書のドメイン名をカンマ区切りで指定します。各ドメイン名は完全修飾ドメイン名(
myorg.example.com
など)にする必要があります。ドメイン名は、ワイルドカード ドメイン名(*.example.com
など)にすることもできます。[認証タイプ] で [DNS 認証] を選択します。
このページには、ドメイン名の DNS 認証が一覧表示されます。ドメイン名に DNS 認証が関連付けられていない場合は、次の手順で作成します。
- [見つからない DNS 認証の作成] をクリックします。
- [DNS 認証名] フィールドに、DNS 認証の名前を指定します。デフォルトの DNS 認証タイプは
FIXED_RECORD
です。プロジェクトごとの DNS 認証を使用するには、[プロジェクトごとの認証] チェックボックスをオンにします。 - [DNS 認証の作成] をクリックします。
[ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[
ラベルを追加] をクリックして、ラベルのキーと値を指定します。[作成] をクリックします。
新しい証明書が証明書のリストに表示されます。
gcloud
DNS 認証を使用してクロスリージョン Google マネージド証明書を作成するには、dns-authorizations
フラグと --scope
フラグを指定して certificate-manager certificates create
コマンドを使用します。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME, *.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES" \ --scope=all-regions
次のように置き換えます。
CERTIFICATE_NAME
: 証明書の名前。DOMAIN_NAME
: ターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)またはワイルドカード ドメイン(*.myorg.example.com
など)にする必要があります。アスタリスク ドット接頭辞(*.)は、ワイルドカード証明書を示します。AUTHORIZATION_NAMES
: DNS 承認の名前のカンマ区切りのリスト。
API
次のように、certificates.create
メソッドに POST
リクエストを送信して証明書を作成します。
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME { "managed": { "domains": ["DOMAIN_NAME"], "dnsAuthorizations": [ "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME", ], "scope": "ALL_REGIONS" } }
次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの ID。CERTIFICATE_NAME
: 証明書の名前。DOMAIN_NAME
: ターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)またはワイルドカード ドメイン(*.myorg.example.com
など)にする必要があります。アスタリスクとドットの接頭辞(*.)は、ワイルドカード証明書を示します。AUTHORIZATION_NAMES
: DNS 承認の名前のカンマ区切りのリスト。
DNS 構成に CNAME レコードを追加する
サードパーティの DNS ソリューションを使用して DNS を管理している場合は、そのドキュメントを参照して CNAME レコードを DNS 構成に追加します。Google Cloud を使用して DNS を管理している場合は、このセクションの手順に沿って操作します。
コンソール
レコードセットを作成する手順は次のとおりです。
Google Cloud コンソールで、[DNS ゾーン] ページに移動します。
レコードを追加する DNS ゾーンの名前をクリックします。
[ゾーンの詳細] ページで、[標準を追加] をクリックします。
[レコードセットの作成] ページの [DNS 名] フィールドに、DNS ゾーンのサブドメインを入力します。
サブドメイン名を入力する際は、[DNS 名] フィールドに表示されるグレー表示のテキストを含むサブドメイン名が、
gcloud certificate-manager dns-authorizations describe
コマンドの出力に表示されるdnsResourceRecord.name
フィールドの完全な値と一致していることを確認します。次の例をご覧ください。
dnsResourceRecord.name
フィールドの値が_acme-challenge.myorg.example.com.
で、[DNS 名] フィールドのグレー表示のテキストが.example.com.
の場合は、_acme-challenge.myorg
を入力します。dnsResourceRecord.name
フィールドの値が_acme-challenge.myorg.example.com.
で、[DNS 名] フィールドのグレー表示のテキストが.myorg.example.com.
の場合は、_acme-challenge
を入力します。dnsResourceRecord.name
フィールドの値が_acme-challenge_ujmmovf2vn55tgye.myorg.example.com.
で、[DNS 名] フィールドのグレー表示のテキストが.myorg.example.com.
の場合は、_acme-challenge_ujmmovf2vn55tgye
を入力します。
[リソース レコードのタイプ] フィールドで [CNAME] を選択します。
[TTL] フィールドに、リソース レコードの有効期間を正の整数値で入力します。これはキャッシュに保存できる時間です。
[TTL ユニット] リストから、時間の単位(例:
30 minutes
)を選択します。[Canonical name] フィールドに、
gcloud certificate-manager dns-authorizations describe
コマンドの出力に表示されているdnsResourceRecord.data
フィールドの完全な値を入力します。追加情報を入力するには、[項目を追加] をクリックします。
[作成] をクリックします。
gcloud
DNS 認証を作成するとき、gcloud CLI コマンドは対応する CNAME レコードを返します。ターゲット ドメインの DNS ゾーンの DNS 構成に CNAME レコードを追加する手順は次のとおりです。
DNS レコード トランザクションを次のように開始します。
gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
DNS_ZONE_NAME
は、ターゲット DNS ゾーンの名前に置き換えます。CNAME レコードをターゲット DNS ゾーンに追加します。
gcloud dns record-sets transaction add CNAME_RECORD \ --name="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \ --ttl="30" \ --type="CNAME" \ --zone="DNS_ZONE_NAME"
次のように置き換えます。
CNAME_RECORD
: 対応する DNS 認証を作成した Google Cloud CLI コマンドによって返される CNAME レコードの完全なデータ値。VALIDATION_SUBDOMAIN_NAME
: DNS ゾーンの接頭辞サブドメイン(_acme-challenge
など)。DNS 認証を作成するの説明に従って、gcloud certificate-manager dns-authorizations describe
コマンドログから名前をコピーできます。DOMAIN_NAME
: ターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。また、ターゲット ドメイン名の後にピリオドを含める必要があります。DNS_ZONE_NAME
: ターゲット DNS ゾーンの名前。
次の例をご覧ください。
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge.myorg.example.com." \ --ttl="30" \ --type="CNAME" \ --zone="myorg-example-com"
DNS レコード トランザクションを実行して変更を保存します。
gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
DNS_ZONE_NAME
は、ターゲット DNS ゾーンの名前に置き換えます。
Terraform
DNS 構成に CNAME レコードを追加するには、google_dns_record_set
リソースを使用します。
証明書のステータスを確認する
証明書をロードバランサにデプロイする前に、証明書が有効であることを確認します。証明書の状態が ACTIVE
に変わるまでに数分かかることがあります。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[証明書] タブで、証明書の [ステータス] 列を確認します。
gcloud
証明書のステータスを確認するには、次のコマンドを実行します。
gcloud certificate-manager certificates describe CERTIFICATE_NAME
CERTIFICATE_NAME
は、ターゲット Google マネージド証明書の名前に置き換えます。
出力は次のようになります。
createTime: '2021-10-20T12:19:53.370778666Z' expireTime: '2022-05-07T05:03:49Z' managed: authorizationAttemptInfo: - domain: myorg.example.com state: AUTHORIZED dnsAuthorizations: - projects/myProject/locations/global/dnsAuthorizations/myCert domains: - myorg.example.com state: ACTIVE name: projects/myProject/locations/global/certificates/myCert pemCertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- sanDnsnames: - myorg.example.com updateTime: '2021-10-20T12:19:55.083385630Z'
数時間経っても証明書のステータスが ACTIVE
にならない場合は、CNAME
レコードが DNS 構成に正しく追加されていることを確認します。
その他のトラブルシューティングの手順については、Certificate Manager のトラブルシューティングをご覧ください。
証明書をロードバランサにデプロイする
グローバル Google マネージド証明書をデプロイするには、証明書をターゲット プロキシに直接関連付けます。
証明書をターゲット プロキシに直接添付する
証明書マップは、新しいターゲット プロキシまたは既存のターゲット プロキシに接続できます。
証明書マップを新しいターゲット プロキシに関連付けるには、gcloud compute
target-https-proxies create
コマンドを使用します。
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP \ --certificate-manager-certificates=CERTIFICATE_NAME \ --global
次のように置き換えます。
PROXY_NAME
: ターゲット プロキシの名前URL_MAP
: URL マップの名前。ロードバランサの作成時に URL マップを作成しました。CERTIFICATE_NAME
: 証明書の名前。
証明書マップを既存のターゲット HTTPS プロキシに接続するには、gcloud
compute target-https-proxies update
コマンドを使用します。既存のターゲット プロキシの名前がわからない場合は、[ターゲット プロキシ] ページに移動して、ターゲット プロキシの名前をメモします。
gcloud compute target-https-proxies update PROXY_NAME \ --global \ --certificate-manager-certificates=CERTIFICATE_NAME
ターゲット プロキシを作成または更新したら、次のコマンドを実行して確認します。
gcloud compute target-https-proxies list
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを削除します。
ロードバランサとそのリソースを削除します。
ロード バランシングの設定をクリーンアップするをご覧ください。
Google マネージド証明書を削除します。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[証明書] タブで、証明書のチェックボックスをオンにします。
[削除] をクリックします。
表示されたダイアログで、[削除] をクリックして確定します。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
CERTIFICATE_NAME
は、ターゲット証明書の名前に置き換えます。DNS 認証を削除します。
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
AUTHORIZATION_NAME
は、ターゲット DNS 認証の名前に置き換えます。