Certificate Authority Service でグローバル Google マネージド証明書をデプロイする

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

次のグローバル ロードバランサは、Certificate Authority Service による Google マネージド証明書をサポートしています。

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

クロスリージョン ロードバランサまたはリージョン ロードバランサにデプロイする場合は、以下をご覧ください。

CA Service と Certificate Manager の統合を構成する

CA Service と Certificate Manager を統合する手順は次のとおりです。

  1. ターゲット Google Cloud プロジェクトで、Certificate Manager サービス アカウントを作成します。

    gcloud beta services identity create --service=certificatemanager.googleapis.com \
        --project=PROJECT_ID
    

    PROJECT_ID は、ターゲットGoogle Cloud プロジェクトの ID に置き換えます。

    このコマンドは、作成されたサービス ID の名前を返します。次の例をご覧ください。

    service-520498234@gcp-sa-certificatemanager.iam.gserviceaccount.com
    
  2. Certificate Manager サービス アカウントに、ターゲット CA プール内の CA Service 証明書リクエスト元ロールroles/privateca.certificateRequester)を付与します。

    gcloud privateca pools add-iam-policy-binding CA_POOL \
        --location LOCATION \
        --member "serviceAccount:SERVICE_ACCOUNT" \
        --role roles/privateca.certificateRequester
    

    以下を置き換えます。

    • CA_POOL: ターゲット CA プールの ID。
    • LOCATION: ターゲット Google Cloud ロケーション。
    • SERVICE_ACCOUNT: ステップ 1 で作成したサービス アカウントのフルネーム。
  3. CA プールの証明書発行の構成リソースを作成します。

    コンソール

    1. Google Cloud コンソールで、[Certificate Manager] ページの [発行構成] タブに移動します。

      [Certificate Manager] に移動

    2. [作成] をクリックします。[証明書発行の構成を作成] ページが表示されます。

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

    4. 省略可: [説明] フィールドに、発行構成の説明を入力します。

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

    6. 省略可: [存続期間] フィールドに、発行する証明書の存続期間を日数で指定します。値は 21~30 日の範囲で指定してください。

    7. 省略可: [ローテーション時間枠の割合] で、更新プロセスを開始するときの証明書の存続期間の割合を指定します。有効な値の範囲については、存続期間とローテーション時間枠の割合をご覧ください。

    8. 省略可: [鍵アルゴリズム] リストから、秘密鍵の生成時に使用する鍵アルゴリズムを選択します。

    9. [CA プール] リストから、この証明書発行の構成リソースに割り当てる CA プールの名前を選択します。

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

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

    gcloud

    gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \
        --ca-pool=CA_POOL
    

    以下を置き換えます。

    • ISSUANCE_CONFIG_NAME: 証明書発行構成リソースの名前。
    • CA_POOL: この証明書発行構成リソースに割り当てる CA プールの完全なリソースパスと名前。

    証明書発行構成リソースの詳細については、証明書発行構成リソースを管理するをご覧ください。

CA Service インスタンスによって発行された Google マネージド証明書を作成する

CA Service インスタンスによって発行された Google マネージド証明書を作成するには、次の操作を行います。

コンソール

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

    Certificate Manager に移動

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

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

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

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

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

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

  8. [認証局のタイプ] で [プライベート] を選択します。

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

  10. [証明書発行の設定を選択する] で、ターゲット CA プールを参照する証明書発行の構成リソースの名前を選択します。

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

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

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

gcloud

Certificate Authority Service を使用してグローバル Google マネージド証明書を作成するには、issuance-config フラグを指定して certificate-manager certificates create コマンドを使用します。

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

以下を置き換えます。

  • CERTIFICATE_NAME: 証明書の名前。
  • DOMAIN_NAME: ターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。
  • ISSUANCE_CONFIG_NAME: ターゲット CA プールを参照する証明書発行構成リソースの名前。

API

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

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

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

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • CERTIFICATE_NAME: 証明書の名前。
  • DOMAIN_NAME: ターゲット ドメインの名前。ドメイン名は完全修飾ドメイン名(myorg.example.com など)にする必要があります。
  • ISSUANCE_CONFIG_NAME: ターゲット CA プールを参照する証明書発行構成リソースの名前。

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

証明書をロードバランサにデプロイする前に、証明書が有効であることを確認します。証明書の状態が 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:
  domains:
  - myorg.example.com
  issuanceConfig: projects/myproject/locations/global/issuanceConfigs/myissuanceConfig
  state: ACTIVE
name: projects/myproject/locations/global/certificates/mycertificate
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  - myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

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

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

グローバル 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)証明書を無視します。

CA Service によって発行された証明書のトラブルシューティング

トラブルシューティングの手順については、CA Service インスタンスによって発行された証明書に関連する問題をご覧ください。

クリーンアップ

このチュートリアルで使用したリソースについて 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 は、ターゲット証明書の名前に置き換えます。

  6. 証明書発行の構成リソースを削除します。

    コンソール

    1. Google Cloud コンソールで、[Certificate Manager] ページの [発行構成] タブに移動します。

      [Certificate Manager] に移動

    2. 削除する発行構成リソースのチェックボックスをオンにします。

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

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

    gcloud

     gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
     

    ISSUANCE_CONFIG_NAME は、ターゲットの証明書発行構成リソースの名前に置き換えます。

  7. CA プールを削除します。

    CA プールを削除する場合や、証明書発行構成リソースで参照されている CA プールで最後に有効にした CA を無効にする場合、CA プールを参照するすべての証明書発行構成リソースを削除します。詳細については、CA プールを削除するをご覧ください。