为 CMEK 配置 Azure Key Vault
使用 Azure Key Vault 为您的组织提供加密密钥。
Claude Code
让 Claude Code 为您设置此功能
/claude-api 帮我使用 Azure Key Vault 配置客户管理的加密密钥本指南将引导您将 Azure Key Vault 密钥配置为 Anthropic 组织的客户管理加密密钥(customer-managed encryption key,CMEK)。
前提条件
- 一个已启用 RBAC 授权(
enableRbacAuthorization: true)且允许公共网络访问的 Azure Key Vault。Anthropic 通过公共数据平面端点调用您的保管库;不支持私有端点。 - 保管库上已启用清除保护(
enablePurgeProtection: true)。如果没有它,已删除的密钥可能在软删除保留窗口期间被永久清除,导致您的 CMEK 保护数据不可逆转地丢失。清除保护一旦启用便无法禁用。 - 在保管库中创建密钥以及在其上分配 RBAC 角色的权限。
- 在您的 Entra 租户中创建服务主体的权限(
Application Administrator、Cloud Application Administrator或等效的自定义角色)。 - 您组织的 Anthropic Admin API 密钥。
- 已安装并通过身份验证的
azCLI。 - 在保管库上配置了诊断设置(Diagnostic Settings),以将
AuditEvent日志类别路由到 Log Analytics、存储帐户或事件中心。Azure Key Vault 默认不发出数据平面审计日志(例如KeyWrap、KeyUnwrap和KeyGet),因此如果没有此配置,您将无法获得 Anthropic 密钥操作的审计跟踪。
Anthropic 应用信息
要让 Anthropic 使用您的加密密钥,您必须配置一个 Anthropic 多租户应用程序 ID 和显示名称。这些值为:
| 字段 | 值 |
|---|---|
| 多租户应用客户端 ID(美国) | 8635ae1a-3e5d-44e8-a4ed-e0f614466f87 |
| 应用显示名称 | anthropic-cmek-client-us |
加密密钥设置
同意 Anthropic 多租户应用程序
这会在您的 Entra 租户中为 Anthropic 的 CMEK 客户端应用程序创建一个服务主体。该应用程序不请求任何 Microsoft Graph 权限;它仅作为 Key Vault 数据平面访问的联合目标而存在。
az ad sp create --id 8635ae1a-3e5d-44e8-a4ed-e0f614466f87从输出中,捕获
id字段。这是服务主体在您租户中的对象 ID,您在分配 RBAC 角色时会用到它。{ "appId": "8635ae1a-3e5d-44e8-a4ed-e0f614466f87", "displayName": "anthropic-cmek-client-us", "id": "<sp-object-id>" }如果服务主体已存在于您的租户中(来自先前的尝试或其他集成),
az ad sp create会以"already exists"错误退出。请改为获取其对象 ID:az ad sp show --id 8635ae1a-3e5d-44e8-a4ed-e0f614466f87 --query id -o tsv此步骤没有门户等效操作。如果您本地未安装 Azure CLI,请从门户顶部导航栏打开 Cloud Shell。命令成功后,您可以在 Microsoft Entra ID > 企业应用程序中,通过清除默认的应用程序类型筛选器并搜索
anthropic-cmek-client-us来找到服务主体的对象 ID。
在其 Entra 企业应用程序概述中找到服务主体的对象 ID(Object ID)。 在您的保管库中创建 RSA 密钥
Azure Key Vault 不支持对称密钥包装,因此密钥必须是 RSA(3072 位或更大),并在其允许的操作中包含
wrapKey和unwrapKey。--tags选项添加组织标签anthropic-org-<ORGANIZATION_UUID>,其值为true,其中<ORGANIZATION_UUID>是您的 Anthropic 组织 ID(小写)。此标签是 Anthropic 验证密钥所必需的。az keyvault key create \ --vault-name <VAULT_NAME> \ --name <KEY_NAME> \ --kty RSA --size 3072 \ --ops wrapKey unwrapKey \ --tags anthropic-org-<ORGANIZATION_UUID>=true对于 HSM 支持的密钥,使用
--kty RSA-HSM(需要 Premium-SKU 保管库)。软件保护的 RSA 密钥对于此集成是可接受的。从门户中,打开您的 Key Vault,选择 Keys,然后选择 Generate/Import。将密钥类型设置为 RSA,大小设置为 3072 或更大。要将密钥限制为仅包装和解包,请打开密钥版本,滚动到 Permitted operations,并取消选中除 Wrap Key 和 Unwrap Key 之外的所有内容。
在 Create a key 页面上,还要在 Tags 下添加组织标签。

