ロードバランサの承認でグローバル Google マネージド証明書をデプロイする


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

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

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

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

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

目標

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

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

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

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

準備

  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

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

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

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

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

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

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

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

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 は、ターゲット証明書の名前に置き換えます。

次のステップ