ロードバランサの証明書を Certificate Manager に移行する

このチュートリアルでは、Cloud Load Balancing 証明書を Certificate Manager に移行する方法について説明します。Cloud Load Balancing 証明書の詳細については、Cloud Load Balancing ドキュメントの SSL 証明書の概要をご覧ください。

ダウンタイムなしで Cloud Load Balancing 証明書を移行するには、まず移行する証明書を特定します。次に、Cloud Load Balancing 証明書と同じ数の Google マネージド証明書を作成します。次に、証明書を 1 つの証明書マップに統合し、別のロードバランサで証明書マップをテストします。テストが成功したら、Cloud Load Balancing 証明書をホストするターゲット ロードバランサに証明書マップを添付します。

サポートされているロードバランサの一覧については、Certificate Manager の概要をご覧ください。

移行する証明書を特定する

移行する証明書を特定する手順は次のとおりです。

  1. ロードバランサで、ターゲット プロキシの名前を確認します。

  2. 移行する証明書を特定します。

    ターゲット プロキシに添付されている証明書を確認するには、次のコマンドを実行します。

    gcloud compute target-https-proxies describe TARGET_PROXY_NAME
    

    TARGET_PROXY_NAME は、ターゲット プロキシの名前に置き換えます。

    出力は次のようになります。

    creationTimestamp: '2021-10-06T04:05:07.520-07:00'
    fingerprint: c9Txdx6AfcM=
    id: '365692570234384780'
    kind: compute#targetHttpsProxy
    name: my-proxy
    selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/targetHttpsProxies/my-proxy
    sslCertificates:
    - https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-first-certificate
    - https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-second-certificate
    urlMap: https://www.googleapis.com/compute/v1/projects/my-project/global/urlMaps/my-map
    

    sslCertificates フィールドに表示されている証明書の名前をメモします。詳細については、ターゲット プロキシの概要をご覧ください。

  3. 各証明書の詳細を取得する:

    gcloud compute ssl-certificates --project=PROJECT_ID describe LB_CERTIFICATE_NAME
    

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID
    • LB_CERTIFICATE_NAME: ロードバランサ証明書の名前。

    出力は次のようになります。

       certificate: |
         -----BEGIN CERTIFICATE-----
         MIIFYjCCBEqgAwIBAgIQd70NbNs2+RrqIQ/E8FjTDTANBgkqhkiG9w0BAQsFADBX
         MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE
         CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIwMDYx
         OTAwMDA0MloXDTI4MDEyODAwMDA0MlowRzELMAkGA1UEBhMCVVMxIjAgBgNVBAoT
         GUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBMTEMxFDASBgNVBAMTC0dUUyBSb290IFIx
         MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAthECix7joXebO9y/lD63
         ladAPKH9gvl9MgaCcfb2jH/76Nu8ai6Xl6OMS/kr9rH5zoQdsfnFl97vufKj6bwS
         iV6nqlKr+CMny6SxnGPb15l+8Ape62im9MZaRw1NEDPjTrETo8gYbEvs/AmQ351k
         KSUjB6G00j0uYODP0gmHu81I8E3CwnqIiru6z1kZ1q+PsAewnjHxgsHA3y6mbWwZ
         DrXYfiYaRQM9sHmklCitD38m5agI/pboPGiUU+6DOogrFZYJsuB6jC511pzrp1Zk
         j5ZPaK49l8KEj8C8QMALXL32h7M1bKwYUH+E4EzNktMg6TO8UpmvMrUpsyUqtEj5
         cuHKZPfmghCN6J3Cioj6OGaK/GP5Afl4/Xtcd/p2h/rs37EOeZVXtL0m79YB0esW
         CruOC7XFxYpVq9Os6pFLKcwZpDIlTirxZUTQAs6qzkm06p98g7BAe+dDq6dso499
         iYH6TKX/1Y7DzkvgtdizjkXPdsDtQCv9Uw+wp9U7DbGKogPeMa3Md+pvez7W35Ei
         Eua++tgy/BBjFFFy3l3WFpO9KWgz7zpm7AeKJt8T11dleCfeXkkUAKIAf5qoIbap
         sZWwpbkNFhHax2xIPEDgfg1azVY80ZcFuctL7TlLnMQ/0lUTbiSw1nH69MG6zO0b
         9f6BQdgAmD06yK56mDcYBZUCAwEAAaOCATgwggE0MA4GA1UdDwEB/wQEAwIBhjAP
         BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTkrysmcRorSCeFL1JmLO/wiRNxPjAf
         BgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo//z9SzBgBggrBgEFBQcBAQRUMFIw
         JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnBraS5nb29nL2dzcjEwKQYIKwYBBQUH
         MAKGHWh0dHA6Ly9wa2kuZ29vZy9nc3IxL2dzcjEuY3J0MDIGA1UdHwQrMCkwJ6Al
         oCOGIWh0dHA6Ly9jcmwucGtpLmdvb2cvZ3NyMS9nc3IxLmNybDA7BgNVHSAENDAy
         MAgGBmeBDAECATAIBgZngQwBAgIwDQYLKwYBBAHWeQIFAwIwDQYLKwYBBAHWeQIF
         AwMwDQYJKoZIhvcNAQELBQADggEBADSkHrEoo9C0dhemMXoh6dFSPsjbdBZBiLg9
         NR3t5P+T4Vxfq7vqfM/b5A3Ri1fyJm9bvhdGaJQ3b2t6yMAYN/olUazsaL+yyEn9
         WprKASOshIArAoyZl+tJaox118fessmXn1hIVw41oeQa1v1vg4Fv74zPl6/AhSrw
         9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy
         +qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi
         d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8=
         -----END CERTIFICATE-----
       creationTimestamp: '2021-05-06T04:39:21.736-07:00'
       expireTime: '2022-06-07T01:10:34.000-07:00'
       id: '6422259403966690822'
       kind: compute#sslCertificate
       managed:
          domainStatus:
          a.my-domain1.example.com: ACTIVE
          b.my-domain2.example.com: ACTIVE
          domains:
          - a.my-domain1.example.com
          - b.my-domain2.example.com
          status: ACTIVE
       name: my-certificate
       selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-certificate
       subjectAlternativeNames:
       - a. my-domain1.example.com
       - b. my-domain2.example.com
       type: MANAGED
    

