CMEK用のAWS KMSを設定する
AWS KMSを使用して、組織の暗号化キーを提供します。
Claude Code
Claude Codeにこの機能を設定させる
/claude-api AWS KMSで顧客管理暗号化キーを設定するのを手伝ってくださいこのガイドでは、AWS KMSキーをAnthropic組織の顧客管理暗号化キー(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条件を設定すると常に拒否されるため、別途付与されます。
AWSアカウントIDを確認するには、
aws sts get-caller-identity --query Account --output textを実行します。ポリシー内で、
<AWS_ACCOUNT_ID>をAWSアカウントIDに、<ORGANIZATION_UUID>を組織IDに置き換えます。kms:EncryptionContext:anthropic:org_uuidのStringEquals条件はキーをAnthropic組織にバインドし、検証ではこれがないキーを拒否します。1つのキーを複数のAnthropic組織で共有するには、条件値に各組織IDをリストします。ポリシーを
key-policy.jsonとして保存します。代わりにAWS Consoleでキーを作成するには、このステップの後半で説明するように、そこにポリシーを貼り付けます。key-policy.json{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccountRootAdmin", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>: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:org_uuid": ["<ORGANIZATION_UUID>"] } } }, { "Sid": "AllowAnthropicCMEKDescribe", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::915198916910:role/anthropic-cmek-client-us" }, "Action": "kms:DescribeKey", "Resource": "*" } ] }aws kms create-key \ --region <REGION> \ --description "Anthropic CMEK" \ --key-usage ENCRYPT_DECRYPT \ --policy file://key-policy.json出力から
KeyMetadata.Arnを取得します。次のステップでキーを登録する際に必要になります。Anthropicは、キーを検証するとき、またはワークスペースにアタッチするときにキーを検証します。各検証はCloudTrailに4つのアクセス拒否エラーを追加します。これらは想定されたものです。これらをフィルタリングする必要がある場合は、次の3つの値すべてでフィルタリングします。最初の値だけでは不十分です。なぜなら、どの呼び出し元でも設定できるからです。
requestParameters.encryptionContext.associatedData:Y21lay12YWxpZGF0aW9uuserIdentity.accountId:915198916910resources.ARN:arn:aws:kms:<REGION>:<AWS_ACCOUNT_ID>:key/<KEY_ID>
AWS Consoleからキーを作成することもできます。暗号化と復号のキー使用法を持つ対称キー、単一リージョンキー、およびKMSキーマテリアルオリジンを選択します。キー作成ウィザードはReviewステップでキーポリシーをコミットします。そこでキー使用権限の下にAnthropicのアカウントID
915198916910を追加すると、生成されたポリシーはAnthropicアカウント全体にEncryptionContext条件なしでより広範なアクション(kms:ReEncrypt*やkms:GenerateDataKey*など)を付与し、検証はそれを拒否します。過度に許可されたキーを残さないようにするには、管理権限のみでウィザードを完了し、キーのKey policyタブを開いて、JSONをこのステップの前半で示したkey-policy.jsonポリシーに置き換えます。
キーの設定: 対称、暗号化と復号、単一リージョンキー。 
キーのエイリアスと説明を追加します。 
キー管理権限を定義します(オプション)。アカウントは完全な管理制御を保持します。 
ここにAnthropicのアカウントIDを追加しないでください。このウィザードステップは過度に許可されたポリシーを生成します。使用権限を空のままにして、作成後にKey policy JSONを編集してください(前述のキーポリシーを参照)。
Anthropicにキーを登録する
キーの登録方法は、使用する製品によって異なります。
Claude ConsoleまたはAdmin APIを通じてキーをセットアップでき、結果は同じです。
Anthropicにキーを登録する
Claude Consoleで、Data retentionページ(
platform.claude.com/settings/privacy)に移動します。Encryption keysが表示されない場合は、ページ上部のドロップダウンメニューからOrganizationを選択します。Encryption keysの下でAdd keyをクリックします。表示名を入力し、AWS KMSを選択してContinueをクリックします。キーARNをKMS key ARNに貼り付け、Addをクリックします。キー詳細ステップには組織IDが表示されます。Addをクリックする前に、それをキーポリシーに追加してください。
キーを検証する
Encryption keysリストで、キーの横にあるVerifyをクリックします。チェックに合格するとConnectedが表示されます。失敗した場合は、メッセージに理由が表示されます。
キーをワークスペースにアタッチする
Claude Consoleで、Data retentionページ(
platform.claude.com/settings/privacy)に移動し、ページ上部のドロップダウンメニューからワークスペースを選択します。Encryption keyの下でキーを選択し、Saveをクリックして確認します。キーのアタッチは元に戻せません。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大1日かかることがあります。
Anthropicにキーを登録する
Admin APIを通じて外部キー設定を作成します。
Pythonclient = anthropic.Anthropic() external_key = client.organization.external_keys.create( display_name="<friendly-name>", geo="us", provider_config={"type": "aws", "kms_arn": "<key-arn-from-create-key-step>"}, ) print(f"id: {external_key.id}") print(f"display_name: {external_key.display_name}")レスポンスには外部キーIDが含まれます。
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }キーを検証する
キーに対して暗号化と復号のラウンドトリップをトリガーします。
Pythonclient = anthropic.Anthropic() validation = client.organization.external_keys.validate("ekey_<id>") print(f"status: {validation.status}") print(f"error: {validation.error}")成功したレスポンスは次のようになります。
{ "type": "external_key_validation", "status": "success", "error": null }検証が失敗した場合、一般的な原因は次のとおりです。
- 暗号化コンテキストの不一致: ポリシーに
kms:EncryptionContext:anthropic:compartment_uuid条件がある場合、キーがアタッチされている各ワークスペースのコンパートメントIDがリストされていることを確認してください。検証はチェックするワークスペースのコンパートメントIDを送信します。コンパートメントステートメントがまだkms:Encryptを許可している古いキーは、アタッチされていない間はすべてゼロの値(00000000-0000-0000-0000-000000000000)で検証されるため、その値をリストに保持してください。 - リソースコントロールポリシー(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つであることを確認してください。
- 暗号化コンテキストの不一致: ポリシーに
キーをワークスペースにアタッチする
キーが検証されたら、そのワークスペースにリクエストを送信する前に、新しいワークスペースにアタッチします。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大1日かかることがあります。
Pythonclient = anthropic.Anthropic() workspace = client.organization.workspaces.update( "<workspace-id>", external_key_id="ekey_<id>" ) print(f"id: {workspace.id}") print(f"external_key_id: {workspace.external_key_id}")
claude.ai > Organization settings > Data and privacyで、Encryption keysを開き、Add keyをクリックします。AWSを選択してContinueをクリックし、前のステップのKey ARNを貼り付けてAddをクリックします。Anthropicは暗号化と復号のラウンドトリップでキーを検証します。検証済みと表示されると、その時点から組織はCMEKで保護されます。
このフローのキー詳細ステップには、コピーボタン付きでOrganization ID for the key policyが表示されます。その値をキーポリシーの<ORGANIZATION_UUID>に置き換えます。キーを作成する前にフローを開いてIDをコピーできます。
Claude Enterpriseでは、CMEKは組織全体に適用されるため、個別のワークスペースアタッチステップはなく、組織は1つのキーのみを持つことができます。
Claude Platform on AWSでCMEKを設定する
Claude Platform on AWSでは、CMEKはAWS KMSキーのみを使用し、セットアップは前述のセクションと次の点で異なります。
- プリンシパル: キーポリシーはAWSサービスプリンシパル
aws-external-anthropic.amazonaws.comにアクセスを付与します。AnthropicのIAMロールとアカウントIDは使用されないため、Anthropic用のARNは適用されません。 - キー要件: キーは、暗号化と復号の使用法を持つ対称KMSキーで、単一リージョンであり、アタッチするワークスペースと同じAWSアカウントおよびリージョンにある必要があります。クロスアカウントキーはサポートされていません。キーは組織をホストするAWSアカウントにある必要があります。マルチリージョンキー(
mrk-で始まるキーID)とエイリアスARNは、キーを登録するときに拒否されます。キーARNを使用してください。 - 個別の検証ステップなし: 登録時のキーARNに対するこれらのチェックを除き、キーはワークスペースにアタッチするときに検証されます。アタッチ呼び出しは、そのワークスペースのコンパートメントIDを暗号化コンテキストとしてキーに対して暗号化/復号ラウンドを実行するため、キーポリシーの問題は登録時ではなくアタッチ時に表面化します。したがって、
EncryptionContext条件にはすべてゼロのエントリは必要ありません。 - キーの管理場所: Adminロールを使用してAWS経由でサインインし、Claude Consoleでキーを登録してアタッチします。外部キーエンドポイントはClaude Platform on AWSでも利用可能で、IAMアクションを通じて認可されます。そこでは、キーは
ekey_IDではなくKMSキーARNで識別されます。
前提条件
- Claude Platform on AWS組織をホストするAWSアカウントで、KMSキーを作成しキーポリシーを設定する権限(
kms:CreateKeyおよびkms:PutKeyPolicy)を持つもの。 - Claude Platform on AWS用のClaude ConsoleのAdminロール。Claude Consoleの使用を参照してください。
- Claude Consoleへのサインインに使用するIAMプリンシパルには、
aws-external-anthropic:AssumeConsoleに加えて、そこで実行する操作のIAMアクションが必要です。キーの登録、一覧表示、アタッチはAWSゲートウェイを経由するためです。キーの登録はRegisterKey(登録を表示するにはListKeysとGetKey)、キーのアタッチはUpdateWorkspaceまたはCreateWorkspaceです。外部キーアクション(およびCreateWorkspace)はアカウントスコープであるため、Resource: "*"に対して付与してください。ワークスペースARNに限定されたポリシーにはこれらは含まれません。 - キーをワークスペースにアタッチするIAMプリンシパル(Claude Consoleにサインインしたアイデンティティ)について: キーに対する
kms:DescribeKey、kms:Encrypt、およびkms:Decrypt。アタッチ時には、サービスプリンシパルに加えて、プリンシパルのキーへのアクセスがチェックされます。 - オプション、Claude Consoleのキーピッカー用: サインインするプリンシパルの
kms:ListKeysおよびkms:DescribeKey。これらがない場合は、代わりにキーARNを貼り付けてください。
KMSキーを作成する
キーポリシーには3つのステートメントがあります。アカウントのルート管理者ステートメント、Claude Platform on AWSサービスプリンシパルがデータキーの暗号化、復号、生成を行えるようにするステートメント、そしてkms:DescribeKey用の個別のステートメントです。暗号化ステートメントには、リストしたワークスペースにキーをバインドするオプションのEncryptionContext条件が含まれます。DescribeKeyにはEncryptionContextパラメータがなく、そのアクションにEncryptionContext条件を付けると常に拒否されるため、個別に付与されます。
ここに示すオプションのEncryptionContext条件を使用する予定の場合は、まずワークスペースを(キーなしで)作成し、そのコンパートメントIDをコピーして、<compartment-uuid>を置き換えてください。Claude ConsoleでIDを確認するには、Data retentionページ(platform.claude.com/settings/privacy)に移動し、ページ上部のドロップダウンメニューからワークスペースを選択します。IDはEncryption keyの下のCompartment IDフィールドにあります。Get Workspaceエンドポイントが返すcompartment_idフィールドから読み取ることもできます。条件を使用する予定がない場合は、そのステートメントからConditionブロックを削除してください。
export YOUR_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
aws kms create-key \
--region <workspace-region> \
--description "Anthropic CMEK (Claude Platform on AWS)" \
--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\": \"AllowClaudePlatformOnAWSCrypto\",
\"Effect\": \"Allow\",
\"Principal\": {\"Service\": \"aws-external-anthropic.amazonaws.com\"},
\"Action\": [\"kms:Encrypt\", \"kms:Decrypt\", \"kms:GenerateDataKey\"],
\"Resource\": \"*\",
\"Condition\": {
\"StringEquals\": {
\"kms:EncryptionContext:anthropic:compartment_uuid\": [
\"<compartment-uuid>\"
]
}
}
},
{
\"Sid\": \"AllowClaudePlatformOnAWSDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"Service\": \"aws-external-anthropic.amazonaws.com\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\"
}
]
}"出力からKeyMetadata.Arnを取得します。キーを登録する際に必要になります。
EncryptionContext条件はオプションです。アタッチ時のチェックを含め、ワークスペースに対して行われるすべての暗号化、復号、データキーの呼び出しには、そのワークスペースのコンパートメントIDがanthropic:compartment_uuidとして含まれます。そのため、条件にはキーをアタッチする各ワークスペースのコンパートメントIDを列挙し、すべてゼロのエントリは必要ありません。この条件を追加すると、IAMレイヤーでもリストしたワークスペースにキーがバインドされます。コンパートメントIDはワークスペースが存在して初めて存在するため、順序は次のとおりです。ワークスペースを作成し、そのコンパートメントIDを条件に入れ(キー作成時、または後でkms:PutKeyPolicyを使用して)、その後キーをアタッチします。追加の各ワークスペースにキーをアタッチする前に、同じ方法でそのワークスペースのコンパートメントIDを追加してください。条件なしで始めるには、AllowClaudePlatformOnAWSCryptoステートメントからConditionブロックを削除します。後で追加する場合は、キーがすでにアタッチされているすべてのワークスペースのコンパートメントIDを含めてください。
aws:SourceArn条件を使用して、両方のサービスプリンシパルステートメントをさらに制限できます。サービスは、キーを使用して行うすべての呼び出しで、ワークスペースのARN(arn:aws:aws-external-anthropic:<region>:<account-id>:workspace/<workspace-id>)をソースARNとして渡します。そのため、"ArnLike": {"aws:SourceArn": "arn:aws:aws-external-anthropic:*:<account-id>:workspace/*"}は付与を自分のAWSアカウント内のワークスペースに限定し、完全なワークスペースARNのリストは付与をそれらのワークスペースに限定します。この条件は必須ではありません。EncryptionContext条件だけで、リストしたワークスペースにキーがバインドされます。
AWS Consoleからキーを作成することもできます。ワークスペースのリージョンで、暗号化と復号のキー使用法を持つ対称キー、単一リージョンキー、およびKMSキーマテリアルオリジンを選択します。キー作成ウィザードでキー使用権限を空のままにして、キーのKey policyタブを開き、JSONをここに示すポリシーに置き換えます。
キーを登録してアタッチする
キーを登録する
Claude Consoleで、Data retentionページ(
platform.claude.com/settings/privacy)に移動します。Encryption keysが表示されない場合は、ページ上部のドロップダウンメニューからOrganizationを選択します。Encryption keysの下でAdd keyをクリックします。表示名を入力し、キーピッカーからキーを選択するか、Enter ARN manuallyを選択してキーARNを貼り付け、Addをクリックします。キーは組織をホストするAWSアカウントにある必要があります。クロスアカウントキーはサポートされていません。ピッカーには、組織のいずれかのリージョンにある、アカウント内の有効な顧客管理の対称単一リージョンキーが一覧表示されます。ピッカーに表示されないキーの場合は、ARNを入力してください。ピッカーにキーが表示されるのは、サインインに使用したプリンシパルがkms:ListKeysとkms:DescribeKeyを呼び出せる場合のみです。キーをワークスペースにアタッチする
新しいワークスペースにリクエストを送信する前に、そのワークスペースにキーをアタッチします。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大1日かかることがあります。Claude Consoleで、Data retentionページ(
platform.claude.com/settings/privacy)に移動し、ページ上部のドロップダウンメニューからワークスペースを選択します。Encryption keyの下でキーを選択し、Saveをクリックして確認します。Claude Consoleでワークスペースを作成するときにキーを選択することもできますが、ワークスペースのコンパートメントIDは作成時に割り当てられるため、キーポリシーがまだ特定のワークスペースを指定していない場合(EncryptionContext条件がない場合)に限ります。一度アタッチすると、ワークスペースのキーは変更できません。これがキーが検証されるときです。アタッチ呼び出しは、プリンシパルのキーへのアクセスをチェックし、ワークスペースのコンパートメントIDを暗号化コンテキストとしてキーに対して暗号化/復号ラウンドを実行するため、キーポリシーまたはプリンシパルの権限のいずれかの問題がその呼び出しでエラーとして表面化します。アタッチがKMSアクセスエラーで失敗した場合は、次を確認してください。
- キーポリシーが
aws-external-anthropic.amazonaws.comサービスプリンシパルを指定し、kms:Encrypt、kms:Decrypt、およびkms:GenerateDataKeyを付与し、さらにEncryptionContext条件のない個別のステートメントでkms:DescribeKeyを付与していること。 EncryptionContext条件を使用している場合は、その条件にこのワークスペースのコンパートメントIDが含まれていること。aws:SourceArn条件を追加した場合は、その条件がこのワークスペースのARNと一致していること。- キーが有効で、単一リージョンであり、ワークスペースと同じAWSアカウントおよびリージョンにあること。
- サインインしているプリンシパルがキーに対する
kms:DescribeKey、kms:Encrypt、およびkms:Decryptを持っていること。 - AWS組織内のサービスコントロールポリシーまたはリソースコントロールポリシーが、サービスプリンシパルまたはプリンシパルがキーを使用することを妨げていないこと。
- ポリシーが正しいように見えてもアタッチが失敗する場合は、キーのアカウントのCloudTrailで拒否された
kms:イベントを見つけ(呼び出し元のプリンシパルと、暗号化呼び出しの場合は暗号化コンテキストが表示されます)、kms:PutKeyPolicyで条件を修正して再試行してください。
- キーポリシーが
Terraform
Infrastructure-as-codeデプロイメントの場合、同じ手順はaws_kms_keyおよびaws_kms_aliasリソースを持つawsプロバイダーにマッピングされます。
Was this page helpful?