排查 Backup for GKE 中的权限错误


本页面介绍您在使用 Backup for GKE 时可能遇到的权限错误、执行操作时需要考虑的事项,以及如何解决相应错误。

错误 100010101:备份 PersistentVolumeClaim 失败 - 租户项目缺少 IAM 绑定

当尝试备份 PersistentVolumeClaim 时,由于您的租户项目缺少 Identity and Access Management 绑定而失败,导致出现错误消息 Failed to backup PersistentVolumeClaim - Missing IAM binding for tenant project 时,会发生错误 100010101

Backup for GKE 会创建 GKE 集群的永久性磁盘的快照。快照位于您的 Google Cloud 项目(也称为使用方项目)中, Google Cloud 会在其管理的租户项目中创建快照。租户项目位于 google.com 组织内,与您自己的组织分开。

租户项目中的服务代理需要特定权限才能使用客户管理的加密密钥 (CMEK) 来加密集群的 PersistentVolumeClaim 所引用的永久性磁盘。此权限用于加密和解密快照数据。如果 service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com 服务代理在磁盘的 CMEK 上缺少 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,备份操作会失败。

如需解决此错误,请按照以下说明操作:

  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. 找到用于加密 Persistent Disk 的以下 CMEK 信息:

    • 密钥名称:加密密钥的名称。

    • 密钥环:密钥所在的密钥环的名称。

    • 位置:密钥所在的 Google Cloud 位置。 例如 globalus-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.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 服务代理的 Identity and Access Management 绑定而失败,导致出现 100010106 错误,并显示 Failed to backup PVC - Missing IAM binding for Backup for GKE service agent 错误消息。

Backup for GKE 需要获得权限,才能使用 BackupPlan 的客户管理的加密密钥 (CMEK) 对卷永久性磁盘进行加密和解密。如果 Backup for GKE 服务代理缺少对 BackupPlan CMEK 的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,备份操作就会失败。

如需解决此错误,请按照以下说明操作:

  1. 确定特定于您的项目的 Google 管理的 Backup for 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 详细信息:

    • 密钥名称:加密密钥的名称。

    • 密钥环:密钥所在的密钥环的名称。

    • 位置BackupPlan CMEK 所在的 Google Cloud 位置。例如 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 联系以获取进一步帮助。

后续步骤