Google マネージド証明書を作成する

ロードバランサ証明書と同じ数の Google マネージド証明書を作成します。グローバル ロードバランサまたは従来のロードバランサの場合はグローバル証明書を作成し、リージョン ロードバランサの場合はリージョン証明書を作成し、クロスリージョン ロードバランサの場合はクロスリージョン証明書を作成します。証明書を作成する前に、DNS 認証を作成し、ドメインの権威 DNS ゾーンに CNAME レコードを追加します。

DNS 認証を使用して Google マネージド証明書(推奨)を作成するか、セルフマネージド証明書を作成するかを選択できます。

このセクションでは、グローバル Google マネージド証明書を作成する手順とコマンドについて説明します。リージョンまたはクロスリージョン Google マネージド証明書を作成するには、Google マネージド証明書を作成するをご覧ください。

DNS 認証を作成する

DNS 認証は 1 つのドメイン名のみを対象とします。ターゲット証明書で使用するドメイン名ごとに、個別の DNS 認証を作成する必要があります。

*.myorg.example.com などのワイルドカード証明書用の DNS 認証を作成する場合は、親ドメイン(myorg.example.com など)の DNS 認証を構成します。

コンソール

DNS 認証を作成することも、証明書の作成時に既存の DNS 認証を添付することもできます。詳細については、DNS 認証を参照する Google マネージド証明書を作成するをご覧ください。

gcloud

FIXED_RECORD または PER_PROJECT_RECORD の 2 種類の DNS 認証を作成できます。詳細については、DNS 認可をご覧ください。

FIXED_RECORD DNS 認証

FIXED_RECORD DNS 認証を作成するには、次の gcloud certificate-manager dns-authorizations create コマンドを使用します。

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=[FIXED_RECORD]

次のように置き換えます。

  • AUTHORIZATION_NAME: DNS 認証の名前。
  • DOMAIN_NAME: この DNS 認証を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

FIXED_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.myorg.example.com.
  type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

PER_PROJECT_RECORD DNS 認証

PER_PROJECT_RECORD DNS 認証を作成するには、次の gcloud certificate-manager dns-authorizations create コマンドを使用します。

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=PER_PROJECT_RECORD

次のように置き換えます。

  • AUTHORIZATION_NAME: DNS 認証の名前。
  • DOMAIN_NAME: この DNS 認証を作成するターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

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'

Terraform

DNS 認証を作成するには、google_certificate_manager_dns_authorization リソースを使用します。

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

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 マネージド証明書を作成するには、次の手順に従います。

コンソール

  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 認証の名前を指定します。デフォルトの DNS 認証タイプは FIXED_RECORD です。複数のプロジェクトで証明書を個別に管理するには、[プロジェクトごとの認証] チェックボックスをオンにします。
    3. [DNS 認証を作成] をクリックします。
  11. [ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[ラベルを追加] をクリックして、ラベルのキーと値を指定します。

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

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

gcloud

DNS 認証を使用してグローバル Google マネージド証明書を作成するには、dns-authorizations フラグを指定して certificate-manager certificates create コマンドを実行します。

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME,*.DOMAIN_NAME" \
    --dns-authorizations="AUTHORIZATION_NAMES"

以下を置き換えます。

  • CERTIFICATE_NAME: 証明書の名前。
  • DOMAIN_NAME: ターゲット ドメインの名前。ドメイン名は、完全修飾ドメイン名(myorg.example.com など)またはワイルドカード ドメイン(*.myorg.example.com など)にする必要があります。アスタリスク ドットの接頭辞((*.))は、ワイルドカード証明書を示します。
  • AUTHORIZATION_NAMES: 証明書用に作成した DNS 認証の名前のカンマ区切りリスト。

Terraform

google_certificate_manager_certificate リソースを使用します。

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

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",
  ],
 }
}

