このチュートリアルでは、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 ロケーション。