ロードバランサ認証を使用してグローバル Google マネージド証明書をデプロイする


このチュートリアルでは、例としてロードバランサの承認で Google マネージド証明書を使用する証明書のデプロイ プロセスについて説明します。

サポートされているドメインの承認のタイプの比較については、ドメインの承認をご覧ください。

次のロードバランサは、ロードバランサの承認を使用した Google マネージド証明書をサポートしています。

  • グローバル外部アプリケーション ロードバランサ
  • 従来のアプリケーション ロードバランサ
  • グローバル外部プロキシ ネットワーク ロードバランサ

既存の証明書を Certificate Manager に移行する場合は、代わりに証明書を Certificate Manager に移行するの手順に従ってください。

目標

このチュートリアルでは、次のタスクを行う方法を説明します。

  • Certificate Manager を使用して、ロードバランサの承認で公的に信頼できる CA によって発行された Google マネージド証明書を作成します。
  • ターゲット HTTPS プロキシを使用して、サポートされているロードバランサに証明書をデプロイします。

証明書のデプロイ プロセスの詳細については、デプロイの概要をご覧ください。

このチュートリアルの手順に沿って、すでに本番環境トラフィックを処理しているドメインに対して証明書をデプロイしている場合は、対応するロードバランサでその証明書がプロビジョニングされて有効になっている間、そのドメインでトラフィックが中断されることに注意してください。

始める前に

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. このチュートリアルのタスクを完了するための次のロールがあることを確認してください。

    • Certificate Manager オーナー: Certificate Manager リソースの作成と管理に必要です。
    • Compute ロードバランサ管理者または Compute ネットワーク管理者: HTTPS ターゲット プロキシの作成と管理に必要です。
    • DNS 管理者: DNS ソリューションとして Cloud DNS を使用する場合に必要です。

    詳しくは以下をご覧ください。

ロードバランサの承認で Google マネージド証明書を作成する

ロードバランサの承認で Google マネージド証明書を作成するには、このセクションの手順を行います。

証明書に複数のドメイン名を指定するには、証明書のターゲット ドメイン名のカンマ区切りのリストを指定します。

詳細については、権限とロールをご覧ください。

コンソール

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

    Certificate Manager に移動

  2. 表示されたページで、[証明書] タブを選択します。

  3. [証明書を追加] をクリックします。

  4. 証明書の名前を入力します。

    この名前は、プロジェクト内で一意にする必要があります。

  5. 省略可: 証明書の [説明] を入力します。説明は、後で特定の証明書を識別するのに役立ちます。

  6. [ロケーション] で [グローバル] を選択します。

  7. [範囲] で [デフォルト] を選択します。

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

  9. [認証局の種類] で [公開] を選択します。

  10. 証明書のドメイン名を指定します。移行先ドメインのカンマ区切りリストを入力します。また、各ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

  11. [認証タイプ] で [ロードバランサの認証] を選択します。

  12. 証明書に関連付けるラベルを指定します。必要に応じて、複数のラベルを追加できます。ラベルを追加するには、[ ラベルの追加] ボタンをクリックして、ラベルの keyvalue を指定します。

  13. [作成] をクリックします。新しい証明書が証明書のリストに表示されることを確認します。

gcloud

gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAMES"

以下のように置き換えます。

  • CERTIFICATE_NAME: 証明書の一意の名前。
  • DOMAIN_NAMES: この証明書のターゲット ドメインのカンマ区切りのリスト。各ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

Terraform

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

resource "google_certificate_manager_certificate" "default" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "Cert with LB authorization"
  managed {
    domains = [local.domain]
  }
  labels = {
    "terraform" : true
  }
}

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

API

次のように certificates.create メソッドに POST リクエストを送信して証明書を作成します。

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
 }
}

以下のように置き換えます。

  • PROJECT_ID: ターゲットの Google Cloud プロジェクトの ID。
  • CERTIFICATE_NAME: この証明書を説明する一意の名前。
  • DOMAIN_NAME: この証明書のターゲット ドメイン。 ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

証明書のデプロイ プロセスの概要については、デプロイの概要をご覧ください。

証明書をロードバランサにデプロイする

