claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"このガイドでは、Anthropic組織の「customer-managed encryption key」(顧客管理暗号化キー)、すなわちCMEKとしてAWS KMSキーを設定する手順を説明します。
CMEKの有効化は永続的です。KMSキーが削除または無効化された場合、Anthropicはそのキーで暗号化されたデータを復元できません。開始する前に、警告と制限事項を確認してください。
kms:CreateKeyおよびkms:PutKeyPolicy)を持つAWSアカウント。Anthropicに暗号化キーを使用させるには、AnthropicのIAMロールにデータ暗号化に使用できるKMSキーを付与する必要があります。Anthropic CMEKのARNは次のとおりです。
arn:aws:iam::915198916910:role/anthropic-cmek-client-usこの公開されたARNのみを使用してください。メール、チャット、またはオンボーディングチャネルで提供された識別子は決して信頼しないでください。
クロスアカウントキーポリシーを持つKMSキーを作成する
キーポリシーは、AnthropicのIAMロールにクロスアカウントアクセスを付与します。3つのステートメントが必要です。
kms:Encryptおよびkms:Decryptアクションです。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\": \"<compartment-uuid>\"
}
}
},
{
\"Sid\": \"AllowAnthropicCMEKDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\"
}
]
}"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-step-1>",
"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 }キーをワークスペースにアタッチする
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>"
}'Infrastructure-as-Codeデプロイメントの場合、同じ手順はawsプロバイダーのaws_kms_keyおよびaws_kms_aliasリソースにマッピングされます。
Was this page helpful?
出力からKeyMetadata.Arnを取得してください。次のステップでキーを登録する際に必要になります。
EncryptionContext条件は推奨されますが、オプションです。Anthropicは常にワークスペースのコンパートメントIDを暗号化コンテキストに含めるため、この条件の有無にかかわらず、暗号文はそのコンパートメントに暗号的にバインドされます。この条件を追加することで、IAMレイヤーでの多層防御が提供されます。条件なしで開始する場合は、AllowAnthropicCMEKCryptoステートメントからConditionブロックを省略し、後でkms:PutKeyPolicyを使用して追加してください。
コンパートメントIDの確認方法: 各ワークスペースには、そのCMEKデータのスコープを定めるコンパートメントIDがあります。Claude ConsoleのWorkspace > Security > Encryption keys(Compartment IDフィールド)で確認するか、Get Workspaceエンドポイントが返すcompartment_idフィールドを読み取ってください。上記のキーポリシーの<compartment-uuid>をその値に置き換えてください。Anthropicはキーの検証時にもこれを暗号化コンテキストとして送信するため、検証が成功するには条件の値が一致している必要があります。
AWSコンソールからキーを作成することもできます。対称キー、暗号化と復号のキー使用法、単一リージョンキー、KMSキーマテリアルオリジンを選択してください。キー作成ウィザードはReviewステップでキーポリシーをコミットします。そこでキー使用権限にAnthropicのアカウントID 915198916910を追加すると、生成されるポリシーはAnthropicアカウント全体に対して、EncryptionContext条件なしでより広範なアクション(kms:ReEncrypt*やkms:GenerateDataKey*など)を付与することになり、それでも検証は成功してしまいます。過剰な権限を持つキーを残さないために、ウィザードは管理権限のみで完了し、その後キーのKey policyタブを開いて、JSONを上記のロールスコープのポリシー(anthropic-cmek-client-usロールにスコープされた3つのステートメントとEncryptionContext条件を含むもの)に置き換えてください。




検証が失敗した場合、一般的な原因は次のとおりです。
EncryptionContext条件を残している場合、<compartment-uuid>をワークスペースの実際のコンパートメントIDに置き換えたことを確認してください(ステップ1を参照)。値が間違っているか置換されていない場合、KMSは不透明なAccessDeniedExceptionを返します。これを除外するには、AllowAnthropicCMEKCryptoステートメントからConditionブロックを一時的に削除して再検証してください。aws:PrincipalOrgIDが組織と一致しない場合にKMS操作を拒否するRCPがある場合、Anthropicのクロスアカウントロールがブロックされます。RCPには、このキーまたはAnthropicのロールARNに対する除外設定が必要です。サービスコントロールポリシーは、リソースベースのポリシーを通じて呼び出す外部プリンシパルに対しては評価されないため、ここでは適用されません。aws kms get-key-policy --key-id <id> --policy-name defaultで確認してください。