マネージド ワークロード ID 認証を構成する

このページでは、gcloud CLI を使用してマネージド ワークロード ID を構成する方法について説明します。

このページでは、Compute Engine のマネージド ワークロード ID の自動プロビジョニングとライフサイクル管理を設定する方法について説明します。Certificate Authority Service を使用して証明書を発行するように認証局(CA)プールを構成します。CA Service は可用性の高いスケーラブルな Google Cloud サービスで、これにより CA サービスのデプロイ、管理、セキュリティが自動化され、簡素化されます。構成された CA プールの X.509 認証情報を使用してプロビジョニングされる仮想マシン インスタンス(VM)を作成できます。これらの認証情報を使用して、ワークロード間で mTLS 接続を確立できます。

始める前に

  1. Create or select a Google Cloud project.

    • 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(プレビュー版)へのアクセスをリクエストする

  3. マネージド ワークロード ID について理解する。

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

  5. マネージド ワークロード ID を使用して Compute Engine ワークロードを認証する方法について理解する。

  6. Enable the IAM and Certificate Authority Service APIs:

    gcloud services enable iam.googleapis.com privateca.googleapis.com

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

    gcloud config set billing/quota_project PROJECT_ID
    

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

必要なロール

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

ロールの付与の詳細については、アクセスの管理をご覧ください。

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

また、IAM オーナー(roles/owner)の基本ロールには、マネージド ワークロード ID を構成する権限も含まれています。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。

概要

アプリケーションでマネージド ワークロード ID を使用するには、次の操作を行う必要があります。

  1. セキュリティ管理者:

  2. Compute 管理者:

    Compute Engine で実行されているワークロードのマネージド ワークロード ID を有効にします。

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

マネージド ワークロード ID により、Google Cloud はワークロード ID プール ID の認証情報をワークロードに自動的にプロビジョニングします。ワークロード ID は、ワークロード ID プール内で定義され、名前空間と呼ばれる管理境界に編成されます。

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

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

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

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

  • POOL_ID: プールの一意の ID。ID は 4~32 文字で、小文字の英数字とダッシュのみを使用できます。先頭と末尾は英数字にします。ワークロード ID プールを作成した後に、その ID を変更することはできません。

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

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

コマンドの出力は次のようになります。

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

コマンド出力に mode: TRUST_DOMAIN が存在しない場合は、プロジェクトがマネージド ワークロード ID(プレビュー版)の許可リストに追加されていることと、課金と割り当てに正しいプロジェクトを使用するように gcloud CLI が正しく構成されていることを確認します。gcloud CLI の新しいバージョンへの更新が必要になることがあります。

名前空間を作成する

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

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

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

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

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

workload-identity-pools managed-identities create コマンドを使用すると、ワークロード ID プールにマネージド ワークロード ID を作成できます。

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

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

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

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

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

ワークロード証明書ポリシーを定義する

ワークロード証明書ポリシーにより、信頼できるワークロードのみがマネージド ID を使用できるようになります。認証情報を発行するには、ワークロードがマネージド ワークロード ID を使用できるようにする必要があります。

これを行うには、ユーザー管理のサービス アカウントを作成し、ワークロードに接続します。ワークロードは、相互 TLS(mTLS)を使用して他のワークロードを認証する際に、マネージド ワークロード ID を ID として使用します。ワークロードは、他の Google Cloud サービスとリソースにアクセスするときに、その ID としてサービス アカウントを使用します。

service-accounts create コマンドを使用すると、ワークロード ID プールにマネージド ワークロード ID を作成できます。

接続するサービス アカウントを作成するには、次のコマンドを実行します。

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

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

  • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。

サービス アカウントが接続されているワークロードにマネージド ワークロード ID の認証情報を発行できるようにワークロード証明書ポリシーを作成するには、workload-identity-pools managed-identities workload-sources create コマンドを使用します。

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors "compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity MANAGED_IDENTITY_ID \
    --namespace NAMESPACE_ID \
    --workload-identity-pool POOL_ID \
    --location "global"

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

  • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
  • WORKLOAD_PROJECT_NUMBER: ワークロードを含むプロジェクトのプロジェクト番号。このポリシーにより、このプロジェクト内のワークロードはマネージド ワークロード ID を使用できるようになります。
  • PROJECT_ID: サービス アカウントを含むプロジェクトの ID。
  • MANAGED_IDENTITY_ID: マネージド ID の一意の ID。
  • NAMESPACE_ID: 前に作成した名前空間 ID。
  • POOL_ID: 前に作成した Workload Identity プールの ID。