前の手順で作成した Google マネージド証明書をロードバランサにデプロイするには、このセクションの手順を完了します。

証明書マップを作成する

証明書に関連付けられた証明書マップエントリを参照する証明書マップを作成します。

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME は、ターゲット証明書マップの名前に置き換えます。

Terraform

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

resource "google_certificate_manager_certificate_map" "default" {
  name        = "${local.name}-certmap1-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

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

証明書マップ エントリを作成し、証明書証明書マップに関連付けます。

gcloud

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

以下のように置き換えます。

  • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップエントリの一意の名前
  • CERTIFICATE_MAP_NAME: この証明書マップエントリが添付されている証明書マップの名前
  • CERTIFICATE_NAME: この証明書マップエントリに関連付ける証明書の名前
  • HOSTNAME: この証明書マップエントリに関連付けるホスト名

Terraform

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

resource "google_certificate_manager_certificate_map_entry" "default" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.default.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.default.id]
  hostname     = local.domain
}

証明書マップエントリが有効であることを確認する

次のコマンドを使用して、対応する証明書マップをターゲット プロキシに添付する前に、証明書マップエントリがアクティブであることを確認します。

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

以下のように置き換えます。

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

このコマンドでは、次のような出力が返されます。

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

証明書マップをターゲット プロキシに添付する

構成した証明書マップを目的のターゲット プロキシに添付します。

コンソール

  1. Google Cloud コンソールで、[ターゲット プロキシ] ページに移動します。

[ターゲット プロキシ] に移動

  1. ターゲット プロキシの名前に注意します。

  2. 証明書マップをターゲット プロキシに添付する

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

以下のように置き換えます。

*   `PROXY_NAME`: the name of the target proxy
*   `CERTIFICATE_MAP_NAME`: the name of the certificate
    map referencing your certificate map entry and its associated
    certificate

Terraform

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

resource "google_compute_target_https_proxy" "default" {
  name            = "test-proxy"
  certificate_map = "//certificatemanager.googleapis.com/${google_certificate_manager_certificate_map.default.id}"
  url_map         = google_compute_url_map.default.id
}

既存の TLS(SSL)証明書がプロキシに直接添付されている場合、プロキシは、直接添付されている TLS(SSL)証明書よりも、証明書マップによって参照される証明書を優先します。

証明書が有効化されるまで待つ

証明書をターゲット プロキシに添付した後、証明書が発行されてステータスが ACTIVE に変わるまで最長で数時間かかることがあります。ステータスが ACTIVE になった後、ロードバランサが証明書の使用を開始するまでに最長で 30 分かかります。

証明書のステータスを確認するには、次のコマンドを使用します。

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
  domains:
  -   myorg.example.com
    state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
sanDnsnames:
  -   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

数時間経っても証明書のステータスが ACTIVE に変更されない場合は、次の点を確認してください。

その他のトラブルシューティングの手順については、SSL 証明書のトラブルシューティングをご覧ください。

クリーンアップ

このチュートリアルで行った変更を元に戻すには、次の手順を行います。

  1. プロキシから証明書マップを切断します。

    証明書マップを切断する前に、次の点に注意してください。

    • プロキシに直接 TLS(SSL)証明書が添付されていた場合、証明書マップを切断すると、プロキシは直接添付された TLS(SSL)証明書を使用して再開します。
    • プロキシに直接 TLS(SSL)証明書が添付されていない場合、証明書マップをプロキシから切断することはできません。証明書マップを切断するには、まず少なくとも 1 つの TLS(SSL)証明書をプロキシに直接添付する必要があります。

    証明書マップを切断するには、次のコマンドを実行します。

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    
  2. 証明書マップから証明書マップエントリを削除します。

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

    以下のように置き換えます。

    • CERTIFICATE_MAP_ENTRY_NAME: ターゲット証明書マップエントリの名前
    • CERTIFICATE_MAP_NAME: ターゲット証明書マップの名前
  3. 証明書マップを削除します。

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME は、ターゲット証明書マップの名前に置き換えます。

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

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME は、ターゲット証明書の名前に置き換えます。

次のステップ