マネージド ワークロード ID を使用してバックエンド mTLS を設定する

このドキュメントでは、ロードバランサのバックエンド サービスでマネージド ワークロード ID を構成する方法について説明します。マネージド ID を割り当てると、ロードバランサとそのバックエンドは、バックエンド mTLS を使用して相互に認証できます。

マネージド ワークロード ID を使用してバックエンド mTLS を構成するには、次の操作を行う必要があります。

  1. マネージド ワークロード ID の X.509 証明書を発行するように Certificate Authority Service 認証局(CA)プールを構成します。
  2. 名前空間、マネージド ID、構成証明ポリシー、インライン証明書発行構成リソース、インライン信頼構成リソースを使用して Workload Identity プールを作成し、信頼ドメインを構成します。1
  3. インライン証明書発行構成を使用して、CA を Workload Identity プールにバインドします。
  4. CA プールからの証明書のリクエストをマネージド ワークロード ID に許可します。
  5. ロードバランサを作成し、マネージド ID をバックエンド サービスに接続します。

1 ロードバランサとそのバックエンドが異なる信頼ドメインにある場合にのみ、インライン信頼構成を作成する必要があります。この例では、ロードバランサとバックエンドの両方が同じ信頼ドメインの一部であるため、インライン信頼構成リソースの構成は省略可能です。

バックエンドのマネージド ID を作成するには、 マネージド ワークロード ID の概要をご覧ください。

始める前に

  1. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. マネージド ワークロード ID を使用したバックエンド mTLS の概要のドキュメントを確認します。

  3. Certificate Authority Service を使用した証明書の発行について理解する。

  4. Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable iam.googleapis.com privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com  networksecurity.googleapis.com

  5. 許可リストに追加されたプロジェクトを課金と割り当てに使用するように Google Cloud CLI を構成します。

    gcloud config set billing/quota_project PROJECT_ID
    

    PROJECT_ID は、マネージド ワークロード ID(プレビュー版)の許可リストに追加されたプロジェクトの ID に置き換えます。

  6. バックエンドのマネージド ID を作成します。詳細については、マネージド ワークロード ID の概要をご覧ください。

必要なロール

マネージド ワークロード ID を作成し、マネージド ワークロード ID 証明書をプロビジョニングするために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

マネージド ワークロード ID の証明書を発行するように CA Service を構成する

CA プールを使用して、ルート CA を設定できます。CA プールは、マネージド ワークロード ID に X.509 証明書を発行します。

ルート CA プールを作成する

gcloud privateca pools create コマンドを使用して、エンタープライズ ティアにルート CA プールを作成します。この階層は、有効期間が長く、少量の証明書の発行に適しています。

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=PROJECT_ID \
    --tier=enterprise

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

  • ROOT_CA_POOL_ID: ルート CA プールの一意の ID

  • REGION: ルート CA プールが配置されているリージョン

  • PROJECT_ID: プロジェクト ID

CA プールの詳細については、CA プールを作成するをご覧ください。

ルート CA を作成する

gcloud privateca roots create コマンドを使用して、ルート CA プールにルート CA を作成します。

ルート CA を作成するには、次のコマンドを実行します。

gcloud privateca roots create ROOT_CA_ID \
    --pool=ROOT_CA_POOL_ID \
    --subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
    [--key-algorithm="KEY_ALGORITHM"] \
    --max-chain-length=1 \
    --location=REGION \
    --project=PROJECT_ID \
    --auto-enable

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

  • ROOT_CA_ID: ルート CA の一意の名前。CA 名は 64 文字以下で、大文字と小文字の英数字、アンダースコア、ハイフンのみを使用できます。CA 名はリージョン内で一意である必要があります。
  • ROOT_CA_POOL_ID: ルート CA プールの ID。
  • ROOT_CA_CN: ルート CA の共通名。
  • ROOT_CA_ORGANIZATION: ルート CA の組織。
  • KEY_ALGORITHM: Cloud KMS 鍵の作成に使用するアルゴリズム。このフラグは省略可能です。このフラグを含めない場合、鍵アルゴリズムはデフォルトで rsa-pkcs1-4096-sha256 になります。
  • REGION: ルート CA プールが配置されているリージョン。
  • PROJECT_ID: プロジェクト ID。

