本文說明如何排解與透過 mTLS 向其他工作負載驗證工作負載相關的常見錯誤。
事前準備
- 
  
  如果尚未設定驗證,請先完成設定。
  驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,可以選取下列任一選項,向 Compute Engine 進行驗證:
  
   
   
     
   
  
   
   
     
   
  
   
   
     
   
  
 
 
 
   
   
  
   
  
  
     
        
  
 
 
  - 
 
 
  
  
   
   
  
   
   
  
   
   
     
   
  
  
   
   
  
   
   
  
   
   
  
 
 
   
   
      安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI: gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 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: 
- 如果回應是 - HTTP 404錯誤代碼和- workload certificate feature not enabled錯誤訊息,表示 VM 支援受管理的工作負載身分,但這項功能未啟用。如要在 VM 上啟用這項功能,請參閱「在現有 VM 上啟用代管 Workload Identity」。
 
- 確認 VM 執行的客體 OS 搭載 Compute Engine 客體代理程式 20231103.01 以上版本。使用 gcloud CLI 查看序列埠輸出內容,判斷目前的 Compute Engine Guest Agent 版本: - gcloud compute instances get-serial-port-output VM_NAME | grep "GCE Agent Started"- 將 VM_NAME 替換為 VM 名稱。 - 如要更新 Compute Engine Guest Agent,請參閱更新訪客環境。 
- 查看服務記錄,確認 - gce-workload-cert-refresh.timersystemd 計時器是否已成功擷取工作負載憑證和信任組合包。- # 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檔案內容,確認已啟用受管理的工作負載身分識別功能。如果未使用適當的 VM 中繼資料啟用這項功能,記錄檔會包含- workload certificate feature not enabled錯誤訊息。- 如要解決這個問題,請使用下列任一方法,建立支援工作負載對工作負載驗證的新 VM: 
- 檢查 - config_status檔案內容,確保沒有因缺少屬性值或憑證核發/信任設定無效而導致的錯誤。如有這類錯誤,請按照「更新憑證核發和信任設定」一文中的步驟更新設定值。
- 確認是否已在工作負載身分集區中,授予代管型工作負載身分存取從屬 CA 集區的正確權限。使用下列指令: - 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 pool 的 ID。
 - 如果輸出內容與上述範例不符,請按照「授權受管理的工作負載身分要求來自 CA 集區的憑證」一文所述,授予必要權限。 
- 如果 - 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 是專案編號,該專案包含受管理的工作負載身分集區。
- POOL_ID 是 workload identity pool 的 ID。
- NAMESPACE_ID 是 workload identity pool 中的命名空間 ID。
- MANAGED_IDENTITY_ID 是代管型 Workload Identity 的 ID。
 - 如果 - iam.googleapis.com/workload-identity的值不正確,您必須使用正確的值建立新的 VM,因為只能在建立 VM 時更新受管理的身分值。
- 如果 - config_status檔案不含任何錯誤訊息,請確認信任設定包含 SPIFFE 信任網域- POOL_ID.global.PROJECT_NUMBER.workload.id.goog的有效項目,該項目對應至指派給 VM 的受管理身分識別上的 SPIFFE 信任網域。詳情請參閱「定義信任設定」。
- 如果 - config_status檔案包含任何錯誤訊息和錯誤代碼- INTERNAL_ERROR,請將錯誤訊息提供給 Cloud Customer Care 團隊或您的 Google Cloud 聯絡人 Google Cloud 。
查詢中繼資料伺服器端點時傳回 404 錯誤
如果在查詢 workload-identities 或 trust-anchors 端點時收到 404 回應,請從 VM 內部執行下列指令,確認 VM 支援代管 Workload Identity:
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 不支援代管型 Workload Identity。如要解決這個問題,請按照下列其中一種做法進行: 
- 如果回應是 HTTP - 404錯誤代碼,並附上錯誤訊息- workload certificate feature not enabled,表示這個 VM 支援受管理的工作負載身分,但這項功能未啟用。建立啟用這項功能的新 VM,或建立新的執行個體範本和代管執行個體群組。
- 執行下列指令,確認已授予工作負載身分集區存取下層 CA 集區的正確權限: - 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 是工作負載身分集區的 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 集區要求憑證」一文所述。 
- 確認 - iam.googleapis.com/workload-identity值正確無誤,且符合下列條件:- spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID - 如果值不相符,您就必須建立新的 VM,因為建立 VM 後就無法更新受管理的身分值。 
- 確認信任設定包含 SPIFFE 信任網域的有效項目,該項目對應於指派給 VM 的受管理身分上的 SPIFFE 信任網域。 - POOL_ID.global.PROJECT_NUMBER.workload.id.goog