DNS 認証を使用してリージョン Google マネージド証明書をデプロイする

このチュートリアルでは、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 レコードを見つけて、レコードの詳細(datanametype)を 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 プロジェクトの ID
  • LOCATION: DNS 認証を作成するターゲット Google Cloud ロケーション。
  • AUTHORIZATION_NAME: DNS 認証の名前。
  • DOMAIN_NAME: この DNS 認証を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

DNS 認証を参照する Google マネージド証明書を作成する

前の手順で作成した DNS 認証を参照する Google マネージド証明書を作成するには、次の手順に従います。

コンソール

  1. Google Cloud コンソールで、[Certificate Manager] ページに移動します。

    Certificate Manager に移動

  2. [証明書] タブで、[証明書を追加] をクリックします。

  3. [証明書名] フィールドに、証明書の一意の名前を入力します。

  4. 省略可: [説明] フィールドに証明書の説明を入力します。説明は、証明書を識別するために使用します。

  5. [ロケーション] で [リージョン] を選択します。

  6. [リージョン] リストでリージョンを選択します。

  7. [証明書の種類] で [Google マネージド証明書を作成する] を選択します。

  8. [認証局のタイプ] で [公開] を選択します。

  9. [ドメイン名] フィールドに、証明書のドメイン名をカンマ区切りで指定します。各ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。 ドメイン名は、*.example.com などのワイルドカード ドメイン名にすることもできます。

  10. [認証タイプ] で [DNS 認証] を選択します。

    このページには、ドメイン名の DNS 認証が一覧表示されます。ドメイン名に関連付けられた DNS 認証がない場合は、次の手順で作成します。

    1. [見つからない DNS 認証の作成] をクリックします。
    2. [DNS 認証名] フィールドで、DNS 認証の名前を指定します。
    3. [DNS 認証を作成] をクリックします。
  11. [ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[ラベルを追加] をクリックして、ラベルのキーと値を指定します。

  12. [作成] をクリックします。

    新しい証明書が証明書のリストに表示されます。

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 プロジェクトの ID
  • CERTIFICATE_NAME: 証明書の名前。
  • DOMAIN_NAME: ターゲット ドメインの名前。ドメイン名は、完全修飾ドメイン名(myorg.example.com など)またはワイルドカード ドメイン(*.myorg.example.com など)にする必要があります。アスタリスク ドットの接頭辞(*.)は、ワイルドカード証明書を示します。
  • LOCATION: ターゲット Google Cloud ロケーション。
  • AUTHORIZATION_NAMES: DNS 認証の名前のカンマ区切りリスト。

DNS 構成に CNAME レコードを追加する

サードパーティの DNS ソリューションを使用して DNS を管理している場合は、そのドキュメントを参照して、DNS 構成に CNAME レコードを追加してください。Google Cloud を使用して DNS を管理している場合は、このセクションの手順を完了します。

コンソール

レコードセットを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[DNS ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. レコードを追加する DNS ゾーンの名前をクリックします。

  3. [ゾーンの詳細] ページで、[標準を追加] をクリックします。

  4. [レコードセットの作成] ページの [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 と入力します。

  5. [リソース レコードのタイプ] フィールドで [CNAME] を選択します。

  6. [TTL] フィールドに、リソース レコードの有効期間を数値で入力します。これはキャッシュに保存できる時間です。

  7. [TTL ユニット] リストから、時間の単位(例: 30 minutes)を選択します。

  8. [正規名] フィールドに、gcloud certificate-manager dns-authorizations describe コマンドの出力に表示されている dnsResourceRecord.data フィールドの完全な値を入力します。

  9. 追加情報を入力するには、[項目を追加] をクリックします。

  10. [作成] をクリックします。

gcloud

DNS 認証を作成するとき、gcloud CLI コマンドは対応する CNAME レコードを返します。ターゲット ドメインの DNS ゾーンの DNS 構成に CNAME レコードを追加する手順は次のとおりです。

  1. DNS レコード トランザクションを次のように開始します。

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    DNS_ZONE_NAME は、ターゲット DNS ゾーンの名前に置き換えます。

  2. 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_RECORDPER_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"
    
  3. DNS レコード トランザクションを実行して変更を保存します。

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    DNS_ZONE_NAME は、ターゲット DNS ゾーンの名前に置き換えます。

Terraform

CNAME レコードを DNS 構成に追加するには、google_dns_record_set リソースを使用します。

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

証明書のステータスを確認する

証明書をロードバランサにデプロイする前に、証明書が有効であることを確認します。証明書の状態が ACTIVE に変わるまで数分かかることがあります。

コンソール

  1. Google Cloud コンソールで、[Certificate Manager] ページに移動します。

    Certificate Manager に移動

  2. [証明書] タブで、証明書の [ステータス] 列を確認します。

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 アカウントに課金されないようにするには、リソースを削除します。

  1. ロードバランサとそのリソースを削除します。

    ロード バランシングの設定をクリーンアップするをご覧ください。

  2. Google マネージド証明書を削除します。

    コンソール

    1. Google Cloud コンソールで、[Certificate Manager] ページに移動します。

      Certificate Manager に移動

    2. [証明書] タブで、証明書のチェックボックスをオンにします。

    3. [削除] をクリックします。

    4. 表示されたダイアログで、[削除] をクリックして確定します。

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME \
        --location=LOCATION
    

    以下を置き換えます。

    • CERTIFICATE_NAME: 証明書の名前。
    • LOCATION: ターゲット Google Cloud ロケーション。
  3. DNS 認証を削除します。

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
       --location=LOCATION
    

    以下を置き換えます。

    • AUTHORIZATION_NAME: DNS 認証の名前。
    • LOCATION: DNS 認証を作成したターゲット Google Cloud ロケーション。