ルート CA の詳細については、ルート CA を作成するをご覧ください。

マネージド ワークロード ID を作成する

マネージド ワークロード ID を使用すると、 Google Cloud は Certificate Authority Service から X.509 証明書を自動的にプロビジョニングして管理できます。ワークロード ID は、ワークロード ID プール内で定義され、名前空間と呼ばれる管理境界に編成されます。

ワークロード ID プールを作成する

マネージド ワークロード ID を作成するには、TRUST_DOMAIN モードでプールを作成する必要があります。マネージド ワークロード ID の Workload Identity プールを作成するには、gcloud iam workload-identity-pools create コマンドを使用します。

gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

WORKLOAD_IDENTITY_POOL_ID は、プールの固有 ID に置き換えます。ID は 4 ~ 32 文字で、小文字の英数字とダッシュのみを使用できます。先頭と末尾は英数字にする必要があります。ワークロード ID プールを作成した後に、その ID を変更することはできません。

Workload Identity プールが TRUST_DOMAIN モードで作成されたことを確認するには、gcloud iam workload-identity-pools describe コマンドを使用します。

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global"

出力は次のようになります。

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

この出力には次の値が含まれます。

  • PROJECT_NUMBER:Google Cloud プロジェクトのプロジェクト番号
  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID

名前空間の作成

gcloud iam workload-identity-pools namespaces create コマンドを使用すると、ワークロード ID プールに名前空間を作成できます。

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

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

  • NAMESPACE_ID: 名前空間の一意の ID。ID は 2 ~ 63 文字で、小文字の英数字とダッシュのみを使用できます。先頭と末尾は英数字にする必要があります。名前空間を作成した後に、その ID を変更することはできません。
  • WORKLOAD_IDENTITY_POOL_ID: 前に作成した Workload Identity プール ID。

マネージド ワークロード ID を作成する

gloud iam workload-identity-pools managed-identities create コマンドを使用すると、Workload Identity プールにマネージド ワークロード ID の名前空間を作成できます。

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

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

  • MANAGED_IDENTITY_ID: マネージド ID の一意の ID。ID は 2 ~ 63 文字で、小文字の英数字とダッシュのみを使用できます。先頭と末尾は英数字にする必要があります。マネージド ワークロード ID を作成した後に、その ID を変更することはできません。
  • NAMESPACE_ID: 前に作成した名前空間 ID。
  • WORKLOAD_IDENTITY_POOL_ID: 前に作成した Workload Identity プール ID。

マネージド ワークロード ID は SPIFFE 識別子で、次のような形式になります。

spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

証明書ポリシーを作成する

この例では、構成証明ポリシーに、バックエンド サービスが特定のプロジェクトの一部であるかどうかを確認する構成証明ルールが含まれています。構成証明ポリシーの検証に合格すると、IAM は Certificate Authority Service からマネージド ID の X.509 証明書をリクエストします。

証明書ポリシーを作成するには、次のコマンドを実行して証明書ルールを追加します。

gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
    --google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
    --location=global

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

  • MANAGED_IDENTITY_ID: マネージド ID の一意の ID。ID は 2 ~ 63 文字で、小文字の英数字とダッシュのみを使用できます。先頭と末尾は英数字にする必要があります。マネージド ワークロード ID を作成した後に、その ID を変更することはできません。
  • NAMESPACE_ID: 前に作成した Namespace ID。
  • WORKLOAD_IDENTITY_POOL_ID: 前に作成した Workload Identity プール ID。
  • PROJECT_NUMBER: Google Cloud プロジェクトのプロジェクト番号。

インライン証明書発行の構成を作成する

CA を Workload Identity プールにバインドするには、Workload Identity プールにインライン証明書発行の構成が必要です。

