このドキュメントでは、mTLS を介してワークロード間で認証を行う場合に関連する一般的なエラーのトラブルシューティング方法について説明します。
始める前に
- 
  
  まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
  
   
   
     
   
  
   
   
     
   
  
   
   
     
   
  
 
 
 
   
   
  
   
  
  
     
        
  
 
 
  - 
 
 
  
  
   
   
  
   
   
  
   
   
     
   
  
  
   
   
  
   
   
  
   
   
  
 
 
   
   
      Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。 gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- Set a default region and zone.
 
- 
 
 
  
  
   
   
  
   
   
  
   
   
     
   
  
  
   
   
  
   
   
  
   
   
  
 
 
   
   
      
生成された認証情報ディレクトリが存在しない
/var/run/secrets/workload-spiffe-credentials ディレクトリが存在しないというエラーが表示された場合は、次の操作を行います。
- VM 内から次のコマンドを実行して、VM がワークロード間認証をサポートしていることを確認します。 - curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google" - レスポンスで次のエラー メッセージを含む - HTTP 404エラーコードが返された場合、この VM はこの機能をサポートしていません。- The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status was not found on this server. That's all we know.- 解決するには、次のいずれかの方法で、ワークロード間認証をサポートする新しい VM を作成します。 
- レスポンスでエラー メッセージ - workload certificate feature not enabledを含む- HTTP 404エラーコードが返された場合、VM はマネージド ワークロード ID をサポートしていますが、この機能は有効になっていません。VM でこの機能を有効にするには、既存の VM でマネージド ワークロード ID を有効にするをご覧ください。
 
