ロードバランサのマネージド ワークロード ID を作成する

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

マネージド ワークロード ID を使用してバックエンド mTLS を構成するには、構成済みの Workload Identity プールが必要です。

構成済みの Workload Identity プールがない場合は、Workload Identity プールを設定してから、マネージド ワークロード ID をロードバランサのバックエンド サービスに接続する必要があります。

  1. Workload Identity プールを設定します。

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

このドキュメントの例では、新しい Workload Identity プールを設定し、マネージド ワークロード ID をロードバランサのバックエンド サービスに接続するプロセスについて説明します。

既存の Workload Identity プールがすでにある場合は、次のアプローチに従うことができます。

  1. ロードバランサのバックエンド サービス リソースの新しい構成証明ポリシーを追加して、Workload Identity プールに参加させることができます。

  2. マネージド ワークロード ID をロードバランサのバックエンド サービスに接続します。

始める前に

  1. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

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

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

  4. IAM、Certificate Authority Service、Compute Engine、Certificate Manager、ネットワーク セキュリティの API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    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 は、Google Cloud プロジェクトの名前に置き換えます。

  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" \
    --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 を作成するをご覧ください。

Workload Identity プールを構成する

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

ワークロード 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 を作成する

gcloud 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)を作成します。

cat << EOF > cic.json
{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      "lifetime": "CERTIFICATE_LIFETIME",
      "rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE,
      "keyAlgorithm": "ALGORITHM"
  }
}
EOF

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

  • 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 時間になります。