Configurer AWS KMS pour CMEK
Utilisez AWS KMS pour fournir une clé de chiffrement à votre organisation.
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"Ce guide explique comment configurer une clé AWS KMS en tant que clé de chiffrement gérée par le client (CMEK) pour votre organisation Anthropic.
Prérequis
- Un compte AWS avec les autorisations de créer des clés KMS et de définir des politiques de clé (
kms:CreateKeyetkms:PutKeyPolicy). - Une clé API Admin Anthropic pour votre organisation.
- L'AWS CLI installée et authentifiée.
Amazon Resource Name (ARN) pour Anthropic
Pour qu'Anthropic utilise votre clé de chiffrement, vous devez donner au rôle IAM d'Anthropic une clé KMS qu'il peut utiliser pour chiffrer les données. L'ARN pour Anthropic CMEK est :
arn:aws:iam::915198916910:role/anthropic-cmek-client-usConfiguration de la clé de chiffrement
Créer la clé KMS avec une politique de clé inter-comptes
La politique de clé accorde au rôle IAM d'Anthropic un accès inter-comptes. Trois déclarations sont requises :
- Administrateur racine du compte : le modèle KMS standard. Votre compte conserve le contrôle administratif complet.
- Chiffrement et déchiffrement Anthropic : les actions
kms:Encryptetkms:Decrypt, qu'Anthropic utilise pour chiffrer et déchiffrer les clés de données qui protègent les données de votre espace de travail (chiffrement par enveloppe). - Description Anthropic : la lecture des métadonnées qu'Anthropic effectue au démarrage. Elle est accordée séparément car
DescribeKeyn'a pas de paramètreEncryptionContext, donc une conditionEncryptionContextsur cette action refuserait toujours.
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\": \"*\" } ] }"Capturez
KeyMetadata.Arnà partir de la sortie. Vous en avez besoin lorsque vous enregistrez la clé à l'étape suivante.La condition
EncryptionContextest recommandée mais facultative. Anthropic inclut toujours l'ID de compartiment de votre espace de travail dans le contexte de chiffrement, de sorte que le texte chiffré est cryptographiquement lié à ce compartiment quoi qu'il arrive. L'ajout de la condition fournit une défense en profondeur au niveau IAM. Pour commencer sans elle, omettez le blocConditionde la déclarationAllowAnthropicCMEKCryptoet ajoutez-le plus tard aveckms:PutKeyPolicy.Vous pouvez également créer la clé depuis la console AWS. Choisissez une clé symétrique avec l'utilisation de clé de chiffrement et de déchiffrement, une clé à région unique et une origine de matériel de clé KMS. L'assistant de création de clé valide une politique de clé à son étape Révision : si vous ajoutez l'ID de compte Anthropic
915198916910sous les autorisations d'utilisation de clé à cet endroit, la politique générée accorde à l'ensemble du compte Anthropic des actions plus larges (telles quekms:ReEncrypt*etkms:GenerateDataKey*) sans conditionEncryptionContext, et la validation réussirait toujours avec celle-ci. Pour éviter de laisser une clé trop permissive, terminez l'assistant avec uniquement les autorisations administratives, puis ouvrez l'onglet Politique de clé de la clé et remplacez le JSON par la politique limitée au rôle présentée précédemment (les trois déclarations limitées au rôleanthropic-cmek-client-us, avec la conditionEncryptionContext).
Configurer la clé : symétrique, chiffrement et déchiffrement, clé à région unique. 
Ajoutez un alias et une description pour la clé. 
Définissez les autorisations administratives de clé (facultatif). Votre compte conserve le contrôle administratif complet. 
N'ajoutez pas l'ID de compte Anthropic ici. Cette étape de l'assistant produit une politique trop permissive. Laissez les autorisations d'utilisation vides et modifiez le JSON de la politique de clé après la création (voir la politique de clé précédente).
Enregistrer la clé auprès d'Anthropic
La façon dont vous enregistrez la clé dépend du produit que vous utilisez.
Enregistrer la clé auprès d'Anthropic
Créez une configuration de clé externe via l'API Admin.
client = anthropic.Anthropic() external_key = client.beta.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}")La réponse contient l'ID de clé externe :
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }Valider la clé
Déclenchez un aller-retour de chiffrement et de déchiffrement avec votre clé.
client = anthropic.Anthropic() validation = client.beta.organization.external_keys.validate("ekey_<id>") print(f"status: {validation.status}") print(f"error: {validation.error}")Une réponse réussie ressemble à ceci :
{ "type": "external_key_validation", "status": "success", "error": null }Si la validation échoue, les causes courantes sont :
- Incompatibilité du contexte de chiffrement : La validation échoue alors que le trafic de données fonctionne (ou l'inverse) avec une
AccessDeniedExceptionopaque lorsqu'une conditionkms:EncryptionContext:anthropic:compartment_uuidn'autorise qu'une seule des deux valeurs qu'Anthropic envoie. La validation envoie l'UUID composé uniquement de zéros (00000000-0000-0000-0000-000000000000) ; le trafic en direct envoie l'ID de compartiment de l'espace de travail attaché. Confirmez que la condition liste les deux. Pour écarter complètement la condition, supprimez temporairement le blocConditionde la déclarationAllowAnthropicCMEKCryptoet revalidez. - Politiques de contrôle des ressources (RCP) : Si votre organisation AWS a une RCP qui refuse les opérations KMS lorsque
aws:PrincipalOrgIDne correspond pas à votre organisation, elle bloque le rôle inter-comptes d'Anthropic. La RCP a besoin d'une exception pour cette clé ou pour l'ARN du rôle d'Anthropic. Les politiques de contrôle de service ne s'appliquent pas ici, car elles ne s'évaluent pas pour les principaux externes appelant via des politiques basées sur les ressources. - Accès accordé via IAM au lieu de la politique de clé : L'accès KMS inter-comptes doit être accordé dans la politique de clé elle-même, et non via une politique IAM dans votre compte. Vérifiez avec
aws kms get-key-policy --key-id <id> --policy-name default. - Incompatibilité de région : Confirmez que la région de la clé est une région dans laquelle Anthropic opère pour le niveau géographique que vous avez configuré.
- Incompatibilité du contexte de chiffrement : La validation échoue alors que le trafic de données fonctionne (ou l'inverse) avec une
Attacher la clé à un espace de travail
Une fois la clé validée, attachez-la à un nouvel espace de travail avant d'envoyer des requêtes à cet espace de travail. Pour un espace de travail qui reçoit déjà des requêtes, la clé peut prendre jusqu'à une journée pour prendre effet.
client = anthropic.Anthropic() workspace = client.beta.organization.workspaces.update( "<workspace-id>", external_key_id="ekey_<id>" ) print(f"id: {workspace.id}") print(f"external_key_id: {workspace.external_key_id}")
Configurer CMEK sur Claude Platform on AWS
Sur Claude Platform on AWS, CMEK utilise uniquement des clés AWS KMS, et la configuration diffère des sections précédentes de ces manières :
- Principal : Votre politique de clé accorde l'accès au principal de service AWS
aws-external-anthropic.amazonaws.com. Le rôle IAM et l'ID de compte d'Anthropic ne sont pas utilisés, donc l'ARN pour Anthropic ne s'applique pas. - Exigences de clé : La clé doit être une clé KMS symétrique avec utilisation de chiffrement et de déchiffrement, à région unique, et dans le même compte et la même région AWS que l'espace de travail auquel vous l'attachez. Les clés inter-comptes ne sont pas prises en charge : la clé doit être dans le compte AWS qui héberge votre organisation. Les clés multi-régions (ID de clé commençant par
mrk-) et les ARN d'alias sont rejetés lorsque vous enregistrez la clé ; utilisez l'ARN de clé. - Pas d'étape de validation distincte : Hormis ces vérifications sur l'ARN de clé lors de l'enregistrement, la clé est validée lorsque vous l'attachez à un espace de travail. L'appel d'attachement effectue un aller-retour de chiffrement/déchiffrement avec la clé en utilisant l'ID de compartiment de cet espace de travail comme contexte de chiffrement, de sorte qu'un problème de politique de clé apparaît au moment de l'attachement plutôt qu'à l'enregistrement. Contrairement à la politique Claude Platform plus haut sur cette page, une condition
EncryptionContextn'a donc pas besoin d'entrée composée uniquement de zéros. - Où vous gérez les clés : Enregistrez et attachez les clés dans la Claude Console, connecté via AWS avec le rôle Admin. Les points de terminaison de clé externe sont également disponibles sur Claude Platform on AWS, autorisés via les actions IAM ; là, une clé est identifiée par son ARN de clé KMS plutôt que par un ID
ekey_.
Prérequis
- Le compte AWS qui héberge votre organisation Claude Platform on AWS, avec les autorisations de créer des clés KMS et de définir des politiques de clé (
kms:CreateKeyetkms:PutKeyPolicy). - Le rôle Admin dans la Claude Console pour Claude Platform on AWS. Consultez Utiliser la Claude Console.
- Pour le principal IAM avec lequel vous vous connectez à la Claude Console : outre
aws-external-anthropic:AssumeConsole, les actions IAM pour les opérations que vous y effectuez, car la page Clés de chiffrement et l'attachement de clé passent par la passerelle AWS. L'enregistrement d'une clé estRegisterKey(avecListKeysetGetKeypour afficher les enregistrements), et l'attachement d'une clé estUpdateWorkspaceouCreateWorkspace. Les actions de clé externe (etCreateWorkspace) sont limitées au compte, alors accordez-les surResource: "*"; une politique limitée aux ARN d'espace de travail ne les inclut pas. - Pour le principal IAM qui attache la clé à un espace de travail (l'identité avec laquelle vous vous êtes connecté à la Claude Console) :
kms:DescribeKey,kms:Encryptetkms:Decryptsur la clé. L'accès de votre principal à la clé est vérifié lorsque vous l'attachez, en plus de celui du principal de service. - Facultatif, pour le sélecteur de clé dans la Claude Console :
kms:ListKeysetkms:DescribeKeypour le principal avec lequel vous vous connectez. Sans eux, collez l'ARN de clé à la place.
Créer la clé KMS
La politique de clé comporte trois déclarations : la déclaration d'administrateur racine de votre compte ; une déclaration qui permet au principal de service Claude Platform on AWS de chiffrer, déchiffrer et générer des clés de données ; et une déclaration distincte pour kms:DescribeKey. Les deux déclarations de principal de service portent une condition aws:SourceArn recommandée : le service appelle votre clé au nom d'un espace de travail spécifique et transmet l'ARN de cet espace de travail comme ARN source, de sorte que le modèle présenté limite l'octroi aux espaces de travail de votre propre compte AWS. DescribeKey est accordé séparément car il n'a pas de paramètre EncryptionContext, donc une condition EncryptionContext sur cette action refuserait toujours.
Si vous prévoyez d'utiliser la condition EncryptionContext facultative présentée ici, créez d'abord l'espace de travail (sans clé) et copiez son ID de compartiment depuis la Claude Console sous Espace de travail > Sécurité, sous Clé de chiffrement (le champ ID de compartiment), ou depuis le champ compartment_id renvoyé par le point de terminaison Get Workspace. Remplacez-le par <compartment-uuid>. Sinon, supprimez l'entrée StringEquals du bloc Condition de cette déclaration et conservez l'entrée ArnLike.
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\": {
\"ArnLike\": {
\"aws:SourceArn\": \"arn:aws:aws-external-anthropic:*:${YOUR_ACCOUNT}:workspace/*\"
},
\"StringEquals\": {
\"kms:EncryptionContext:anthropic:compartment_uuid\": [
\"<compartment-uuid>\"
]
}
}
},
{
\"Sid\": \"AllowClaudePlatformOnAWSDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"Service\": \"aws-external-anthropic.amazonaws.com\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\",
\"Condition\": {
\"ArnLike\": {
\"aws:SourceArn\": \"arn:aws:aws-external-anthropic:*:${YOUR_ACCOUNT}:workspace/*\"
}
}
}
]
}"Capturez KeyMetadata.Arn à partir de la sortie. Vous en avez besoin lorsque vous enregistrez la clé.
Les deux conditions sont un renforcement facultatif, et elles se composent. La condition aws:SourceArn peut être écrite avant qu'un espace de travail n'existe ; pour épingler la clé à des espaces de travail particuliers au lieu de l'ensemble de votre compte, listez leurs ARN d'espace de travail complets à la place du modèle générique, et pour commencer sans elle, supprimez l'entrée ArnLike des deux déclarations de principal de service (en supprimant un bloc Condition que cela laisse vide). La condition EncryptionContext est également facultative. Chaque appel de chiffrement, de déchiffrement et de clé de données effectué pour un espace de travail, y compris la vérification au moment de l'attachement, porte l'ID de compartiment de cet espace de travail comme anthropic:compartment_uuid, de sorte que la condition liste l'ID de compartiment de chaque espace de travail auquel vous attachez la clé et n'a pas besoin d'entrée composée uniquement de zéros. L'ajouter lie la clé aux espaces de travail que vous listez au niveau IAM également. Comme un ID de compartiment n'existe qu'une fois que son espace de travail existe, l'ordre est : créer l'espace de travail, mettre son ID de compartiment dans la condition (à la création de la clé, ou plus tard avec kms:PutKeyPolicy), puis attacher la clé. Avant d'attacher la clé à chaque espace de travail supplémentaire, ajoutez l'ID de compartiment de cet espace de travail de la même manière. Pour commencer sans elle, supprimez l'entrée StringEquals du bloc Condition de la déclaration AllowClaudePlatformOnAWSCrypto ; si vous l'ajoutez plus tard, incluez l'ID de compartiment de chaque espace de travail auquel la clé est déjà attachée.
Vous pouvez également créer la clé depuis la console AWS : choisissez une clé symétrique avec l'utilisation de clé de chiffrement et de déchiffrement, une clé à région unique et une origine de matériel de clé KMS, dans la région de l'espace de travail. Laissez les autorisations d'utilisation de clé vides dans l'assistant de création de clé, puis ouvrez l'onglet Politique de clé de la clé et remplacez le JSON par la politique présentée ici.
Enregistrer et attacher la clé
Enregistrer la clé
Dans la Claude Console, ouvrez Paramètres > Clés de chiffrement et cliquez sur Ajouter une clé. Saisissez un nom d'affichage, puis choisissez la clé dans le sélecteur de clé ou choisissez Saisir l'ARN manuellement et collez l'ARN de clé, puis cliquez sur Ajouter. La clé doit être dans le compte AWS qui héberge votre organisation ; les clés inter-comptes ne sont pas prises en charge. Le sélecteur liste les clés activées, gérées par le client, symétriques et à région unique de votre compte dans l'une des régions de votre organisation ; pour une clé que le sélecteur ne liste pas, saisissez l'ARN. Il ne liste les clés que si le principal avec lequel vous vous êtes connecté peut appeler
kms:ListKeysetkms:DescribeKey.Attacher la clé à un espace de travail
Attachez la clé à un nouvel espace de travail avant d'envoyer des requêtes à cet espace de travail. Pour un espace de travail qui reçoit déjà des requêtes, la clé peut prendre jusqu'à une journée pour prendre effet. Dans la Claude Console, ouvrez l'espace de travail et, sous Sécurité, sélectionnez la clé dans Clé de chiffrement, enregistrez et confirmez. Vous pouvez également sélectionner une clé lorsque vous créez un espace de travail dans la Claude Console, mais uniquement si votre politique de clé ne nomme pas encore d'espaces de travail spécifiques (pas de condition
EncryptionContext, et le modèleaws:SourceArnà l'échelle du compte plutôt que des ARN d'espace de travail individuels), car l'ID de l'espace de travail et l'ID de compartiment sont attribués à la création. Une fois attachée, la clé d'un espace de travail ne peut pas être modifiée.C'est à ce moment que la clé est validée : l'appel d'attachement vérifie l'accès de votre principal à la clé et effectue un aller-retour de chiffrement/déchiffrement avec celle-ci en utilisant l'ID de compartiment de l'espace de travail comme contexte de chiffrement, de sorte qu'un problème avec la politique de clé ou les autorisations de votre principal apparaît comme une erreur lors de cet appel. Si l'attachement échoue avec une erreur d'accès KMS, vérifiez les points suivants :
- La politique de clé nomme le principal de service
aws-external-anthropic.amazonaws.comet accordekms:Encrypt,kms:Decryptetkms:GenerateDataKey, pluskms:DescribeKeydans une déclaration distincte qui n'a pas de conditionEncryptionContext. - La condition
aws:SourceArncorrespond à l'ARN de cet espace de travail (votre ID de compte, et l'espace de travail si vous avez listé des ARN spécifiques), et toute conditionEncryptionContextinclut l'ID de compartiment de cet espace de travail. - La clé est activée, à région unique, et dans le même compte et la même région AWS que l'espace de travail.
- Le principal avec lequel vous êtes connecté a
kms:DescribeKey,kms:Encryptetkms:Decryptsur la clé. - Aucune politique de contrôle de service ou politique de contrôle des ressources dans votre organisation AWS n'empêche le principal de service ou votre principal d'utiliser la clé.
- Si la politique semble correcte et que l'attachement échoue toujours, trouvez l'événement
kms:refusé dans CloudTrail dans le compte de la clé (il affiche le principal appelant et, pour les appels cryptographiques, le contexte de chiffrement), puis réessayez avec la conditionaws:SourceArntemporairement supprimée pour distinguer une incompatibilité d'ARN source d'une incompatibilité de contexte de chiffrement.
- La politique de clé nomme le principal de service
Terraform
Pour les déploiements infrastructure-as-code, les mêmes étapes correspondent au fournisseur aws avec les ressources aws_kms_key et aws_kms_alias.
Was this page helpful?