次のように置き換えます。

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

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 のトラブルシューティングをご覧ください。

証明書マップを作成する

証明書をグローバル外部アプリケーション ロードバランサにデプロイするには、証明書マップを作成します。

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

以下を置き換えます。

  • CERTIFICATE_MAP_NAME: 証明書マップの名前。

証明書マップエントリを作成する

証明書をグローバル外部アプリケーション ロードバランサにデプロイするには、証明書マップエントリを作成します。

移行する証明書ごとに、次のように証明書を参照する証明書マップエントリを作成します。

  1. 証明書の詳細を取得します。

  2. ログで、subjectAlternativeNames フィールドに一覧表示されたドメインごとに、そのドメインを対象とする証明書マップエントリを作成します。1 つのドメインを複数の証明書がカバーしている場合は、証明書マップエントリを 1 つだけ作成し、そのドメインをカバーする有効な証明書を使用します。

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME" \
        --certificates="CERTIFICATE_NAMES" \
        --hostname="HOSTNAME"
    

    以下を置き換えます。

    • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
    • CERTIFICATE_MAP_NAME: 証明書マップエントリが添付されている証明書マップの名前。
    • CERTIFICATE_NAMES: この証明書マップエントリに関連付ける証明書の名前のカンマ区切りリスト。
    • HOSTNAME: 証明書マップエントリに関連付けるホスト名。
  3. 省略可: プロキシに最初に添付された証明書のリストから最初の証明書に対応する証明書を参照するプライマリ証明書マップエントリを作成します。

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME" \
       --certificates="CERTIFICATE_NAMES" \
       --set-primary
    

    以下を置き換えます。

    • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
    • CERTIFICATE_MAP_NAME: 証明書マップエントリが添付されている証明書マップの名前。
    • CERTIFICATE_NAMES: この証明書マップエントリに関連付ける証明書の名前のカンマ区切りリスト。
  4. 作成した各証明書マップエントリのアクティブ状態を確認するには、次のコマンドを実行します。

     gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
         --map="CERTIFICATE_MAP_NAME"
    

    以下を置き換えます。

    • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
    • CERTIFICATE_MAP_NAME: 証明書マップエントリが添付されている証明書マップの名前。

    出力は次のようになります。

       certificates:
       - projects/my-project/locations/global/certificates/my-certificate
       createTime: '2021-09-06T10:01:56.229472109Z'
       hostname: example.com
       name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/my-map-entry
       state: ACTIVE
       updateTime: '2021-09-06T10:01:58.277031787Z'
    

省略可: 新しいロードバランサで構成をテストする

ダウンタイムを最小限に抑えるために、新しく構成した証明書マップを本番環境のトラフィックを処理しない新しいロードバランサでテストすることをおすすめします。これにより、本番環境での移行に進む前に、エラーを検出して解決できます。

次のように構成をテストします。

  1. 新しいターゲット プロキシを使用してグローバル ロードバランサを作成します。ロードバランサを作成するには、次のページをご覧ください。

  2. 新しいロードバランサのターゲット プロキシに証明書マップを添付します。

    gcloud compute target-https-proxies create TEST_PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    以下を置き換えます。

    • TEST_PROXY_NAME: テスト ターゲット プロキシの名前。
    • CERTIFICATE_MAP_NAME: 証明書マップエントリを参照する証明書マップの名前と、関連する証明書。
  3. 移行に含まれるターゲット ドメインごとに、新しいロードバランサの IP アドレスでドメインへの接続をテストします。

    openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443
    

    以下を置き換えます。

    • DOMAIN_NAME: ターゲット ドメインの名前。
    • IP_ADDRESS: 新しいロードバランサの IP アドレス。

    接続のテストの詳細については、OpenSSL でテストするをご覧ください。

テスト環境をクリーンアップする

前の手順で作成したテスト環境をクリーンアップします。

ロードバランサの削除の説明に沿って、テスト ロードバランサを削除します。

前の手順で作成した証明書、証明書マップ、証明書マップエントリは削除しないでください。

新しい証明書マップをターゲット ロードバランサに適用する

新しい証明書構成をテストして有効であることを確認したら、次の手順に沿って、新しい証明書マップをターゲット ロードバランサ(証明書をホストするロードバランサ)に適用します。

  1. グローバル ロードバランサを使用している場合は、証明書マップを新しいロードバランサのターゲット プロキシに添付します。

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    以下を置き換えます。

    • TARGET_PROXY_NAME: ターゲット プロキシの名前
    • CERTIFICATE_MAP_NAME: 証明書マップエントリと関連する証明書を参照する証明書マップの名前。
  2. 構成の変更が適用され、ロードバランサが新しい証明書の提供を開始するまで待ちます。通常、この処理には数分かかりますが、最大で 30 分ほどかかる場合もあります。

証明書が移行されます。トラフィックに問題がある場合は、新しい証明書マップをターゲット プロキシから切り離します。これにより、ロードバランサが元の構成に戻ります。