インライン証明書発行構成を構成するには、JSON 形式の構成ファイル(cic.json)を作成します。ファイルの形式は次のようになります。

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      ["lifetime": "CERTIFICATE_LIFETIME"],
      ["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
      ["keyAlgorithm": "ALGORITHM"]
  }
}

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

  • REGION: CA が配置されているリージョン。

  • PROJECT_NUMBER: プロジェクト番号。PROJECT_ID 変数で指定されたプロジェクトからプロジェクト番号を取得するには、次のコマンドを実行します。

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  • ROOT_CA_POOL_ID: ルート CA プールの ID。

  • CERTIFICATE_LIFETIME: CA プールによって発行されたワークロード証明書の有効期間(秒単位)。例: 86400 秒(24 時間)。CERTIFICATE_LIFETIME は 24 時間~ 30 日の範囲の値にする必要があります。CERTIFICATE_LIFETIME が指定されていない場合、証明書の有効期間はデフォルトで 24 時間になります。CERTIFICATE_LIFETIME は省略可能です。

  • ROTATION_WINDOW_PERCENTAGE: 更新がトリガーされる証明書の存続期間の割合。ROTATION_WINDOW_PERCENTAGE の値は 50 ~ 80 の範囲で指定する必要があります。デフォルト値は 50 です。ROTATION_WINDOW_PERCENTAGE は任意です。

  • ALGORITHM: 秘密鍵の生成に使用される暗号化アルゴリズム。ALGORITHM の有効な値は、ECDSA_P256(デフォルト)、ECDSA_P384RSA_2048RSA_3072RSA_4096 です。ALGORITHM は省略可能です。

インライン信頼構成を作成する

この構成例では、ロードバランサとバックエンドの両方が同じトラスト ドメインの一部であり、同じルート証明書を共有しています。そのため、インライン信頼構成の構成は任意です。共通のルート オブ トラストは、信頼チェーンを構築し、信頼ドメイン内のワークロードの ID を検証するために使用されます。

マネージド ワークロード ID リソース階層。
マネージド ワークロード ID リソース階層(クリックして拡大)。

デフォルトでは、同じ信頼ドメイン内のワークロードは、マネージド ワークロード ID を使用して相互に認証できます。異なる信頼ドメインにあるワークロードを相互に認証する場合は、Workload Identity プールで信頼関係を明示的に宣言する必要があります。これを行うには、他の信頼ドメインの証明書を認識して受け入れるインライン信頼構成を作成します。

インライン信頼構成を作成する手順は次のとおりです。

  1. 証明書をダウンロードします。

    gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \
        --output-file=CERTIFICATE_PATH \
        --location=REGION
    

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

    • ROOT_CA_POOL_ID: ルート CA プールの ID
    • CERTIFICATE_PATH: PEM エンコードされた証明書を出力するパス
    • REGION: ルート CA プールのリージョン
  2. PEM 形式の証明書を含む、インライン信頼構成を含む JSON 形式の構成ファイル(tc.json)を作成します。

    ファイルは次のようになります。

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_NAME1": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          },
          "TRUST_DOMAIN_NAME2": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

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

    • TRUST_DOMAIN_NAME: 信頼ドメインは、別の(または同じ)Workload Identity プールの信頼ドメインを含む、任意の信頼ドメイン(「example.com」など)にできます。

      ワークロード ID プールの信頼ドメインの場合、信頼ドメイン名は次の形式になります。

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

      この形式では、次のように置き換えます。

      • WORKLOAD_IDENTITY_POOL_ID: ワークロード ID プールの ID
      • PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号
    • CERTIFICATE_MATERIAL: 信頼ドメインで証明書を発行するために信頼されている、PEM 形式の CA 証明書。PEM 形式の証明書ファイルを 1 行の文字列にエンコードするには、次のコマンドを使用します。

      cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
      

CA を Workload Identity プールにバインドする

CA 階層を作成し、CA の証明書発行構成を作成したら、CA を Workload Identity プールにバインドできます。CA を Workload Identity プールにバインドするには、CA の証明書発行の構成を使用して Workload Identity プールを更新する必要があります。その後、プールが更新されたことを確認します。

Workload Identity プールを更新する

CA を Workload Identity プールにバインドするには、CA の証明書発行の構成を使用して Workload Identity プールを更新します。その後、プールが更新されたことを確認します。

プールを更新するには、次のコマンドを実行します。

gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    [--inline-trust-config-file=TC_JSON_FILE_PATH] \
    --project=PROJECT_ID

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

  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プール ID。

  • CIC_JSON_FILE_PATH: 前に作成したインライン証明書発行構成の JSON 形式の構成ファイル(cic.json)のパス。

  • TC_JSON_FILE_PATH: 以前に作成したインライン信頼構成の JSON 形式の構成ファイル(tc.json)のパス。ワークロードが異なる信頼ドメイン間で認証を行う場合は、このファイルを指定する必要があります。それ以外の場合は、--inline-trust-config を省略できます。

Workload Identity プールが更新されたことを確認する

証明書発行の構成と信頼構成とともに Workload Identity プールが更新されたことを確認するには、次のコマンドを実行します。

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --project=PROJECT_ID

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

  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プール ID。

  • PROJECT_ID: プロジェクト ID

出力は次のようになります。

inlineCertificateIssuanceConfig:
    caPools:
      REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
    keyAlgorithm: ALGORITHM
    lifetime: CERTIFICATE_LIFETIME
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
    additionalTrustBundles:
      TRUST_DOMAIN_NAME1:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL1
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL2
            -----END CERTIFICATE-----
      TRUST_DOMAIN_NAME2:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL3
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL4
            -----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

この出力には次の値が含まれます。

  • PROJECT_NUMBER: プロジェクト番号
  • REGION: ルート CA プールが配置されているリージョン
  • ROOT_CA_POOL_ID: ルート CA プールの ID
  • ALGORITHM: 秘密鍵の生成に使用される暗号化アルゴリズム
  • CERTIFICATE_LIFETIME: CA プールによって発行されたワークロード証明書の有効期間(秒単位)
  • ROTATION_WINDOW_PERCENTAGE: 更新がトリガーされる証明書の存続期間の割合。
  • TRUST_DOMAIN_NAME: 信頼ドメインは、別の(または同じ)Workload Identity プールの信頼ドメインを含む、任意の信頼ドメイン(「example.com」など)にできます。
  • CERTIFICATE_MATERIAL: 信頼ドメインで証明書を発行するために信頼されている PEM 形式の CA 証明書
  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID

出力に inlineCertificateIssuanceConfig または inlineTrustConfig が存在しない場合は、課金と割り当てに正しいプロジェクトを使用するように gcloud CLI が正しく構成されていることを確認します。gcloud CLI の新しいバージョンへの更新が必要になることがあります。

CA プールの証明書のリクエストをマネージド ワークロード ID に許可する

CA を Workload Identity プールにバインドしたら、マネージド ワークロード ID に CA プールからの証明書のリクエストを許可する必要があります。

  1. 信頼ドメインに CA サービス ワークロード証明書リクエスト元ロールroles/privateca.workloadCertificateRequester)を付与します。このロールは、CA Service 証明書チェーンから証明書をリクエストする信頼ドメインを承認します。

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

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

    • ROOT_CA_POOL_ID: ルート CA プールの ID
    • REGION: ルート CA プールのリージョン
    • PROJECT_NUMBER: プロジェクト番号

      PROJECT_ID から PROJECT_NUMBER を取得するには、次のコマンドを実行します。

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID

    • PROJECT_ID: プロジェクト ID

  2. 信頼ドメインに CA Service プール読み取りロールroles/privateca.poolReader)を付与します。このロールにより、CA の証明書チェーンからの署名付き X.509 証明書の取得が信頼ドメインに許可されます。

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

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

    • ROOT_CA_POOL_ID: ルート CA プールの ID
    • REGION: ルート CA プールのリージョン
    • PROJECT_NUMBER: プロジェクト番号
    • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID
    • PROJECT_ID: プロジェクト ID

ロードバランサを作成し、マネージド ID をバックエンド サービスに割り当てる

マネージド ID を割り当てることができるのは、バックエンド サービスの作成時のみです。

このセクションの手順は、ロードバランサのバックエンド サービスにマネージド ID を割り当てる場合にのみ該当します。これは、ロードバランサのバックエンド構成の一部です。

