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


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

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

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

証明書の発行ポリシーがターゲット CA プールで有効になっている場合、証明書のプロビジョニングが次のいずれかの理由で失敗することがあります。

  • 証明書発行ポリシーによって、要求された証明書がブロックされている。この場合は、証明書が発行されていないため課金されません。
  • このポリシーで、Certificate Manager でサポートされていない証明書に対する変更が適用されている。この場合、Certificate Manager と完全に互換性がない場合でも、証明書が発行されているため、引き続き請求されます。

このチュートリアルの手順で発行される証明書は、信頼性が高くありません。一般公開されている証明書を発行する場合は、代わりに次のいずれかのチュートリアルの手順に従ってください。

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

Google マネージド TLS 証明書の発行にリージョン CA プールを使用している場合でも、証明書自体はグローバルであり、どのリージョンでも使用できます。

目標

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

  • Certificate Manager を使用して、CA Service で Google マネージド証明書を作成する。
  • ターゲット HTTPS プロキシを使用して、サポートされているロードバランサに証明書をデプロイします。

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

準備

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

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

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

    • Certificate Manager オーナー: Certificate Manager リソースの作成と管理に必要です。
    • Compute ロードバランサ管理者または Compute ネットワーク管理者: HTTPS ターゲット プロキシの作成と管理に必要です。
    • Certificate Authority Service 管理者: CA Service 内でアクションを実行するために必要です。

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

  3. CA Service API を有効にします

  4. CA プールを作成します。この CA プールに少なくとも 1 つの CA を作成して有効にする必要があります。

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 プール内の証明書リクエスト元ロールを付与します。

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

    以下を置き換えます。

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

    gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \
       --ca-pool=CA_POOL \
       [--lifetime=CERTIFICATE_LIFETIME] \
       [--rotation-window-percentage=ROTATION_WINDOW_PERCENTAGE] \
       [--key-algorithm=KEY_ALGORITHM]
    

    以下を置き換えます。

    • ISSUANCE_CONFIG_NAME: 証明書発行構成リソースの一意の名前。
    • CA_POOL: この証明書発行の構成に割り当てる CA プールの完全なリソースパスと名前。
    • CERTIFICATE_LIFETIME: 証明書の有効期間(日数)。有効な値は、標準の期間形式で 21 ~ 30 日です。デフォルト値は 30 日(30D)です。この設定は省略可能です。

    • ROTATION_WINDOW_PERCENTAGE: 更新がトリガーされる証明書の存続期間の割合。この設定は省略可能です。

      デフォルト値は 66% です。証明書の更新が、証明書の発行の 7 日以上後、期限切れの 7 日以上前に行われるように、証明書の有効期間を基準にしてローテーション ウィンドウの割合を設定する必要があります。

    • KEY_ALGORITHM: 秘密鍵の生成に使用される暗号化アルゴリズム。有効な値は ecdsa-p256 または rsa-2048 です。 デフォルト値は rsa-2048 です。この設定は省略可能です。

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

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

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

gcloud

グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、またはグローバル外部プロキシ ネットワーク ロードバランサの場合:

次のコマンドを実行します。

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

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

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

クロスリージョンの内部アプリケーション ロードバランサの場合:

次のコマンドを実行します。

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

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

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

API

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

グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、またはグローバル外部プロキシ ネットワーク ロードバランサの場合:

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 プールを参照する証明書発行構成リソースの名前。

クロスリージョンの内部アプリケーション ロードバランサの場合:

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

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

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

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

証明書が有効であることを確認する

次のコマンドを使用して、証明書をロードバランサにデプロイする前に、証明書自体が有効であることを確認します。証明書の状態が ACTIVE に変わるまで数分かかることがあります。

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/certificateIssuanceConfigs/myIssuanceConfig
  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'

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

このセクションでは、Google マネージド証明書をロードバランサにデプロイするために必要な手順を説明します。

このセクションのタスクに進む前に、CA Service と Certificate Manager の統合を構成するおよびCA Service インスタンスによって発行された Google マネージド証明書を作成するに一覧表示されているタスクを完了していることを確認してください。

ロードバランサの種類に応じて、次のように証明書をデプロイできます。

証明書マップを使用して証明書をデプロイする

このセクションでは、証明書マップを使用して証明書をデプロイする手順について説明します。

CertificateMap を作成する

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

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

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

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

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

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

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

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

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 コンソールで、[ターゲット プロキシ] ページに移動します。

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

  2. ターゲット プロキシの名前をメモします。

  3. 証明書プロキシをターゲット プロキシに添付します。

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

    以下を置き換えます。

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

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

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

証明書をプロキシに直接添付するには、次のコマンドを実行します。

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

以下を置き換えます。

  • PROXY_NAME: プロキシの一意の名前。
  • URL_MAP: URL マップの名前。 ロードバランサの作成時に URL マップを作成しました。
  • CERTIFICATE_NAME: 証明書の名前。

トラブルシューティング

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

クリーンアップ

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

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

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

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

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

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

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

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

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

    gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
    

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

  6. CA プールの削除の説明に沿って CA プールを削除します。

    証明書発行の構成で参照されている CA プールで最後に有効にした CA を無効にする場合や、参照される CA プールを完全に削除する場合は、まず、その CA プールを参照するすべての証明書発行の構成を削除する必要があります。

次のステップ