排解 GKE 備份 的權限錯誤

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

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

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

GKE 備份會為 GKE 叢集的永久磁碟建立快照。快照會儲存在您的 Cloud de Confiance by S3NS 專案 (也稱為用戶專案) 中,而 Cloud de Confiance by S3NS 會在代管的租戶專案中建立快照。租戶專案位於google.com 機構內,與您自己的機構分開。

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

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

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

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

  3. 找出用於加密 Persistent Disk 的 CMEK 資訊:

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

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

    • 位置: Cloud de Confiance by S3NS 金鑰所在的位置。 例如 global 或 us-central1。

  4. 如要授予租戶專案的 Compute Engine 服務代理程式 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-TENANT_PROJECT_NUMBER@compute-system.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。例如 global 或 us-central1。

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

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

    - members:
    - serviceAccount:service-987654321098@compute-system.s3ns-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。

GKE 備份會建立 GKE 叢集永久磁碟的快照。快照會位於 Cloud de Confiance by S3NS 專案 (也稱為消費者專案) 中,並在 Cloud de Confiance by S3NS管理的租戶專案中建立。租戶專案位於google.com 機構內,與您自己的機構分開。

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

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

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

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

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

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

錯誤 100010106:無法備份 PersistentVolumeClaim - GKE 備份服務代理缺少 IAM 繫結

如果嘗試備份 PersistentVolumeClaim 時,因缺少 GKE 備份 服務代理的 Identity and Access Management 繫結而失敗,就會發生錯誤 100010106,並顯示 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent 錯誤訊息。

GKE 備份需要權限,才能使用您的BackupPlan客戶自行管理的加密金鑰 (CMEK) 加密及解密磁碟區 Persistent Disks。如果 GKE 備份服務代理帳戶在 BackupPlan CMEK 中缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,備份作業就會失敗。

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

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

    • 使用 Cloud de Confiance 控制台中的 Cloud de Confiance by S3NS 專案資訊主頁。

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

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

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

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

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

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

    • 位置:BackupPlanCMEK 所在的 Cloud de Confiance by S3NS 位置。例如 global 或 us-central1。

  3. 如要將 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色授予 GKE 備份 服務代理,請使用 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.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。例如 global 或 us-central1。

    • PROJECT_NUMBER:您的 Cloud de Confiance by S3NS 專案編號。

  4. 確認您具備 Cloud Key Management Service 金鑰所需的 Identity and Access Management 權限。例如 roles/cloudkms.admin 或 roles/owner。

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

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

錯誤 100010107:無法備份 PersistentVolumeClaim - 缺少 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.s3ns-system.iam.gserviceaccount.com) 是 GKE 叢集與 Cloud de Confiance by S3NS服務互動的必要條件。備份方案使用客戶自行管理的加密金鑰 (CMEK)。這個服務代理程式需要權限,才能使用 CMEK 加密及解密備份資料。如果備份方案缺少 CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,從叢集啟動的備份作業會失敗,並顯示 permission denied 錯誤。

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

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

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

    • 使用 Cloud de Confiance 控制台中的 Cloud de Confiance by S3NS 專案資訊主頁。

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

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

      將 PROJECT_ID 替換為專案 ID。

  3. 找出下列 CMEK 資訊:

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

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

    • 位置: Cloud de Confiance by S3NS 金鑰所在的位置。 例如 global 或 us-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.s3ns-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    更改下列內容:

    • KEY_NAME:加密金鑰名稱。

    • KEY_RING:金鑰環的名稱。

    • LOCATION:金鑰的 Cloud de Confiance by S3NS 位置。例如 global 或 us-central1。

    • PROJECT_NUMBER:專案名稱。

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

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

錯誤 100010109:無法備份 PersistentVolumeClaim,因為 DiskSettings 政策不允許目標備份區域

如果DiskSettings存取位置政策不允許目標備份區域,就會發生錯誤 100010109。

瞭解錯誤

如果客戶將DiskSettings存取位置政策設為SPECIFIC_REGIONS,且叢集中有部分磁碟位置受到這項政策限制,就會發生這個錯誤。由於這項存取位置政策僅允許特定區域做為有效的快照建立位置,因此如果目標儲存空間位置不在這份清單中,備份就會遭到拒絕。如果發生這種情況,快照建立作業會失敗,並顯示類似下列內容的訊息:

No permission to read source disk in us-central1 from target snapshot in us-east1.

疑難排解步驟

  1. 找出來源和目標區域:查看錯誤訊息,找出遭拒的來源磁碟位置 (例如 us-central1) 和目標快照區域 (例如 us-east1)。
  2. 更新 DiskSettings 政策:如要修正問題,請更新 DiskSettings,允許叢集參照的磁碟位置使用目標儲存空間位置。如要達成這個目標,請使用 Google Cloud CLI,將目標區域新增至存取位置許可清單。

    • 如果是可用區磁碟 (例如將 us-east1 新增為 us-central1-a 中磁碟允許的可用區):

      gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --zone=us-central1-a
      
    • 如果是區域磁碟 (例如在 us-central1 中新增 us-east1 做為磁碟允許的區域):

      gcloud beta compute disk-settings update --access-location-policy=specific-regions --add-access-locations=us-east1 --region=us-central1
      
  3. 重新測試備份作業:更新 DiskSettings 以允許目標備份區域後,請重新嘗試備份作業。