グローバル外部アプリケーション ロードバランサ ロードバランサを設定するには、VM インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを設定するの手順に沿って操作します。ロードバランサのバックエンド サービスを設定する段階では、次の操作も行う必要があります。

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [バックエンドの構成] セクションで、バックエンド サービスを作成するための関連する詳細情報を追加します。

  3. [高度な構成] セクションを開きます。

  4. [バックエンド認証] セクションで、[マネージド ID] オプションを選択します。

  5. マネージド ID をバックエンド サービスに割り当てるには、[マネージド ID] フィールドに、前に作成したマネージド ワークロード ID を入力します。

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

  7. ロードバランサを設定するで説明されている手順に沿って、ロードバランサの構成を完了します。

gcloud

  1. マネージド ID をバックエンド サービスに割り当てるには、gcloud beta compute backend-services create コマンドを使用するときに --identity フラグを追加します。

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --health-checks=HEALTH_CHECK_NAME \
        --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \
        --global
    

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

    • BACKEND_SERVICE_NAME: バックエンド サービスの名前
    • HEALTH_CHECK_NAME: ヘルスチェックの名前
    • WORKLOAD_IDENTITY_POOL_ID: ワークロード ID プールの ID
    • PROJECT_NUMBER: プロジェクト番号
    • NAMESPACE_ID: Namespace ID
    • MANAGED_IDENTITY_ID: マネージド ID の ID

自動作成されたリソース

ロードバランサのバックエンド サービスでマネージド ID を構成すると、マネージド ワークロード ID によって次のリソースが自動的に作成されます。

  • バックエンド認証構成: ロードバランサのバックエンド サービスに接続されている
  • Certificate Manager のマネージド ID 証明書: バックエンド認証構成に関連付けられている
  • Certificate Manager の信頼構成: バックエンド認証構成に関連付けられている

以降のセクションでは、自動的に作成されたリソースが構成されているかどうかを確認するために、構成を確認する方法について説明します。

設定を確認する

構成を検証して、自動的に作成されたリソースが構成されているかどうかを確認します。

自動的に作成されたリソースには mi という接頭辞が付いています。これは、リソースがマネージド ワークロード ID によって作成されたことを示します。

バックエンド認証構成とマネージド ID の作成を確認する

バックエンド認証構成とマネージド ID の作成を確認するには、gcloud beta compute backend-services describe コマンドを使用してバックエンド サービスを記述します。

gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global

出力は次のようになります。

affinityCookieTtlSec: 0
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2025-11-06T02:15:43.680-08:00'
description: ''
enableCDN: false
fingerprint: lTZwas8aylg=
healthChecks:
- https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
id: '719352032'
kind: compute#backendService
loadBalancingScheme: EXTERNAL_MANAGED
name: BACKEND_SERVICE_NAME
port: 80
portName: PORT_NAME
protocol: HTTPS
selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
sessionAffinity: NONE
timeoutSec: 30
tlsSettings:
  authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

この出力には次の値が含まれます。

  • PROJECT_ID: プロジェクト ID
  • HEALTH_CHECK_NAME: ヘルスチェックの名前
  • BACKEND_SERVICE_NAME: バックエンド サービスの名前
  • PORT_NAME: ポート名
  • REGION: ルート CA プールが配置されているリージョン
  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID
  • PROJECT_NUMBER: プロジェクト番号
  • NAMESPACE_ID: Namespace ID
  • MANAGED_IDENTITY_ID: マネージド ID の ID

バックエンド認証構成が自動的に作成され、backendService.tlsSettings.authenticationConfig フィールドに接続されます。接頭辞 mi で始まるバックエンド認証構成は、次のセクションで MI_BACKEND_AUTHENTICATION_CONFIG_ID と呼ばれます。

マネージド ワークロード ID も backendService.tlsSettings.identity フィールドに接続されます。次の形式となります。

//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Certificate Manager のマネージド ID 証明書と Certificate Manager の信頼構成の作成を確認する

Certificate Manager のマネージド ID 証明書と Certificate Manager の信頼構成がバックエンド認証構成リソースに接続されていることを確認するには、gcloud network-security backend-authentication-configs describe コマンドを使用します。

gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
    --location=global

出力は次のようになります。

clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
createTime: '2025-11-06T10:15:56.237734973Z'
etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs
name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
updateTime: '2025-11-06T10:16:01.964275141Z'

clientCertificatetrustConfig は、マネージド ワークロード ID によって自動的に作成され、バックエンド認証構成リソースに接続されます。

接頭辞 mi で始まる clientCertificate は、次のセクションで MI_CLIENT_CERTIFICATE_ID と呼ばれます。

接頭辞 mi で始まる trustConfig は、次のセクションで MI_TRUST_CONFIG_ID と呼ばれます。

Certificate Manager の証明書がマネージド ID 証明書であることを確認する

Certificate Manager のマネージド ID 証明書の詳細を表示するには、gcloud certificate-manager certificates describe コマンドを使用します。

gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID

出力は次のようになります。

createTime: '2025-11-06T10:15:46.187892797Z'
expireTime: '2025-11-07T22:55:47Z'
extendedKeyUsage:
  clientAuth: true
managedIdentity:
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
  state: ACTIVE
name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----
scope: CLIENT_AUTH
updateTime: '2025-11-06T10:15:49.427339950Z'
usedBy:
- name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd

この出力には次の値が含まれます。

  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID
  • PROJECT_NUMBER: プロジェクト番号
  • NAMESPACE_ID: Namespace ID
  • MANAGED_IDENTITY_ID: マネージド ID の ID
  • CERTIFICATE_MATERIAL: PEM エンコード形式の X.509-SVID

Certificate Manager マネージド ID 証明書には managedIdentity プロパティがあり、マネージド ID 証明書として識別されます。Certificate Manager のマネージド ID 証明書リソースは、X.509-SVID を PEM でエンコードされた形式で保存します。

Certificate Manager マネージド ID 証明書のスコープは CLIENT_AUTH です。これは、この証明書がバックエンド mTLS でクライアント証明書として使用されることを示します。

SPIFFE ID が X.509-SVID の SAN の一部であることを確認する

X.509-SVID には、SAN フィールドの URI としてエンコードされた SPIFFE ID が含まれています。この SPIFFE ID は、Workload Identity プールのマネージド ID に対応しています。

証明書の人間が読める形式を出力するには、次のコマンドを実行します。

openssl x509 -text -noout \
<<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"

出力は次のようになります(省略)。

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = example.com, CN = Example CA
        Validity
            Not Before: Nov  6 10:15:48 2025 GMT
            Not After : Nov  7 10:15:47 2025 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
        X509v3 extensions:
            X509v3 Subject Alternative Name: critical
                URI:spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

この出力には次の値が含まれます。

  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID
  • PROJECT_NUMBER: プロジェクト番号
  • NAMESPACE_ID: Namespace ID
  • MANAGED_IDENTITY_ID: マネージド ID の ID

Certificate Manager の信頼構成に spiffeTrustStore フィールドが含まれていることを確認する

Certificate Manager の信頼構成には、spiffeTrustStores というフィールドが含まれています。spiffeTrustStores フィールドには、ワークロード ID プールの信頼ドメイン(出力では WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog で表される)に関連付けられた信頼バンドルと、ワークロード ID プールのインライン信頼構成の additionalTrustBundles フィールドで指定された追加の信頼バンドルが含まれます。

Certificate Manager の信頼構成の詳細を表示するには、gcloud certificate-manager trust-configs describe コマンドを使用します。

gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID

MI_TRUST_CONFIG_ID は、マネージド ID によって自動的に作成された信頼構成に置き換えます。

次の出力例では、ホスト example.com は信頼が拡張される追加の信頼ドメインです。

createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
  example.com:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
  WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'

この出力には次の値が含まれます。

  • PROJECT_ID: プロジェクト ID
  • CERTIFICATE_MATERIAL: 信頼ドメインで証明書を発行するために信頼されている PEM 形式の CA 証明書
  • WORKLOAD_IDENTITY_POOL_ID: Workload Identity プールの ID
  • PROJECT_NUMBER: プロジェクト番号
  • MANAGED_IDENTITY_ID: マネージド ID の ID

Certificate Manager の信頼構成の詳細については、Certificate Manager の信頼構成をご覧ください。

次のステップ