特定の Workload Identity プールに対して、ワークロード プロジェクト用の単一属性セレクタを最大で 50 個定義できます。

証明書ポリシーを更新または削除する方法については、次のコマンドを実行します。

gcloud iam workload-identity-pools managed-identities workload-sources --help

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

Certificate Authority Service プールを使用して、ルート認証局と下位認証局(CA)の推奨設定を作成します。下位 CA プールが VM に X.509 ワークロード ID 証明書を発行します。

CA プールを構成したら、CA プールに対して署名付き証明書をリクエストして受信することをマネージド ワークロード ID に許可します。

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

Certificate Authority Service との Google Cloud CLI インターフェースを使用して、ルート CA プールを構成します。

gcloud

ルート CA プールを作成します。

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

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

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

    • ROOT_CA_POOL_ID: ルート CA プールの一意の ID。ID は 64 文字以下で、大文字と小文字の英数字、アンダースコア、ハイフンのみを使用できます。プール ID はリージョン内で一意である必要があります。
    • REGION: ルート CA プールが配置されているリージョン。

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

  2. gcloud privateca roots create コマンドを使用して、ルート CA プールにルート CA を作成します。これがルート CA プールの唯一の 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="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

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

    • ROOT_CA_ID: ルート CA の一意の名前。CA 名は 64 文字以下で、大文字と小文字の英数字、アンダースコア、ハイフンのみを使用できます。CA 名はリージョン内で一意である必要があります。
    • ROOT_CA_POOL_ID: ルート CA プールの ID。
    • ROOT_CA_CN: ルート CA の共通名。
    • ROOT_CA_ORGANIZATION: ルート CA の組織。
    • REGION: ルート CA プールが配置されているリージョン。

    詳細については、ルート認証局を作成するをご覧ください。CA の subject フィールドの詳細については、サブジェクトをご覧ください。

  3. 省略可: 上記の手順を繰り返して、ルート CA プールに追加のルート CA を作成します。これは、ルート CA のローテーションに役立ちます。

下位 CA を構成する

Certificate Authority Service との Google Cloud CLI インターフェースを使用して、下位 CA プールと下位 CA を作成します。

証明書発行のシナリオが複数ある場合は、それぞれのシナリオに下位 CA を作成できます。また、CA プールに複数の下位 CA を追加すると、証明書リクエストのロード バランシングを改善できます。

gcloud

gcloud privateca pools create コマンドを使用して、下位 CA プールを作成します。

  1. DevOps 階層に下位 CA プールを作成します。これは、有効期間の短い証明書を大量に発行する場合に適しています。

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

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

    • SUBORDINATE_CA_POOL_ID: 下位 CA プールの一意の ID。ID は 64 文字以下で、小文字と大文字の英数字、アンダースコア、ハイフンのみを使用できます。プール ID はリージョン内で一意である必要があります。
    • REGION: 下位 CA プールを作成するリージョン。

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

  2. gcloud privateca subordinates create コマンドを使用して、下位 CA プールに下位 CA を作成します。デフォルトの構成ベースの発行モードは変更しないでください。

    たとえば、次のようなコマンドを使用して下位 CA を作成できます。

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

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

    • SUBORDINATE_CA_ID: 下位 CA の一意の名前。名前は 64 文字以下で、小文字と大文字の英数字、アンダースコア、ハイフンのみを使用できます。プール名はリージョン内で一意である必要があります。
    • SUBORDINATE_CA_POOL_ID: 下位 CA プールの名前。
    • REGION: 下位 CA プールが配置されているリージョン。
    • ROOT_CA_POOL_ID: ルート CA プールの ID。
    • REGION: ルート CA プールのリージョン。
    • SUBORDINATE_CA_CN: 下位 CA の共通名。
    • SUBORDINATE_CA_ORGANIZATION: 下位 CA 発行組織の名前。

    詳細については、CA プールの作成をご覧ください。CA の subject フィールドの詳細については、サブジェクトをご覧ください。

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

