本文档介绍了如何查找和缓解常见的 CMEK 配置错误,以及如何识别在设置默认资源位置时发生的错误。
排查默认资源位置设置问题
您尝试更新组织或文件夹的默认存储位置,但命令失败,并显示类似于以下内容的错误:
ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
the storage location. Received KMS key location: us-central1, storage location:
us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
match the storage location. Received KMS key location: us-central1, storage location:
us-west1" }'
如需解决此错误,请将组织或文件夹的默认存储位置设置为与该组织或文件夹的 Cloud Key Management Service 密钥位置一致。
排查 CMEK 问题
配置 CMEK 时,包含 Cloud KMS 密钥的 Trusted Cloud 项目会收到相关问题的通知。例如,如果 KMS_KEY_NAME 无效、关联的服务账号没有所需的 Cloud Key Management Service CryptoKey Encrypter/Decrypter 角色或者已停用对密钥的访问权限,则更新会失败。
配置 CMEK 后,至少会发生以下情况之一:
您从 Cloud Logging 收到了关于 CMEK 访问权限问题的通知。
您注意到,在组织或文件夹中创建新 Trusted Cloud 项目时,
_Default
和_Required
日志存储桶未启用 CMEK。从启用 CMEK 的日志存储桶中读取数据时,或者尝试创建或更新日志存储桶时,您收到错误消息。
通知会提供有关失败的信息,并包含可用于缓解问题的操作:
错误 | 建议 |
---|---|
加密密钥权限被拒 | 与您的 Trusted Cloud 项目关联的 Logging 服务账号没有足够的 IAM 权限,无法对指定的 Cloud KMS 密钥执行操作。请按照错误消息中的说明操作,或参阅以下文档: |
加密密钥已停用 | 指定的 Cloud KMS 密钥已停用。按照错误中的说明重新启用密钥。 |
加密密钥已销毁 | 指定的 Cloud KMS 密钥已销毁。请按照说明操作或参阅以下文档: |
确定包含 Cloud KMS 密钥的项目
如需确定包含日志存储桶、文件夹或组织使用的加密密钥的 Trusted Cloud 项目的 ID,请执行以下操作:
项目
gcloud logging settings describe --project=PROJECT_ID
在运行命令之前,请将 PROJECT_ID 替换为包含日志存储桶的项目 ID。
文件夹
gcloud logging settings describe --folder=FOLDER_ID
在运行命令之前,请将 FOLDER_ID 替换为文件夹的 ID。
单位
gcloud logging settings describe --organization=ORGANIZATION_ID
在运行命令之前,请将 ORGANIZATION_ID 替换为组织的 ID。
上面的命令会返回类似于以下内容的信息:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.s3ns-system.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.s3ns-system.iam.gserviceaccount.com
对于组织和文件夹,还会返回以下字段:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
kmsKeyName
字段的值包含存储密钥的 Trusted Cloud 项目。
验证密钥的可用性
如需验证密钥的可用性,请运行以下命令以列出所有密钥:
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
此命令以表格格式返回每个密钥的相关信息。输出的第一行是列名称列表:
NAME PURPOSE ...
验证 Cloud KMS 密钥在命令的输出中是否被列为 ENABLED
,以及密钥的用途是否为对称加密:PURPOSE
列必须包含 ENCRYPT_DECRYPT
,且 PRIMARY_STATE
列必须包含 ENABLED
。
如有必要,请创建新密钥。
验证权限配置
与组织的 CMEK 设置关联的服务账号必须拥有已配置密钥的 Cloud KMS CryptoKey Encrypter/Decrypter 角色。
如需列出密钥的 IAM 政策,请运行以下命令:
gcloud kms keys get-iam-policy KMS_KEY_NAME
如有必要,请向密钥添加包含 Cloud KMS CryptoKey Encrypter/Decrypter 角色的服务账号。