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


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

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

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

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

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

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

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

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

目標

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

  • Certificate Manager を使用して、CA Service で 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 ターゲット プロキシの作成と管理に必要です。
    • 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 マネージド証明書を次のように作成します。

コンソール

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

    Certificate Manager に移動

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

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

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

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

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

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

  7. [範囲] で、次のオプションのいずれかを選択します。

    1. デフォルト: グローバル外部アプリケーション ロードバランサ従来のアプリケーション ロードバランサグローバル外部プロキシ ネットワーク ロードバランサのデフォルトを選択します。
    2. All-regions: クロスリージョン内部アプリケーション ロードバランサのすべてのリージョンを選択します。
  8. [証明書の種類] で [Google 管理の証明書を作成する] を選択します。

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

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

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

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

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

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

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

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

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 Service インスタンスによって発行された証明書に関連する問題をご覧ください。

クリーンアップ

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

  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 マネージド証明書を削除します。

    コンソール

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

      Certificate Manager に移動

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

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

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

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

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

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

    コンソール

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

      Certificate Manager に移動

    2. [発行の構成] タブで、発行構成のチェックボックスをオンにします。

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

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

    gcloud

     gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
     

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

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

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

次のステップ