为 CMEK 配置 Google Cloud KMS
使用 Google Cloud KMS 为您的组织提供加密密钥。
claude "/claude-api help me configure a customer-managed encryption key with Google Cloud KMS"本指南将逐步介绍如何将 Google Cloud KMS 密钥配置为您的 Anthropic 组织的 "customer-managed encryption key"(客户管理的加密密钥),即 CMEK。
前提条件
- 一个已启用结算功能的 Google Cloud 项目。
- 已启用 Cloud KMS API(
cloudkms.googleapis.com)。 - 拥有创建 KMS 密钥环和密钥以及为其设置 IAM 策略的权限(
roles/cloudkms.admin或同等权限)。 - 您组织的 Anthropic Admin API 密钥。
- 已安装并完成身份验证的
gcloudCLI。 - 已为项目启用 Cloud KMS 数据访问审核日志(IAM 和管理 > 审核日志 > Cloud Key Management Service,勾选
DATA_READ和DATA_WRITE)。这些日志默认处于关闭状态;如果不启用,Anthropic 的加密和解密操作将不会在 Cloud Logging 中产生任何条目。
Anthropic 服务账号电子邮件
要让 Anthropic 使用您的加密密钥,您必须向 Anthropic 的服务账号授予一个可用于加密数据的密钥。Anthropic CMEK 的服务账号电子邮件为:
anthropic-cmek-client-us@gcp-anthropic-cmek-clients.iam.gserviceaccount.com加密密钥设置
创建或选择密钥环
如果您已有可复用的密钥环,请跳过此步骤。密钥环是区域性的。请选择与您正在配置的 Anthropic 地理区域相匹配的美国单区域位置,例如
us-east5。不支持us和global等多区域位置。gcloud kms keyrings create <your-keyring-name> \ --project=<your-project-id> \ --location=<region>创建加密密钥
创建一个用途为
ENCRYPT_DECRYPT的对称密钥。Anthropic 强烈建议使用 HSM 保护:Cloud KMS HSM 密钥已通过 FIPS 140-2 Level 3 验证,且与软件密钥相比成本差异很小。gcloud kms keys create <your-key-name> \ --project=<your-project-id> \ --location=<region> \ --keyring=<your-keyring-name> \ --purpose=encryption \ --protection-level=hsm如需改用软件保护,请省略
--protection-level=hsm。本指南中的其他内容均无需更改。您也可以通过 Google Cloud Console 创建密钥。打开密钥环,点击 Create key,选择 Generated key,将用途和算法设置为对称加密和解密,并在保护级别下选择 HSM。

创建一个受 HSM 保护的对称加密/解密(Symmetric encrypt/decrypt)密钥。 授予 Anthropic 的服务账号对密钥的访问权限
需要两个密钥级别的 IAM 绑定。两者的作用范围均限定于单个加密密钥,而非整个项目或整个密钥环。
加密和解密权限,Anthropic 使用该权限来加密和解密保护您工作区数据的数据密钥("envelope encryption",即信封加密):
gcloud kms keys add-iam-policy-binding <your-key-name> \ --project=<your-project-id> \ --location=<region> \ --keyring=<your-keyring-name> \ --member="serviceAccount:anthropic-cmek-client-us@gcp-anthropic-cmek-clients.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter查看者权限,用于 Anthropic 在启动时执行的元数据读取(
cryptoKeys.get),以验证密钥的用途和算法:gcloud kms keys add-iam-policy-binding <your-key-name> \ --project=<your-project-id> \ --location=<region> \ --keyring=<your-keyring-name> \ --member="serviceAccount:anthropic-cmek-client-us@gcp-anthropic-cmek-clients.iam.gserviceaccount.com" \ --role=roles/cloudkms.viewer在 Console 中,选择该密钥,打开 Permissions 面板,点击 Grant access,然后添加服务账号并同时授予 Cloud KMS CryptoKey Encrypter/Decrypter 和 Cloud KMS Viewer 角色。请确保您位于密钥的权限页面,而非密钥环或项目的权限页面,以便授权范围仅限于此密钥。

向 Anthropic 服务账号授予这两个角色(Cloud KMS CryptoKey Encrypter/Decrypter 和 Viewer),作用范围限定于该密钥。 记录完整的密钥资源名称
您在注册密钥时需要将其传递给 Anthropic。格式为:
projects/<your-project-id>/locations/<region>/keyRings/<your-keyring-name>/cryptoKeys/<your-key-name>使用以下命令获取:
gcloud kms keys describe <your-key-name> \ --project=<your-project-id> \ --location=<region> \ --keyring=<your-keyring-name> \ --format="value(name)"在 Console 中,打开密钥的详情页面并点击 Copy resource name。

从操作菜单中复制密钥的完整资源名称(Copy resource name)。
向 Anthropic 注册密钥
注册密钥的方式取决于您使用的产品。
向 Anthropic 注册密钥
通过 Admin API 创建外部密钥配置,使用"加密密钥设置"下"记录完整的密钥资源名称"步骤中获取的资源名称。
client = anthropic.Anthropic() external_key = client.beta.organization.external_keys.create( display_name="<friendly-name>", geo="us", provider_config={ "type": "gcp", "key_name": "projects/<your-project-id>/locations/<region>/keyRings/<your-keyring-name>/cryptoKeys/<your-key-name>", }, ) print(f"id: {external_key.id}") print(f"display_name: {external_key.display_name}")响应中包含外部密钥 ID:
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }验证密钥
针对您的密钥触发一次加密和解密往返操作。
client = anthropic.Anthropic() validation = client.beta.organization.external_keys.validate("ekey_<id>") print(f"status: {validation.status}") print(f"error: {validation.error}")成功的响应如下所示:
{ "type": "external_key_validation", "status": "success", "error": null }如果验证失败,常见原因包括:
- VPC Service Controls: 如果您的项目中有服务边界保护 Cloud KMS,请将 Anthropic 添加到该边界的访问权限级别中(或将密钥所在项目排除在外),以便 Anthropic 能够访问该密钥。
- 网域限定共享:
constraints/iam.allowedPolicyMemberDomains组织策略可能会移除 Anthropic 服务账号的绑定(请参阅前文的说明)。请使用gcloud kms keys get-iam-policy <your-key-name> --project=<your-project-id> --location=<region> --keyring=<your-keyring-name>确认绑定是否存在。 - 密钥版本已禁用或已销毁: 请确认密钥的主版本已启用,且未被禁用、未计划销毁或未被销毁。
将密钥附加到工作区
密钥验证通过后,请在向新工作区发送任何请求之前将其附加到该工作区。对于已在接收请求的工作区,密钥可能需要最多一天才能生效。
client = anthropic.Anthropic() workspace = client.beta.organization.workspaces.update( "<workspace-id>", external_key_id="ekey_<id>" ) print(f"id: {workspace.id}") print(f"external_key_id: {workspace.external_key_id}")
Terraform
对于基础设施即代码(infrastructure-as-code)部署,相同的步骤对应于 google provider 中的 google_kms_key_ring、google_kms_crypto_key 和 google_kms_crypto_key_iam_member 资源。
Was this page helpful?