為 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 Resource Name (ARN)
若要讓 Anthropic 使用您的加密金鑰,您必須提供 Anthropic 的 IAM 角色一個可用於加密資料的 KMS 金鑰。Anthropic CMEK 的 ARN 為:
arn:aws:iam::915198916910:role/anthropic-cmek-client-us加密金鑰設定
建立具有跨帳戶金鑰政策的 KMS 金鑰
金鑰政策(key policy)會授予 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 一律會在加密上下文(encryption context)中包含您工作區的 compartment ID,因此無論如何,密文都會以密碼學方式綁定至該 compartment。加入此條件可在 IAM 層提供縱深防禦。若要先不使用此條件,請從AllowAnthropicCMEKCrypto陳述式中省略Condition區塊,之後再透過kms:PutKeyPolicy加入。您也可以從 AWS Console 建立金鑰。請選擇對稱金鑰、加密與解密金鑰用途、單一區域金鑰,以及 KMS 金鑰材料來源。Create-key 精靈會在其 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
對於基礎架構即程式碼(infrastructure-as-code)的部署,相同的步驟可對應至 aws provider 的 aws_kms_key 與 aws_kms_alias 資源。
Was this page helpful?