Claude Platform Docs
管理加密金鑰

為 CMEK 設定 AWS KMS

使用 AWS KMS 為您的組織提供加密金鑰。

Configure with the /claude-api skill in Claude Code
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"

本指南將逐步說明如何將 AWS KMS 金鑰設定為您 Anthropic 組織的「customer-managed encryption key」(客戶管理的加密金鑰),即 CMEK

先決條件

  • 一個具有建立 KMS 金鑰及設定金鑰政策權限(kms:CreateKeykms: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

加密金鑰設定

  1. 建立具有跨帳戶金鑰政策的 KMS 金鑰

    金鑰政策(key policy)會授予 Anthropic 的 IAM 角色跨帳戶存取權。需要以下三個陳述式:

    1. 帳戶根管理員: 標準的 KMS 模式。您的帳戶保有完整的管理控制權。
    2. Anthropic 加密與解密: kms:Encryptkms:Decrypt 動作,Anthropic 使用這些動作來加密與解密保護您工作區資料的資料金鑰(「envelope encryption」,即信封加密)。
    3. 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 條件)。

    AWS KMS Create key 精靈位於 Configure key 步驟,已選取 Symmetric 金鑰類型、Encrypt and decrypt 金鑰用途,以及 Single-Region key。
    Configure key(設定金鑰):symmetric(對稱)、encrypt and decrypt(加密與解密)、single-region key(單一區域金鑰)。
    AWS KMS Add labels 步驟,別名為 anthropic-cmek,描述為 Anthropic CMEK。
    為金鑰新增 alias(別名)與 description(描述)。
    AWS KMS Define key administrative permissions 步驟,列出可管理該金鑰的 IAM 角色。
    Define key administrative permissions(定義金鑰管理權限,選用)。您的帳戶保有完整的管理控制權。
    AWS KMS Define key usage permissions 步驟,在 Other AWS accounts 下輸入了 Anthropic 的帳戶 ID。
    請勿在此處加入 Anthropic 的帳戶 ID。此精靈步驟會產生權限過於寬鬆的政策。請將 usage permissions(使用權限)留空,並在建立後編輯 Key policy(金鑰政策)JSON(請參閱前述金鑰政策)。

向 Anthropic 註冊金鑰

註冊金鑰的方式取決於您使用的產品。

  1. 向 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>"
    }
  2. 驗證金鑰

    對您的金鑰觸發一次加密與解密的往返測試。

    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 針對您所設定之地理層級有營運的區域。
  3. 將金鑰附加至工作區

    金鑰驗證完成後,請在向新工作區傳送任何請求之前,將金鑰附加至該工作區。對於已在接收請求的工作區,金鑰可能需要最多一天才會生效

    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_keyaws_kms_alias 資源。

Was this page helpful?