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

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

ロードバランサ認証は、Google マネージド証明書を取得する最も効率的な方法です。DNS 構成をクリーンに保ち、構成が完了した後に TLS 証明書をプロビジョニングします。

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

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

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

ロードバランサ認証を使用して Google マネージド証明書を作成するには、次の操作を行います。

コンソール

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

    Certificate Manager に移動

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

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

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

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

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

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

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

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

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

  11. [ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[ラベルを追加] をクリックして、ラベルのキーと値を指定します。

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

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

gcloud

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

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_NAMES: ターゲット ドメインのカンマ区切りのリスト。各ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。

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

グローバル Google マネージド証明書をデプロイするには、証明書マップを使用します。

証明書マップを作成する

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

gcloud

証明書マップを作成するには、gcloud certificate-manager maps create コマンドを使用します。

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

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

Terraform

証明書マップを作成するには、google_certificate_manager_certificate_map リソースを使用します。

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

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

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

gcloud

証明書マップエントリを作成するには、gcloud certificate-manager maps entries create コマンドを使用します。

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: 証明書マップエントリに関連付けるホスト名。

    ワイルドカード ドメインとルートドメインの両方をカバーする証明書を作成する場合は、example.com*.example.com など、ルートとワイルドカードを使用してホスト名を指定します。また、example.com 用と *.example.com 用の 2 つの証明書マップエントリを指定する必要があります。

Terraform

ルートドメインを使用して証明書マップエントリを作成するには、google_certificate_manager_certificate_map_entry リソースを使用します。

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

ワイルドカード ドメインを使用して証明書マップエントリを作成するには、google_certificate_manager_certificate_map_entry リソースを使用します。

resource "google_certificate_manager_certificate_map_entry" "second_entry" {
  name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = "*.${local.domain}"
}

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

証明書マップエントリに対応する証明書マップをターゲット プロキシに接続する前に、証明書マップエントリが有効であることを確認します。

証明書マップエントリを確認するには、gcloud certificate-manager maps entries describe コマンドを使用します。

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

以下を置き換えます。

  • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
  • CERTIFICATE_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'

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

証明書マップは、新しいターゲット プロキシまたは既存のターゲット プロキシに接続できます。

gcloud

証明書マップを新しいターゲット プロキシに添付するには、gcloud compute target-https-proxies create コマンドを使用します。

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global

以下を置き換えます。

  • PROXY_NAME: ターゲット プロキシの名前
  • CERTIFICATE_MAP_NAME: 証明書マップエントリと関連する証明書を参照する証明書マップの名前。
  • URL_MAP: URL マップの名前。

証明書マップを既存のターゲット HTTPS プロキシに添付するには、gcloud compute target-https-proxies update コマンドを使用します。既存のターゲット プロキシの名前がわからない場合は、[ターゲット プロキシ] ページに移動して、ターゲット プロキシの名前を確認します。

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

ターゲット プロキシを作成または更新したら、次のコマンドを実行して確認します。

gcloud compute target-https-proxies list

Terraform

証明書マップをターゲット プロキシに添付するには、google_compute_target_https_proxy リソースを使用します。

ターゲット プロキシを構成するときに、TLS(SSL)証明書を直接添付し、証明書マップを介して添付すると、プロキシは証明書マップで参照される証明書を使用し、直接添付された TLS(SSL)証明書を無視します。

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

証明書をロードバランサにデプロイする前に、証明書が有効であることを確認します。証明書の状態が 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
  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 にならない場合は、次の点を確認してください。

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

クリーンアップ

このチュートリアルで使用したリソースについて Google Cloud アカウントに課金されないようにするには、リソースを削除します。

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

    詳細については、ロード バランシングの設定をクリーンアップするをご覧ください。

  2. 証明書マップを削除するか、プロキシから切断します。

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

    gcloud compute target-https-proxies delete PROXY_NAME
    

    ターゲット HTTPS プロキシを保持する場合は、証明書マップをプロキシから切り離します。

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

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

    gcloud compute target-https-proxies update PROXY_NAME \
        --clear-certificate-map
    

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

  3. 証明書マップから証明書マップエントリを削除します。

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

    以下を置き換えます。

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

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

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

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

    コンソール

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

      Certificate Manager に移動

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

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

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

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

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