- VM が Compute Engine ゲスト エージェント バージョン 20231103.01 以降のゲスト OS を実行していることを確認します。gcloud CLI を使用してシリアルポートの出力を表示し、現在の Compute Engine ゲスト エージェントのバージョンを確認します。 - gcloud compute instances get-serial-port-output VM_NAME | grep "GCE Agent Started"- VM_NAME は VM の名前で置き換えます。 - Compute Engine ゲスト エージェントを更新するには、ゲスト環境の更新をご覧ください。 
- サービスログを調べて、 - gce-workload-cert-refresh.timerシステム タイマーがワークロード認証情報と信頼バンドルを正常に取得できていることを確認します。- # View timer logs to see when the gce-workload-cert-refresh.timer last ran journalctl -u gce-workload-cert-refresh.timer # View service logs from gce-workload-cert-refresh.service journalctl -u gce-workload-cert-refresh.service 
生成された認証情報ディレクトリに config_status ファイルのみが含まれる
さまざまな理由から、生成された認証情報ディレクトリ /var/run/secrets/workload-spiffe-credentials に config_status のみが含まれる場合があります。この問題のトラブルシューティングを行うには、次の操作を行います。
- config_statusファイルの内容を確認して、マネージド ワークロード ID 機能が有効になっていることを確認します。適切な VM メタデータを使用してこの機能を有効にしていない場合、ログファイルにはエラー メッセージ- workload certificate feature not enabledが記録されます。- この問題を解決するには、次のいずれかの方法で、ワークロード間認証をサポートする新しい VM を作成します。 
- config_statusファイルの内容を調べて、属性値の欠落や、証明書発行または信頼構成の無効な構成によるエラーがないことを確認します。このようなエラーが存在する場合は、証明書発行と信頼構成を更新するの手順に沿って構成値を更新します。
- 下位 CA プールにアクセスするための Workload Identity プール内のマネージド ワークロード ID に、適切な権限が付与されていることを確認します。次のコマンドを使用します。 - gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \ --location=SUBORDINATE_CA_POOL_REGION - 次のように置き換えます。 - SUBORDINATE_CA_POOL_ID: 下位 CA プールの ID。
- SUBORDINATE_CA_POOL_REGION: 下位 CA プールのリージョン。
 - このコマンドの出力には、次の内容が含まれているはずです。 - bindings: - members: - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/* - role: roles/privateca.poolReader - members: - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/* role: roles/privateca.workloadCertificateRequester- 上記の例では、次のようになっています。 - PROJECT_NUMBER は、実際のプロジェクトのプロジェクト番号です。
- POOL_ID は、Workload Identity プールの ID です。
 - 上記の例のような出力が表示されない場合は、CA プールの証明書のリクエストをマネージド ワークロード ID に許可するの説明に従って、必要な権限を付与します。 
- config_statusファイルにエラー メッセージが含まれていない場合は、ファイル内の- iam.googleapis.com/workload-identityの値を確認します。値は次のものと一致している必要があります。- spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID - 上記の例では、次のようになっています。 - PROJECT_NUMBER は、マネージド Workload Identity プールを含むプロジェクトのプロジェクト番号です。
- POOL_ID は、Workload Identity プールの ID です。
- NAMESPACE_ID は、ワークロード ID プール内の名前空間の ID です。
- MANAGED_IDENTITY_ID は、マネージド ワークロード ID です。
 - iam.googleapis.com/workload-identityの値が正しくない場合は、正しい値で新しい VM を作成する必要があります。マネージド ID の値を更新できるのは、VM の作成時のみです。
- config_statusファイルにエラー メッセージがない場合は、信頼構成に SPIFFE 信頼ドメイン- POOL_ID.global.PROJECT_NUMBER.workload.id.googの有効なエントリが含まれていることを確認します。これは、仮想マシンに割り当てられたマネージド ID の SPIFFE 信頼ドメインに対応しています。詳細については、信頼構成を定義するをご覧ください。
- config_statusファイルにエラーコード- INTERNAL_ERRORとエラー メッセージが含まれている場合は、Cloud カスタマーケアまたは Google Cloud の担当者にお問い合わせください。その際、エラー メッセージを伝えてください。
メタデータ サーバー エンドポイントのクエリで 404 エラーが返される
workload-identities エンドポイントまたは trust-anchors エンドポイントをクエリしたときに 404 レスポンスが返された場合は、VM 内から次のコマンドを実行して、VM がマネージド ワークロード ID をサポートしていることを確認します。
curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
- レスポンスで HTTP - 404エラーコードと次のエラー メッセージが返された場合:- The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status was not found on this server. That's all we know.- VM は、マネージド ワークロード ID をサポートしていません。この問題を解決するには、以下のいずれかを行います。 
- レスポンスに HTTP - 404エラーコードとエラー メッセージ- workload certificate feature not enabledが含まれている場合、この VM はマネージド ワークロード ID をサポートしていますが、この機能が有効になっていません。この機能が有効になっている新しい VM を作成するか、新しいインスタンス テンプレートとマネージド インスタンス グループを作成します。
- 次のコマンドを実行して、下位 CA プールにアクセスするための Workload Identity プールに適切な権限が付与されていることを確認します。 - gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \ --location=SUBORDINATE_CA_POOL_REGION - 次のように置き換えます。 - SUBORDINATE_CA_POOL_ID: 下位 CA プールの ID。
- SUBORDINATE_CA_POOL_REGION: 下位 CA プールのリージョン。
 - このコマンドの出力には次の内容が含まれます。ここで、PROJECT_NUMBER はプロジェクトのプロジェクト番号、POOL_ID は Workload Identity プールの ID です。 - bindings: - members: - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/* - role: roles/privateca.poolReader - members: - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/* - role: roles/privateca.workloadCertificateRequester - 出力にこれらの値が含まれていない場合は、CA プールの証明書のリクエストをマネージド ワークロード ID に許可するの説明に従って、正しい権限を付与します。 
- iam.googleapis.com/workload-identityの値が正しく、次の値と一致していることを確認します。- spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID - 値が一致しない場合は、新しい VM を作成する必要があります。VM の作成後にマネージド ID の値を更新することはできません。 
- 信頼構成に、VM に割り当てられたマネージド ID の SPIFFE 信頼ドメインに対応する SPIFFE 信頼ドメイン - POOL_ID.global.PROJECT_NUMBER.workload.id.googの有効なエントリが含まれていることを確認します。