排解 Backup for GKE 的權限錯誤


本頁面說明使用 Backup for GKE 時可能遇到的權限錯誤、執行動作時應注意的事項,以及如何解決錯誤。

錯誤 100010101:無法備份 PersistentVolumeClaim - 缺少租戶專案的 IAM 繫結

嘗試備份 PersistentVolumeClaim 時,如果租戶專案缺少 Identity and Access Management 繫結,就會發生 100010101 錯誤,並顯示 Failed to backup PersistentVolumeClaim - Missing IAM binding for tenant project 錯誤訊息。

Backup for GKE 會建立 GKE 叢集永久磁碟的快照。快照會存放在您的 Google Cloud 專案 (也稱為消費端專案) 中,並在管理的租戶專案中建立快照。 Google Cloud 租戶專案位於 google.com 機構內,與您自己的機構分開。

租戶專案中的服務代理需要特定權限,才能使用客戶自管加密金鑰 (CMEK) 加密叢集 PersistentVolumeClaim 參照的 Persistent Disk。這項權限會加密及解密快照資料。如果服務代理程式在磁碟的 CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,備份作業就會失敗。service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

如要解決這項錯誤,請按照下列指示操作:

  1. 確認您具備足夠的 IAM 權限,可在 Google Cloud 控制台中修改 Cloud Key Management Service 金鑰的 IAM 政策,例如 roles/cloudkms.adminroles/owner

  2. 使用備份作業失敗時 status reason 訊息中的 TENANT_PROJECT_NUMBER 值,找出租戶專案的 Compute Engine 服務代理人。例如:service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

  3. 找出用於加密永久磁碟的下列 CMEK 資訊:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:金鑰所在位置。 Google Cloud 例如 globalus-central1

  4. 如要將 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色授予租戶專案的 Compute Engine 服務代理人,請使用 Google Cloud CLI 執行 gcloud kms keys add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

    • TENANT_PROJECT_NUMBER:從備份作業失敗的 status reason 訊息中取得的租戶專案編號。

    如果指令執行成功,輸出內容會如下所示:

    - members:
    - serviceAccount:service-987654321098@compute-system.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  5. 重新測試備份作業。如果作業仍未成功,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100010104:無法備份 PersistentVolumeClaim - 建立快照時違反機構政策限制

如果嘗試備份 PersistentVolumeClaim 時,因違反機構政策限制而無法建立快照,就會發生錯誤 100010104,並顯示「Failed to backup PersistentVolumeClaim - Org policy constraint violation while creating snapshot」錯誤訊息。

Backup for GKE 會建立 GKE 叢集永久磁碟的快照。快照會存放在您的 Google Cloud 專案 (也稱為消費端專案) 中,並在 Google Cloud管理的租戶專案中建立。租戶專案位於 google.com 機構內,與您自己的機構分開。

機構政策會規定您可以在何處建立儲存空間資源。Constraint constraints/compute.storageResourceUseRestrictions violated 這項錯誤表示資源或快照違反政策,因為是在不屬於允許的機構結構的租戶專案中建立。由於租戶專案位於 Google 的機構內,因此超出您定義的政策範圍,導致備份失敗。

如要解決這項錯誤,請按照下列指示操作:

  1. 找出實作 constraints/compute.storageResourceUseRestrictions 限制的機構政策。如要進一步瞭解如何使用 Google Cloud 控制台查看機構政策,請參閱「查看機構政策」。

  2. 修改 constraints/compute.storageResourceUseRestrictions 政策,將 Backup for GKE 使用的 folders/77620796932 租戶專案資料夾納入允許清單。

  3. 將資料夾新增至允許清單後,請儲存政策變更。

  4. 機構政策更新並傳播後 (通常需要幾分鐘),請重新測試備份作業。備份作業應繼續進行,且不得違反儲存空間資源使用限制。如果作業仍未成功,請與 Cloud Customer Care 團隊聯絡,尋求進一步的協助。

錯誤 100010106:無法備份 PVC - Backup for GKE 服務代理人缺少 IAM 繫結

嘗試備份 PersistentVolumeClaim 時,如果 Backup for GKE 服務代理程式缺少身分與存取權管理繫結,就會發生錯誤 100010106,並顯示 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent 錯誤訊息。

