claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"本指南将引导您将 AWS KMS 密钥配置为您的 Anthropic 组织的"customer-managed encryption key"(客户管理的加密密钥),即 CMEK。
启用 CMEK 是永久性的。如果您的 KMS 密钥被删除或禁用,Anthropic 将无法恢复使用该密钥加密的数据。在开始之前,请查看警告和限制。
kms:CreateKey 和 kms:PutKeyPolicy)的 AWS 账户。要让 Anthropic 使用您的加密密钥,您必须为 Anthropic 的 IAM 角色提供一个可用于加密数据的 KMS 密钥。Anthropic CMEK 的 ARN 为:
arn:aws:iam::915198916910:role/anthropic-cmek-client-us仅使用此公开发布的 ARN。切勿信任通过电子邮件、聊天或任何入驻渠道提供的标识符。
使用跨账户密钥策略创建 KMS 密钥
该密钥策略授予 Anthropic 的 IAM 角色跨账户访问权限。需要三个语句:
kms:Encrypt 和 kms:Decrypt 操作,Anthropic 使用它们来加密和解密保护您工作区数据的数据密钥(信封加密)。DescribeKey 没有 EncryptionContext 参数,所以对此操作设置 EncryptionContext 条件将始终被拒绝。export YOUR_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
aws kms create-key \
--region <region> \
--description "Anthropic CMEK" \
--key-usage ENCRYPT_DECRYPT \
--policy "{
\"Version\": \"2012-10-17\",
\"Statement\": [
{
\"Sid\": \"AccountRootAdmin\",
\"Effect\": \"Allow\",
\"Principal\": {\"AWS\": \"arn:aws:iam::${YOUR_ACCOUNT}:root\"},
\"Action\": \"kms:*\",
\"Resource\": \"*\"
},
{
\"Sid\": \"AllowAnthropicCMEKCrypto\",
\"Effect\": \"Allow\",
\"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"},
\"Action\": [\"kms:Encrypt\", \"kms:Decrypt\"],
\"Resource\": \"*\",
\"Condition\": {
\"StringEquals\": {
\"kms:EncryptionContext:anthropic:compartment_uuid\": [
\"00000000-0000-0000-0000-000000000000\",
\"<compartment-uuid>\"
]
}
}
},
{
\"Sid\": \"AllowAnthropicCMEKDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\"
}
]
}"从输出中获取 KeyMetadata.Arn。在下一步向 Anthropic 注册密钥时需要用到它。
EncryptionContext 条件是推荐的但可选。Anthropic 始终在加密上下文中包含您工作区的 compartment ID,因此无论如何,密文在密码学上都绑定到该 compartment。添加该条件可在 IAM 层提供纵深防御。如果要在不使用该条件的情况下开始,请从 AllowAnthropicCMEKCrypto 语句中省略 Condition 块,稍后再使用 kms:PutKeyPolicy 添加。
查找您的 compartment ID: 查找 compartment ID 的位置在 Claude Platform 和 Claude Enterprise 之间有所不同。请参阅向 Anthropic 注册密钥下的 Claude Platform 和 Claude Enterprise 选项卡。
您也可以从 AWS Console 创建密钥。选择具有加密和解密密钥用途的对称密钥、单区域密钥以及 KMS 密钥材料来源。Create-key 向导会在其 Review 步骤提交密钥策略:如果您在该处的密钥使用权限下添加 Anthropic 的账户 ID 915198916910,生成的策略会向整个 Anthropic 账户授予更广泛的操作(例如 kms:ReEncrypt* 和 kms:GenerateDataKey*),且没有 EncryptionContext 条件,而验证仍然会成功通过。为避免留下权限过大的密钥,请仅使用管理权限完成向导,然后打开密钥的 Key policy 选项卡,将 JSON 替换为前面所示的限定角色范围的策略(限定到 anthropic-cmek-client-us 角色的三个语句,并带有 EncryptionContext 条件)。




注册密钥的方式取决于您使用的产品。
查找您的 compartment ID: 每个工作区都有一个用于限定其 CMEK 数据范围的 compartment ID。您可以在 Claude Console 的 Workspace > Security > Encryption keys(Compartment ID 字段)中找到它,或读取 Get Workspace 端点返回的 compartment_id 字段。在前面的密钥策略中,用该值替换 <compartment-uuid>。
密钥验证始终发送全零的 compartment UUID(00000000-0000-0000-0000-000000000000)作为加密上下文,因为验证在密钥附加到任何工作区之前运行。实时流量发送每个已附加工作区的 compartment ID。
任何 EncryptionContext 条件都必须允许全零值以及密钥所附加的每个工作区的 compartment ID。每当重新运行密钥设置时,验证也会再次运行,因此请永久保留全零条目。
要将密钥附加到其他工作区,请在附加之前使用 kms:PutKeyPolicy 将该工作区的 compartment ID 添加到条件中。
向 Anthropic 注册密钥
通过 Admin API 创建外部密钥配置。
对于使用 Claude Platform on AWS 的组织,外部密钥端点尚不可用。请改为在 Claude Console 中注册、验证和附加您的密钥。
curl -sS https://api.anthropic.com/v1/organizations/external_keys \
-H "x-api-key: <anthropic-admin-api-key>" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"display_name": "<friendly-name>",
"geo": "us",
"provider_config": {
"type": "aws",
"kms_arn": "<key-arn-from-create-key-step>",
"role_arn": "arn:aws:iam::915198916910:role/anthropic-cmek-client-us"
}
}'响应包含外部密钥 ID:
{
"type": "external_key",
"id": "ekey_<id>",
"display_name": "<friendly-name>"
}验证密钥
针对您的密钥触发一次加密和解密往返测试。
curl -sS -X POST https://api.anthropic.com/v1/organizations/external_keys/ekey_<id>/validate \
-H "x-api-key: <anthropic-admin-api-key>" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{}'成功的响应如下所示:
{ "type": "external_key_validation", "status": "success", "error": null }如果验证失败,常见原因包括:
kms:EncryptionContext:anthropic:compartment_uuid 条件仅允许 Anthropic 发送的两个值之一时,验证失败而数据流量正常(或相反),并出现不透明的 AccessDeniedException。验证发送全零 UUID(00000000-0000-0000-0000-000000000000);实时流量发送已附加工作区的 compartment ID。请确认条件中列出了这两个值。要完全排除该条件的影响,可暂时从 AllowAnthropicCMEKCrypto 语句中移除 Condition 块并重新验证。aws:PrincipalOrgID 与您的组织不匹配时拒绝 KMS 操作的 RCP,它会阻止 Anthropic 的跨账户角色。该 RCP 需要为此密钥或 Anthropic 的角色 ARN 设置例外。服务控制策略在此不适用,因为它们不会对通过基于资源的策略进行调用的外部主体进行评估。aws kms get-key-policy --key-id <id> --policy-name default 进行检查。将密钥附加到工作区
curl -sS -X POST https://api.anthropic.com/v1/organizations/workspaces/<workspace-id> \
-H "x-api-key: <anthropic-admin-api-key>" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"external_key_id": "ekey_<id>"
}'对于基础设施即代码部署,相同的步骤可映射到 aws 提供程序的 aws_kms_key 和 aws_kms_alias 资源。
Was this page helpful?