创建一个大小为 3072 或更大的 RSA 密钥,并将标签 anthropic-org-<ORGANIZATION_UUID> 设置为 true。 
将允许的操作限制为 Wrap Key 和 Unwrap Key。密钥版本显示组织标签。 要在多个 Anthropic 组织之间共享一个密钥,请为每个组织添加一个这样的标签。一个密钥版本最多可以携带 15 个标签,包括您自己的标签。
授予 Anthropic 服务主体访问您密钥的权限
将
Key Vault Crypto User角色分配给第一步中的服务主体,范围限定为单个密钥而不是整个保管库。VAULT_ID=$(az keyvault show --name <your-vault-name> --query id -o tsv) az role assignment create \ --role "Key Vault Crypto User" \ --assignee-object-id <sp-object-id> \ --assignee-principal-type ServicePrincipal \ --scope "${VAULT_ID}/keys/<your-key-name>"内置的
Key Vault Crypto User角色在其分配的范围内授予密钥加密操作(加密、解密、包装、解包、签名、验证)以及密钥读取权限。您在上一步中对密钥设置的--ops wrapKey unwrapKey限制进一步缩小了针对此密钥可以成功执行的操作,因此实际上 Anthropic 只能包装和解包。从门户中,打开密钥(而不是保管库),选择其 Access control (IAM) 选项卡,单击 Add > Add role assignment,选择 Key Vault Crypto User,并将其分配给
anthropic-cmek-client-us服务主体。
将 Key Vault Crypto User 分配给 Anthropic 服务主体,范围限定为密钥。 验证您的保管库配置
az keyvault show --name <your-vault-name> \ --query "{rbac:properties.enableRbacAuthorization, purge:properties.enablePurgeProtection, pub:properties.publicNetworkAccess, net:properties.networkAcls.defaultAction, ipRules:properties.networkAcls.ipRules, uri:properties.vaultUri, tenantId:properties.tenantId}"确认:
rbac为true。purge为true。如果它为false或null,请在继续之前在保管库上启用清除保护。如果没有它,软删除的密钥可能在保留窗口期间被永久清除,使您的 CMEK 保护数据无法恢复。pub为"Enabled"。如果它为"Disabled",Anthropic 无法通过其公共数据平面端点访问保管库,验证将失败。net为"Allow",或者,如果它为"Deny",则ipRules包含 Anthropic 的出口范围(请联系 Anthropic 获取当前列表)。uri是您注册密钥时使用的保管库 URI。tenantId是管理保管库的租户。注册密钥时将此值用作tenant_id,而不是您当前活动订阅的租户(在跨租户设置中两者可能不同)。
向 Anthropic 注册密钥
注册密钥的方式取决于您使用的产品。
您可以在 Claude Console 中或通过 Admin API 设置密钥,结果相同。
向 Anthropic 注册密钥
在 Claude Console 中,前往 Data retention 页面(
platform.claude.com/settings/privacy)。如果您没有看到 Encryption keys,请从页面顶部的下拉菜单中选择 Organization。在 Encryption keys 下,单击 Add key。输入显示名称,选择 Azure Key Vault,然后单击 Continue。填写 Vault URI、Key name 和 Tenant ID,然后单击 Add。密钥详细信息步骤会显示组织标签。在单击 Add 之前,按照创建步骤中的描述将其添加到密钥。
验证密钥
在 Encryption keys 列表中,单击密钥旁边的 Verify。检查通过后会显示 Connected。如果失败,会显示一条说明原因的消息。
将密钥附加到工作区
在 Claude Console 中,前往 Data retention 页面(
platform.claude.com/settings/privacy),并从页面顶部的下拉菜单中选择工作区。在 Encryption key 下,选择密钥,单击 Save 并确认。附加密钥后无法撤销。对于已在接收请求的工作区,密钥可能需要最多一天才能生效。
向 Anthropic 注册密钥
通过 Admin API 创建外部密钥配置。
Pythonclient = anthropic.Anthropic() external_key = client.organization.external_keys.create( display_name="<friendly-name>", geo="us", provider_config={ "type": "azure", "vault_uri": "https://<your-vault-name>.vault.azure.net/", "key_name": "<your-key-name>", "tenant_id": "<your-tenant-id>", }, ) 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>" }验证密钥
针对您的密钥触发一次加密和解密往返。这确认 Anthropic 可以向您的租户进行身份验证并执行包装和解包操作。
Pythonclient = anthropic.Anthropic() validation = client.organization.external_keys.validate("ekey_<id>") print(f"status: {validation.status}") print(f"error: {validation.error}")成功的响应如下所示:
{ "type": "external_key_validation", "status": "success", "error": null }如果验证失败,
error字段会描述问题。常见原因有:- RBAC 传播延迟: 角色分配可能需要几分钟才能生效。请等待并重试。
- 网络 ACL 阻止 Anthropic: 按照验证步骤中的描述确认公共网络访问和
ipRules。 - 工作负载标识上的条件访问策略: 如果您的租户有针对服务主体的条件访问策略,请排除 Anthropic 服务主体,或将 Anthropic 的出口范围添加到策略的命名位置。
将密钥附加到工作区
密钥验证通过后,在向该工作区发送任何请求之前将其附加到新工作区。对于已经接收请求的工作区,密钥可能需要最多一天才能生效。
Pythonclient = anthropic.Anthropic() workspace = client.organization.workspaces.update( "<workspace-id>", external_key_id="ekey_<id>" ) print(f"id: {workspace.id}") print(f"external_key_id: {workspace.external_key_id}")
在 claude.ai > Organization settings > Data and privacy 中,打开 Encryption keys,然后单击 Add key。选择 Azure,输入验证步骤中的保管库 URI、密钥名称和租户 ID,然后单击 Continue。Anthropic 通过加密和解密往返来验证密钥。一旦显示为已验证,您的组织从那时起就受到 CMEK 保护。
在 Claude Enterprise 上,CMEK 适用于整个组织,因此没有单独的工作区附加步骤,并且一个组织只能有一个密钥。
Terraform
对于基础设施即代码部署,相同的步骤映射到 azurerm 和 azuread 提供程序。
Was this page helpful?