Backup for GKE 必須具備權限,才能使用 BackupPlan 的客戶自行管理的加密金鑰 (CMEK) 加密及解密磁碟區永久磁碟。如果 GKE 備份服務代理在 BackupPlan CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,備份作業就會失敗。

如要解決這項錯誤,請按照下列指示操作:

  1. 找出專案專屬的 Google 代管 GKE 備份服務代理。例如:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com。您可以透過下列方法找出專案編號:

    • 使用 Google Cloud 控制台中的 Google Cloud 專案資訊主頁。

    • 使用 Google Cloud CLI 執行 gcloud projects describe 指令:

      gcloud projects describe PROJECT_ID –format="value(projectNumber)"
      

      PROJECT_ID 替換為專案的專屬名稱。

  2. 找出下列 CMEK 詳細資料:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:CMEK 所在的 Google Cloud 位置BackupPlan。例如 globalus-central1

  3. 如要授予 Backup for GKE 服務代理人 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,請使用 Google Cloud CLI 執行 gcloud kms keys add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。

  4. 確認您對 Cloud Key Management Service 金鑰具有必要的 Identity and Access Management 權限。例如 roles/cloudkms.adminroles/owner

  5. 確認您已獲得授權。在先前 gcloud kms keys add-iam-policy-binding 指令的輸出內容中,尋找類似下列的項目:

    -members:
    -serviceAccount:service-123456789012@gcp-sa-gkebackup.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  6. 授予必要權限後,請重新測試備份作業。 如果作業未順利完成,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100010107:無法備份 PVC - 缺少 IAM 繫結 - 代理程式服務帳戶 (KCP)

當您嘗試執行 Backup for GKE 備份作業,但 Google Kubernetes Engine 叢集服務代理程式無法存取客戶自行管理的加密金鑰 (CMEK) 時,就會發生錯誤 100010107,並顯示 Failed to backup PVC - Missing IAM binding - agent service account (KCP) 訊息。

Google Kubernetes Engine 叢集服務代理程式 (通常採用 service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com 格式) 是 GKE 叢集與 Google Cloud服務互動的必要條件。備份計畫使用客戶自行管理的加密金鑰 (CMEK)。這個服務代理程式需要使用您的 CMEK 加密及解密備份資料的權限。如果備份方案在 CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,從叢集啟動的備份作業就會失敗,並顯示 permission denied 錯誤。

如要解決這項錯誤,請按照下列疑難排解說明操作:

  1. 確認您具備適當權限,可修改 Cloud Key Management Service 金鑰的 IAM 政策。例如 cloudkms.adminroles/owner

  2. 找出 Google Kubernetes Engine 叢集服務代理程式。這項服務代理程式是由 Google Cloud 自動建立及管理,適用於您的 GKE 叢集。例如:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com。您需要專案編號才能組成完整的服務帳戶。您可以使用下列任一方法找出專案編號:

    • 使用 Google Cloud 控制台中的 Google Cloud 專案資訊主頁。

    • 使用 Google Cloud CLI 執行 gcloud projects describe 指令:

      gcloud projects describe PROJECT_ID –-format="value(projectNumber)"
      

      PROJECT_ID 替換為您的專案 ID。

  3. 找出下列 CMEK 資訊:

    • 金鑰名稱:加密金鑰的名稱。

    • 金鑰環:金鑰所在金鑰環的名稱。

    • 位置:金鑰所在位置。 Google Cloud 例如 globalus-central1

  4. 在 CMEK 層級授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。Google Kubernetes Engine 服務代理程式需要加密金鑰的權限。如要授予 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,請使用 Google Cloud CLI 執行 gcloud kms key add-iam-policy-binding 指令:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰的名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的位置。 Google Cloud 例如 globalus-central1

    • PROJECT_NUMBER:專案名稱。

    輸出結果會與下列內容相似:

     - members:
     - serviceAccount:service-123456789012@container-engine-robot.iam.gserviceaccount.com
     role: roles/cloudkms.cryptoKeyEncrypterDecrypter
     ```
    
  5. 重新嘗試 Backup for GKE 作業。如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

後續步驟