为 CMEK 配置 AWS KMS
使用 AWS KMS 为您的组织提供加密密钥。
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"本指南将逐步介绍如何将 AWS KMS 密钥配置为您的 Anthropic 组织的 "customer-managed encryption key"(客户管理的加密密钥),即 CMEK。
前提条件
- 一个拥有创建 KMS 密钥和设置密钥策略权限(
kms:CreateKey和kms:PutKeyPolicy)的 AWS 账户。 - 您组织的 Anthropic Admin API 密钥。
- 已安装并完成身份验证的 AWS CLI。
Anthropic 的 Amazon 资源名称(ARN)
要让 Anthropic 使用您的加密密钥,您必须为 Anthropic 的 IAM 角色提供一个可用于加密数据的 KMS 密钥。Anthropic CMEK 的 ARN 为:
arn:aws:iam::915198916910:role/anthropic-cmek-client-us加密密钥设置
创建带有跨账户密钥策略的 KMS 密钥
密钥策略授予 Anthropic 的 IAM 角色跨账户访问权限。需要以下三条语句:
- 账户根管理员: 标准的 KMS 模式。您的账户保留完全的管理控制权。
- Anthropic 加密和解密:
kms:Encrypt和kms:Decrypt操作,Anthropic 使用它们来加密和解密保护您工作区数据的数据密钥("envelope encryption",即信封加密)。 - Anthropic 描述: 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(隔区 ID),因此无论如何,密文都会以加密方式绑定到该隔区。添加该条件可在 IAM 层提供纵深防御。如果想先不使用该条件,请从AllowAnthropicCMEKCrypto语句中省略Condition块,之后再通过kms:PutKeyPolicy添加。您也可以从 AWS 控制台创建密钥。选择对称密钥,密钥用途为加密和解密,单区域密钥,密钥材料来源为 KMS。创建密钥向导会在其 Review(审核)步骤提交密钥策略:如果您在该处的密钥使用权限下添加 Anthropic 的账户 ID
915198916910,生成的策略会向整个 Anthropic 账户授予更广泛的操作(例如kms:ReEncrypt*和kms:GenerateDataKey*),且不带EncryptionContext条件,而验证仍会针对该策略成功通过。为避免留下权限过宽的密钥,请仅使用管理权限完成向导,然后打开密钥的 Key policy(密钥策略)选项卡,将 JSON 替换为前面所示的角色范围策略(即限定于anthropic-cmek-client-us角色并带有EncryptionContext条件的三条语句)。
Configure key(配置密钥):symmetric(对称)、encrypt and decrypt(加密和解密)、single-region key(单区域密钥)。 
为密钥添加 alias(别名)和 description(描述)。 
Define key administrative permissions(定义密钥管理权限,可选)。您的账户保留完全的管理控制权。 
请勿在此处添加 Anthropic 的账户 ID。此向导步骤会生成权限过宽的策略。请将 usage permissions(使用权限)留空,并在创建后编辑 Key policy(密钥策略)JSON(参见前面的密钥策略)。
向 Anthropic 注册密钥
注册密钥的方式取决于您使用的产品。
向 Anthropic 注册密钥
通过 Admin API 创建外部密钥配置。
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块并重新验证。 - 资源控制策略(RCP): 如果您的 AWS 组织有一个 RCP,在
aws:PrincipalOrgID与您的组织不匹配时拒绝 KMS 操作,它会阻止 Anthropic 的跨账户角色。该 RCP 需要为此密钥或 Anthropic 的角色 ARN 设置例外。服务控制策略在此不适用,因为它们不会对通过基于资源的策略进行调用的外部主体进行评估。 - 通过 IAM 而非密钥策略授予访问权限: 跨账户 KMS 访问权限必须在密钥策略本身中授予,而不是通过您账户中的 IAM 策略。请使用
aws kms get-key-policy --key-id <id> --policy-name default进行检查。 - 区域不匹配: 请确认密钥所在区域是 Anthropic 针对您配置的地理层级所运营的区域之一。
- 加密上下文不匹配: 当
将密钥附加到工作区
密钥验证通过后,请在向新工作区发送任何请求之前将其附加到该工作区。对于已经在接收请求的工作区,密钥可能需要最多一天才能生效。
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>" }'
Terraform
对于基础设施即代码部署,相同的步骤对应于 aws provider 中的 aws_kms_key 和 aws_kms_alias 资源。
Was this page helpful?