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: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

暗号化キーのセットアップ

  1. クロスアカウントキーポリシーを使用してKMSキーを作成する

    キーポリシーは、AnthropicのIAMロールにクロスアカウントアクセスを付与します。3つのステートメントが必要です。

    1. アカウントルート管理者: 標準的なKMSパターンです。お客様のアカウントが完全な管理制御を保持します。
    2. Anthropicの暗号化と復号: kms:Encryptおよびkms:Decryptアクション。Anthropicはこれらを使用して、ワークスペースデータを保護するデータキーを暗号化および復号します(エンベロープ暗号化)。
    3. Anthropicのdescribe: 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を取得してください。次のステップでキーを登録する際に必要になります。

    EncryptionContext条件は推奨されますが、任意です。Anthropicは常にワークスペースのコンパートメントIDを暗号化コンテキストに含めるため、いずれにしても暗号文はそのコンパートメントに暗号学的にバインドされます。条件を追加すると、IAMレイヤーでの多層防御が提供されます。条件なしで開始するには、AllowAnthropicCMEKCryptoステートメントからConditionブロックを省略し、後でkms:PutKeyPolicyを使用して追加してください。

    AWSコンソールからキーを作成することもできます。暗号化と復号のキー用途を持つ対称キー、単一リージョンキー、およびKMSキーマテリアルオリジンを選択してください。キー作成ウィザードはReview(確認)ステップでキーポリシーをコミットします。そこでキー使用権限にAnthropicのアカウントID 915198916910を追加すると、生成されるポリシーはEncryptionContext条件なしでAnthropicアカウント全体により広範なアクション(kms:ReEncrypt*kms:GenerateDataKey*など)を付与し、それに対しても検証は成功してしまいます。過剰に許可されたキーを残さないようにするには、管理権限のみでウィザードを完了し、その後キーのKey policy(キーポリシー)タブを開いて、JSONを前述のロールスコープのポリシー(anthropic-cmek-client-usロールにスコープされた3つのステートメントとEncryptionContext条件)に置き換えてください。

    AWS KMSのキー作成ウィザードの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の送信する2つの値のうち一方しか許可していない場合、不透明なAccessDeniedExceptionとともに、データトラフィックは機能するのに検証が失敗する(またはその逆)という状況になります。検証はすべてゼロのUUID(00000000-0000-0000-0000-000000000000)を送信し、実際のトラフィックはアタッチされたワークスペースのコンパートメントIDを送信します。条件に両方が記載されていることを確認してください。条件を完全に除外して切り分けるには、AllowAnthropicCMEKCryptoステートメントからConditionブロックを一時的に削除して再検証してください。
    • リソースコントロールポリシー(RCP): AWS組織に、aws:PrincipalOrgIDが自組織と一致しない場合にKMS操作を拒否するRCPがある場合、Anthropicのクロスアカウントロールがブロックされます。RCPには、このキーまたはAnthropicのロールARNに対する例外が必要です。サービスコントロールポリシーは、リソースベースのポリシーを通じて呼び出す外部プリンシパルに対しては評価されないため、ここでは適用されません。
    • キーポリシーではなくIAMを通じてアクセスが付与されている: クロスアカウントのKMSアクセスは、お客様のアカウント内のIAMポリシーではなく、キーポリシー自体で付与する必要があります。aws kms get-key-policy --key-id <id> --policy-name defaultで確認してください。
    • リージョンの不一致: キーのリージョンが、設定したジオティアに対してAnthropicが運用しているリージョンであることを確認してください。
  3. キーをワークスペースにアタッチする

    キーが検証されたら、そのワークスペースにリクエストを送信する前に、新しいワークスペースにキーをアタッチしてください。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大1日かかることがあります。

    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プロバイダーのaws_kms_keyおよびaws_kms_aliasリソースに対応します。

Was this page helpful?