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キーを作成する
キーポリシーは、AnthropicのIAMロールにクロスアカウントアクセスを付与します。3つのステートメントが必要です。
- アカウントルート管理者: 標準的なKMSパターンです。お客様のアカウントが完全な管理制御を保持します。
- Anthropicの暗号化と復号:
kms:Encryptおよびkms:Decryptアクション。Anthropicはこれらを使用して、ワークスペースデータを保護するデータキーを暗号化および復号します(エンベロープ暗号化)。 - 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条件)に置き換えてください。
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の送信する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が運用しているリージョンであることを確認してください。
- 暗号化コンテキストの不一致:
キーをワークスペースにアタッチする
キーが検証されたら、そのワークスペースにリクエストを送信する前に、新しいワークスペースにキーをアタッチしてください。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大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?