このチュートリアルでは、Certificate Manager を使用して、DNS 認証でリージョン外部アプリケーション ロードバランサまたはリージョン内部アプリケーション ロードバランサにリージョン Google マネージド証明書をデプロイする方法について説明します。
グローバル外部ロードバランサまたはクロスリージョン ロードバランサにデプロイする場合は、以下をご覧ください。
リージョン Google が管理する証明書を作成する
証明書を作成する前に、パブリック DNS ゾーンを作成します。次に、DNS 認証を作成し、CNAME レコードをターゲット DNS ゾーンに追加します。
DNS 認証を作成する
DNS 認証は 1 つのドメイン名のみを対象とします。ターゲット証明書で使用するドメイン名ごとに、個別の DNS 認証を作成する必要があります。
*.myorg.example.com
などのワイルドカード証明書用の DNS 認証を作成する場合は、親ドメイン(myorg.example.com
など)の DNS 認証を構成します。
リージョン Google マネージド証明書の場合、作成できる DNS 認証は PER_PROJECT_RECORD
タイプのみです。
コンソール
DNS 認証を作成することも、証明書の作成時に既存の DNS 認証を添付することもできます。詳細については、DNS 認証を参照する Google マネージド証明書を作成するをご覧ください。
gcloud
PER_PROJECT_RECORD
DNS 認証を作成するには、次の gcloud certificate-manager dns-authorizations create
コマンドを使用します。
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --location="LOCATION"
次のように置き換えます。
AUTHORIZATION_NAME
: DNS 認証の名前。DOMAIN_NAME
: この DNS 認証を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。LOCATION
: DNS 認証を作成するターゲット Google Cloud ロケーション。
PER_PROJECT_RECORD
DNS 認証を作成したら、gcloud 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_ujmmovf2vn55tgye.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/LOCATION/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME" { "domain": "DOMAIN_NAME", "type": "PER_PROJECT_RECORD" }
次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: DNS 認証を作成するターゲット Google Cloud ロケーション。AUTHORIZATION_NAME
: DNS 認証の名前。DOMAIN_NAME
: この DNS 認証を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。
DNS 認証を参照する Google マネージド証明書を作成する
前の手順で作成した DNS 認証を参照する Google マネージド証明書を作成するには、次の手順に従います。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[証明書] タブで、[証明書を追加] をクリックします。
[証明書名] フィールドに、証明書の一意の名前を入力します。
省略可: [説明] フィールドに証明書の説明を入力します。説明は、証明書を識別するために使用します。
[ロケーション] で [リージョン] を選択します。
[リージョン] リストでリージョンを選択します。
[証明書の種類] で [Google マネージド証明書を作成する] を選択します。
[認証局のタイプ] で [公開] を選択します。
[ドメイン名] フィールドに、証明書のドメイン名をカンマ区切りで指定します。各ドメイン名は完全修飾ドメイン名(
myorg.example.com
など)にする必要があります。 ドメイン名は、*.example.com
などのワイルドカード ドメイン名にすることもできます。[認証タイプ] で [DNS 認証] を選択します。
このページには、ドメイン名の DNS 認証が一覧表示されます。ドメイン名に関連付けられた DNS 認証がない場合は、次の手順で作成します。
- [見つからない DNS 認証の作成] をクリックします。
- [DNS 認証名] フィールドで、DNS 認証の名前を指定します。
- [DNS 認証を作成] をクリックします。
[ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[
ラベルを追加] をクリックして、ラベルのキーと値を指定します。[作成] をクリックします。
新しい証明書が証明書のリストに表示されます。
gcloud
DNS 認証を使用してリージョン Google マネージド証明書を作成するには、dns-authorizations
フラグと location
フラグを指定して certificate-manager certificates create
コマンドを実行します。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME, *.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES" \ --location=LOCATION
以下を置き換えます。
CERTIFICATE_NAME
: 証明書の名前。DOMAIN_NAME
: ターゲット ドメインの名前。ドメイン名は、完全修飾ドメイン名(myorg.example.com
など)またはワイルドカード ドメイン(*.myorg.example.com
など)にする必要があります。アスタリスク ドットの接頭辞(*.)は、ワイルドカード証明書を示します。AUTHORIZATION_NAMES
: DNS 認証の名前のカンマ区切りリスト。LOCATION
: ターゲット Google Cloud ロケーション。
API
次のように、certificates.create
メソッドに POST
リクエストを送信して証明書を作成します。
POST /v1/projects/PROJECT_ID/locations/LOCATION/certificates?certificate_id=CERTIFICATE_NAME { "managed": { "domains": ["DOMAIN_NAME"], "dnsAuthorizations": [ "projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations/AUTHORIZATION_NAME", ], } }
次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDCERTIFICATE_NAME
: 証明書の名前。DOMAIN_NAME
: ターゲット ドメインの名前。ドメイン名は、完全修飾ドメイン名(myorg.example.com
など)またはワイルドカード ドメイン(*.myorg.example.com
など)にする必要があります。アスタリスク ドットの接頭辞(*.)は、ワイルドカード証明書を示します。LOCATION
: ターゲット Google Cloud ロケーション。AUTHORIZATION_NAMES
: DNS 認証の名前のカンマ区切りリスト。
DNS 構成に CNAME レコードを追加する
サードパーティの DNS ソリューションを使用して DNS を管理している場合は、そのドキュメントを参照して、DNS 構成に CNAME レコードを追加してください。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
)を選択します。[正規名] フィールドに、
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 ゾーンの名前。
FIXED_RECORD
とPER_PROJECT_RECORD
の DNS 認証の違いについては、次の例をご覧ください。2 つの例の違いは、--name
フラグの値だけです。FIXED_RECORD 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"
PER_PROJECT_RECORD DNS 認証
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge_ujmmovf2vn55tgye.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
CNAME レコードを DNS 構成に追加するには、google_dns_record_set
リソースを使用します。
証明書のステータスを確認する
証明書をロードバランサにデプロイする前に、証明書が有効であることを確認します。証明書の状態が ACTIVE
に変わるまで数分かかることがあります。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[証明書] タブで、証明書の [ステータス] 列を確認します。
gcloud
証明書のステータスを確認するには、次のコマンドを実行します。
gcloud certificate-manager certificates describe CERTIFICATE_NAME \ --location=LOCATION
以下を置き換えます。
CERTIFICATE_NAME
: 証明書の名前。LOCATION
: Google マネージド証明書を作成したターゲット Google Cloud ロケーション。
出力は次のようになります。
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/LOCATION/dnsAuthorizations/myCert domains: - myorg.example.com state: ACTIVE name: projects/myProject/locations/LOCATION/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 \ --certificate-manager-certificates=CERTIFICATE_NAME \ --url-map=URL_MAP \ --region=LOCATION
以下を置き換えます。
PROXY_NAME
: ターゲット プロキシの名前CERTIFICATE_NAME
: 証明書の名前。URL_MAP
: URL マップの名前。ロードバランサの作成時に URL マップを作成しました。LOCATION
: HTTPS ターゲット プロキシを作成するターゲット Google Cloud ロケーション。
既存のターゲット HTTPS プロキシに証明書を関連付けるには、gcloud
compute target-https-proxies update
コマンドを使用します。既存のターゲット プロキシの名前がわからない場合は、[ターゲット プロキシ] ページに移動して、ターゲット プロキシの名前を確認します。
gcloud compute target-https-proxies update PROXY_NAME \ --region=LOCATION \ --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 \ --location=LOCATION
以下を置き換えます。
CERTIFICATE_NAME
: 証明書の名前。LOCATION
: ターゲット Google Cloud ロケーション。
DNS 認証を削除します。
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME --location=LOCATION
以下を置き換えます。
AUTHORIZATION_NAME
: DNS 認証の名前。LOCATION
: DNS 認証を作成したターゲット Google Cloud ロケーション。