本页面介绍您在使用 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
角色,备份操作会失败。
如需解决此错误,请按照以下说明操作:
验证您是否拥有足够的 IAM 权限来修改 Google Cloud 控制台中的 Cloud Key Management Service 密钥的 IAM 政策,例如
roles/cloudkms.admin
或roles/owner
。使用备份操作失败的
status reason
消息中的TENANT_PROJECT_NUMBER
值,找到租户项目的 Compute Engine 服务代理。例如service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
。找到用于加密 Persistent Disk 的以下 CMEK 信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:密钥所在的 Google Cloud 位置。 例如
global
或us-central1
。
如需向租户项目的 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 位置。 例如global
或us-central1
。TENANT_PROJECT_NUMBER
:从备份操作失败的status reason
消息中获取的租户项目编号。
如果命令成功运行,则输出如下所示:
- members: - serviceAccount:service-987654321098@compute-system.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter
重新测试备份操作。如果操作仍未成功,请与 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 的组织内,因此它不在您定义的政策范围内,这会导致备份失败。
如需解决此错误,请按照以下说明操作:
找到实施
constraints/compute.storageResourceUseRestrictions
限制条件的组织政策。如需详细了解如何使用 Google Cloud 控制台查看组织政策,请参阅查看组织政策。修改
constraints/compute.storageResourceUseRestrictions
政策,以将 Backup for GKE 使用的folders/77620796932
租户项目文件夹纳入其许可名单。将文件夹添加到许可名单后,保存政策更改。
在组织政策更新并传播(通常需要几分钟)后,重新测试备份操作。备份应在不违反存储资源使用限制的情况下进行。如果操作仍未成功,请与 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
角色,备份操作就会失败。
如需解决此错误,请按照以下说明操作:
确定特定于您的项目的 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
替换为您的项目的唯一名称。
确定以下 CMEK 详细信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:
BackupPlan
CMEK 所在的 Google Cloud 位置。例如global
或us-central1
。
如需向 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 位置。 例如global
或us-central1
。PROJECT_NUMBER
:您的 Google Cloud 项目编号。
验证您是否拥有 Cloud Key Management Service 密钥所需的 Identity and Access Management 权限。例如
roles/cloudkms.admin
或roles/owner
。验证您是否拥有已授予的权限。在上一个
gcloud kms keys add-iam-policy-binding
命令的输出中,查找类似于以下内容的条目:-members: -serviceAccount:service-123456789012@gcp-sa-gkebackup.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter
授予必要权限后,重新测试备份操作。 如果操作未成功完成,请与 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
错误。
如需解决此错误,请按照以下问题排查说明操作:
验证您是否拥有修改 Cloud Key Management Service 密钥的 IAM 政策的相应权限。例如,
cloudkms.admin
或roles/owner
。确定 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。
找到以下 CMEK 信息:
密钥名称:加密密钥的名称。
密钥环:密钥所在的密钥环的名称。
位置:密钥所在的 Google Cloud 位置。 例如
global
或us-central1
。
在 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 位置。 例如global
或us-central1
。PROJECT_NUMBER
:项目的名称。
输出类似于以下内容:
- members: - serviceAccount:service-123456789012@container-engine-robot.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter ```
重新尝试执行 Backup for GKE 操作。如果操作仍持续失败,请与 Cloud Customer Care 联系以获取进一步帮助。