本文說明如何排解與「透過 mTLS 向其他工作負載驗證工作負載」相關的常見錯誤。
詳情請參閱「排解 Workload Identity 聯盟問題」。
事前準備
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
- 設定預設地區和區域。
-
產生的憑證目錄不存在
如果收到 /var/run/secrets/workload-spiffe-credentials 目錄不存在的錯誤訊息,請按照下列步驟操作:
請使用下列其中一個介面,確認已啟用受管理的工作負載身分,確保運算執行個體支援工作負載對工作負載的驗證:
控制台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
在「VM instances」(VM 執行個體) 頁面中找到「Name」(名稱) 欄,並按一下執行個體名稱,查看執行個體的其他詳細資料。
在「詳細資料」頁面的「安全性與存取權」部分,確認「工作負載身分憑證」的值為「已啟用」。
gcloud
如要查看是否已為運算執行個體啟用受管理的工作負載身分功能,請使用
gcloud alpha compute instances describe指令。gcloud alpha compute instances describe INSTANCE_NAME \ --zone=ZONE \ --format="table(name,zone,identityCertificate)"更改下列內容:
INSTANCE_NAME:執行個體的名稱。ZONE:執行個體所在的區域。
REST
如要查看 Compute 執行個體的詳細資料,請向
instances.get方法發出GET要求。在要求中附加$fields查詢參數,即可將輸出內容限制為只包含感興趣的欄位。GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
更改下列內容:
PROJECT_ID:執行個體所在的專案 IDZONE:執行個體所在的可用區INSTANCE_NAME:執行個體的名稱
查看
identityCertificate和identity的例項值。如果
identityCertificate屬性設為false,則這個運算執行個體不支援這項功能。如要解決這個問題,請建立支援工作負載對工作負載驗證的新執行個體。詳情請參閱「在現有 VM 上啟用受管理的工作負載身分」。
確認 VM 執行的客體 OS 搭載 Compute Engine 客體代理程式 20231103.01 以上版本。使用 gcloud CLI 查看序列埠輸出,判斷目前的 Compute Engine Guest Agent 版本:
gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"將 INSTANCE_NAME 替換為運算執行個體名稱。
如要更新 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檔案內容,確認已啟用受管理的工作負載身分識別功能。如果未使用適當的值啟用這項功能,記錄檔會包含workload certificate feature not enabled錯誤訊息。如要解決這個問題,請使用下列任一方法,建立支援工作負載對工作負載驗證的新運算執行個體:
檢查
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/name/locations/global/workloadIdentityPools/POOL_ID/* - role: roles/privateca.poolReader - members: - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/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 是包含受管理 workload identity pool 的專案編號。
- POOL_ID 是 workload identity pool 的 ID。
- NAMESPACE_ID 是 workload identity pool 中的命名空間 ID。
- MANAGED_IDENTITY_ID 是受管理工作負載身分的 ID。
如果
iam.googleapis.com/workload-identity的值不正確,您必須使用正確的值建立新的運算執行個體,因為受管理的身分識別值只能在建立執行個體時更新。如果
config_status檔案不含任何錯誤訊息,請確認信任設定包含 SPIFFE 信任網域POOL_ID.global.PROJECT_NUMBER.workload.id.goog的有效項目,該項目對應至指派給運算執行個體的受管理身分識別的 SPIFFE 信任網域。詳情請參閱「定義信任設定」。如果
config_status檔案包含任何錯誤訊息和錯誤代碼INTERNAL_ERROR,請與 Cloud Customer Care 團隊或您的 Google Cloud 聯絡人 Google Cloud 聯絡,並提供錯誤訊息。