マネージド ワークロード ID には、CA Service に証明書をリクエストして公開証明書を取得する権限が必要です。

gcloud

  1. マネージド ワークロード ID に、各下位 CA プールに対する CA サービス ワークロード証明書リクエスト元(roles/privateca.workloadCertificateRequesterの IAM ロールを付与します。次の gcloud privateca pools add-iam-policy-binding コマンドは、CA Service 証明書チェーンの証明書のリクエストをマネージド ワークロード ID に許可します。

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

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

    • SUBORDINATE_CA_POOL_ID: 下位 CA プールの ID。
    • REGION: 下位 CA プールのリージョン。
    • PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。
    • POOL_ID: Workload Identity プールの ID。
  2. 下位 CA プールに対する CA サービスプール読み取り(roles/privateca.poolReaderの IAM ロールをマネージド ワークロード ID に付与します。これにより、CA の証明書チェーンからの署名付き X.509 証明書の取得がマネージド ワークロード ID に許可されます。

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

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

    • SUBORDINATE_CA_POOL_ID: 下位 CA プールの ID。
    • REGION: 下位 CA プールのリージョン。
    • PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。
    • POOL_ID: Workload Identity プールの ID。

信頼と証明書発行の構成を定義する

この情報を使用して、VM の作成時にパートナー データとしてアップロードされる JSON ファイルを作成します。

証明書発行の構成を定義する

Compute Engine のマネージド ワークロード ID を有効にするには、次の証明書発行構成が必要です。

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": "DURATION",
  "rotation_window_percentage": "ROTATION_WINDOW_PERCENTAGE"
}

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

  • PROJECT_NAME: CA プールを含むプロジェクトの名前
  • REGION: 下位 CA プールが配置されているリージョン
  • SUBORDINATE_CA_POOL_ID: 下位 CA プールの名前
  • ALGORITHM: 秘密鍵の生成に使用される暗号化アルゴリズム。有効な値は rsa-2048(デフォルト)、rsa-3072rsa-4096ecdsa-p256ecdsa-p384 です。
  • DURATION: 省略可。リーフ証明書の有効期間(秒単位)。値は 3600~315360000 の範囲で指定してください。指定しない場合は、デフォルト値の 86400 が使用されます。発行された証明書の実際の有効期間は発行元の CA によって異なります。これは、発行された証明書の有効期間が制限される可能性があるためです。
  • ROTATION_WINDOW_PERCENTAGE: 省略可。証明書の全期間で更新がトリガーされる割合。値は 1~100 にする必要があります。デフォルト値は 66% です。証明書の更新が、証明書発行の 7 日以上後で、期限切れの 7 日以上前に行われるように、証明書の有効期間を基準にしてローテーション ウィンドウの割合を設定する必要があります。

信頼構成を定義する

信頼構成には、ピア証明書を検証するためのトラスト アンカーのセットが含まれています。これには次のものが含まれます。

  • 信頼できる CA プールのリソース URI: VM が属する信頼ドメインで証明書を発行することが信頼されている CA プールリソース URI のセット。
  • PEM 形式の CA 証明書: VM が属する信頼ドメインで証明書を発行するために信頼されている、PEM 形式の CA 証明書のセット。
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/PROJECT_NAME/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM-encoded certificate"
      }
    ]
  }
}

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

  • POOL_ID: ワークロード ID プールの ID
  • PROJECT_NUMBER: ワークロード ID プールを含むプロジェクトのプロジェクト番号
  • PROJECT_NAME: CA プールを含むプロジェクトの名前
  • REGION: 下位 CA プールが配置されているリージョン
  • SUBORDINATE_CA_POOL_ID: 下位 CA プールの ID
  • PEM-encoded certificate: 省略可。VM が属する同じ信頼ドメインで証明書を発行するために信頼されている、一連の PEM 形式の CA 証明書。

構成ファイルを作成して VM のパートナー メタデータをアップロードする

次の内容を含む JSON ファイルを作成します。

このファイルを CONFIGS.json として保存します。このファイルは、マネージド ワークロード ID を使用するアプリケーションを実行する VM の作成時に使用されます。

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

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

無料で開始