錯誤 100020101:無法備份 PersistentVolumeClaim - PersistentVolumeClaim 繫結至不支援的 PersistentVolume 類型

如果嘗試備份 PersistentVolumeClaim 時失敗,可能是因為 PersistentVolumeClaim 繫結至不支援的 PersistentVolume 類型,這時就會發生 100020101 錯誤。因此系統顯示以下錯誤訊息: PersistentVolumeClaims are bound to PersistentVolumes of unsupported types and cannot be backed up.

如果 GKE 備份作業遇到繫結至 PersistentVolume 的 PersistentVolumeClaim,而該 PersistentVolume 使用的磁碟區類型不支援 GKE 備份資料備份,就會發生這個錯誤。GKE 備份主要支援備份 Persistent Disk 磁碟區的資料。如果 PersistentVolumeClaim 繫結至非 Persistent Disk 的 PersistentVolume,PersistentVolumeClaim 的資料備份作業就會失敗。

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

  1. 執行 kubectl get pvc 指令,列出所有與 PersistentVolumeClaims 和 PersistentVolumes 繫結的 。請查看這份清單,找出由不支援磁碟區類型支援的 PersistentVolumes。

    kubectl get pvc --all-namespaces -o wide
    
  2. 執行 kubectl describe pv 指令,判斷由 GKE 備份 不支援的磁碟區類型支援的 PersistentVolume 磁碟區類型:

    kubectl describe pv PERSISTENT_VOLUME_NAME
    

    更改下列內容:

    PERSISTENT_VOLUME_NAME:PersistentVolume 的名稱,其中包含不支援的磁碟區類型,並列為上一個步驟輸出內容中的資料欄 VOLUME。

    在輸出內容中,使用 Source 和 Driver 欄位取得磁碟區佈建工具詳細資料:

    • 支援的永久磁碟:輸出內容類似於 Source.Driver: pd.csi.storage.gke.io 或 Source.Type:GCEPersistentDisk。

    • 對於導致錯誤的不支援類型:輸出內容會是「非永久磁碟」驅動程式,例如 Source.Driver:filestore.csi.storage.gke.io。

  3. 請使用下列其中一種方法解決錯誤:

    • 遷移至永久磁碟磁碟區:建議使用這個方法備份所有資料。如要備份實際磁碟區資料,必須使用永久磁碟,也就是將資料從不支援的磁碟區類型遷移至新的永久磁碟 CSI 磁碟區。如需遷移 Persistent Disk 磁碟區的相關協助,請與 Cloud Customer Care 團隊聯絡。

    • 在 GKE 備份中啟用寬鬆模式:如果不需要備份不支援磁碟區的資料,建議採用這個方法。如果無法或不需要遷移資料 (例如磁碟區由外部服務支援,且您打算在還原作業期間重新附加),可以設定 Backup for GKE 備份方案,允許備份在寬鬆模式下進行。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

  4. 重新嘗試 GKE 備份作業。根據您選擇的錯誤解決方法,GKE 備份 作業的行為如下:

    • 如果您遷移至 Persistent Disk 磁碟區,備份作業應會成功,包括磁碟區及其資料。

    • 如果啟用寬鬆模式,備份作業應該會成功,但系統不會備份不支援磁碟區的資料。

如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100020104:無法備份 PersistentVolumeClaim - PersistentVolumeClaim 未繫結至 PersistentVolume

如果 PersistentVolumeClaim 未繫結至 PersistentVolume,嘗試備份 PersistentVolumeClaim 時就會失敗,並發生錯誤 100020104。錯誤會導致下列錯誤訊息:Failed to backup PVC - PVC Not Bound to a Persistent Volume。

如果 GKE 備份 作業嘗試備份未成功繫結至 PersistentVolume 的 PersistentVolumeClaim,就會發生這個錯誤。PersistentVolumeClaim 必須繫結至 PersistentVolume,才能供 Pod 等耗用工作負載使用,並由 GKE 備份服務備份。如果 PersistentVolumeClaim 仍處於 Pending 狀態,表示沒有合適的 PersistentVolume 可用,或無法佈建或繫結,導致備份作業失敗。如果相關聯的 StorageClass 使用 WaitForFirstConsumer 繫結模式,但沒有 Pod 或其他工作負載嘗試使用 PersistentVolumeClaim,PersistentVolumeClaim 就會保持未繫結狀態。

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

  1. 如要檢查叢集中所有 PersistentVolumeClaims 的狀態,並找出未繫結的 PersistentVolumeClaim,請執行 kubectl get pvc 指令:

    kubectl get pvc --all-namespaces | grep `Pending`
    
  2. 找出未繫結至 PersistentVolume 的 PersistentVolumeClaim 後,請執行 kubectl describe pvc 指令,擷取未繫結 PersistentVolumeClaim 的相關資訊:

    kubectl describe pvc PVC_NAME -n NAMESPACE_NAME
    

    更改下列內容:

    • PVC_NAME:備份失敗的 PersistentVolumeClaim 名稱。

    • NAMESPACE_NAME:PersistentVolumeClaim 所在的命名空間名稱。

    說明顯示後,請使用 Status 和 Events 欄位,判斷 PersistentVolumeClaim 是否繫結至 PersistentVolume。如果還是無法判斷 PersistentVolumeClaim 未繫結至 PersistentVolume 的原因,或是無法解決已識別的問題,可以在備份計畫中啟用寬鬆模式。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

後續步驟