Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Chiffrement au repos : comment utiliser les clés gérées par le client pour chiffrer des tables dans Amazon Keyspaces
Vous pouvez utiliser la console ou les CQL instructions AWS KMS key pour spécifier les nouvelles tables et mettre à jour les clés de chiffrement des tables existantes dans Amazon Keyspaces. La rubrique suivante explique comment implémenter des clés gérées par le client pour les tables nouvelles et existantes.
Rubriques
Conditions préalables : créer une clé gérée par le client en utilisant AWS KMS et octroyer des autorisations à Amazon Keyspaces
Avant de protéger une table Amazon Keyspaces avec une clé gérée par le client, vous devez d'abord créer la clé dans AWS Key Management Service (AWS KMS), puis autoriser Amazon Keyspaces à utiliser cette clé.
Étape 1 : Créez une clé gérée par le client à l'aide de AWS KMS
Pour créer une clé gérée par le client à utiliser pour protéger une table Amazon Keyspaces, vous pouvez suivre les étapes décrites dans Création de KMS clés de chiffrement symétriques à l'aide de la console ou du. AWS API
Étape 2 : Autoriser l'utilisation de votre clé gérée par le client
Avant de pouvoir choisir une clé gérée par le client pour protéger une table Amazon Keyspaces, les politiques relatives à cette clé gérée par le client doivent autoriser Amazon Keyspaces à l'utiliser en votre nom. Vous avez un contrôle total sur les politiques et les autorisations relatives à la clé gérée par le client. Vous pouvez fournir ces autorisations dans une stratégie de clé, une stratégie IAM ou un octroi d'autorisation.
Amazon Keyspaces n'a pas besoin d'autorisation supplémentaire pour utiliser la valeur par défaut Clé détenue par AWSafin de protéger les tables Amazon Keyspaces de votre compte. AWS
Les rubriques suivantes expliquent comment configurer les autorisations requises à l'aide de IAM politiques et d'autorisations qui autorisent les tables Amazon Keyspaces à utiliser une clé gérée par le client.
Rubriques
Politique clé concernant les clés gérées par le client
Lorsque vous sélectionnez une clé gérée par le client pour protéger une table Amazon Keyspaces, Amazon Keyspaces obtient l'autorisation d'utiliser la clé gérée par le client au nom du principal qui effectue la sélection. Ce principal, qu'il s'agisse d'un utilisateur ou d'un rôle, doit disposer des autorisations requises par Amazon Keyspaces sur la clé gérée par le client.
Amazon Keyspaces requiert au minimum les autorisations suivantes sur une clé gérée par le client :
kms : ReEncrypt * (pour kms: ReEncryptFrom et kms:ReEncryptTo)
kms : GenerateDataKey * (pour kms : GenerateDataKey et kms : GenerateDataKeyWithoutPlaintext)
Exemple de politique de clé
Par exemple, l'exemple de politique de clé suivant fournit uniquement les autorisations requises. La politique a les effets suivants :
-
Permet à Amazon Keyspaces d'utiliser la clé gérée par le client dans le cadre d'opérations cryptographiques et de créer des subventions, mais uniquement lorsqu'elle agit pour le compte des responsables du compte autorisés à utiliser Amazon Keyspaces. Si les principaux responsables spécifiés dans la déclaration de politique ne sont pas autorisés à utiliser Amazon Keyspaces, l'appel échoue, même s'il provient du service Amazon Keyspaces.
-
La clé de ViaService condition kms : autorise les autorisations uniquement lorsque la demande provient d'Amazon Keyspaces au nom des principaux acteurs répertoriés dans la déclaration de politique. Ces principals ne peuvent pas appeler ces opérations directement. Notez que la commande valeur
kms:ViaService
,cassandra.*.amazonaws.com
, possède un astérisque (*) dans la position Région. Amazon Keyspaces a besoin d'une autorisation pour être indépendant de tout particulier. Région AWS -
Permet aux administrateurs de clés gérés par le client (utilisateurs qui peuvent assumer le
db-team
rôle) d'accéder en lecture seule à la clé gérée par le client et de révoquer les autorisations, y compris celles dont Amazon Keyspaces a besoin pour protéger la table. -
Permet à Amazon Keyspaces d'accéder en lecture seule à la clé gérée par le client. Dans ce cas, Amazon Keyspaces peut appeler ces opérations directement. Il n'est pas obligé d'agir pour le compte du principal d'un compte.
Avant d'utiliser un exemple de politique clé, remplacez les exemples de principes par des principes réels provenant de votre. Compte AWS
{ "Id": "key-policy-cassandra", "Version":"2012-10-17", "Statement": [ { "Sid" : "Allow access through Amazon Keyspaces for all principals in the account that are authorized to use Amazon Keyspaces", "Effect": "Allow", "Principal": {"AWS": "
arn:aws:iam::111122223333:user/db-lead
"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService" : "cassandra.*.amazonaws.com" } } }, { "Sid": "Allow administrators to view the customer managed key and revoke grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/db-team
" }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }
Utiliser des subventions pour autoriser Amazon Keyspaces
Outre les politiques clés, Amazon Keyspaces utilise des autorisations pour définir des autorisations sur une clé gérée par le client. Pour visualiser les octrois sur une clé gérée par le client dans votre compte, utilisez l'opération ListGrants. Amazon Keyspaces n'a pas besoin de subventions, ni d'autorisations supplémentaires, pour utiliser le Clé détenue par AWSafin de protéger votre table.
Amazon Keyspaces utilise les autorisations d'octroi lorsqu'il effectue des tâches de maintenance du système en arrière-plan et de protection continue des données. Il utilise également des octrois pour générer les clés de table.
Chaque octroi est spécifique à une table. Si le compte inclut plusieurs tables chiffrées sous la même clé gérée par le client, chaque type de table est attribué à chaque table. La subvention est limitée par le contexte de chiffrement Amazon Keyspaces, qui inclut le nom de la table et Compte AWS l'ID. La subvention inclut l'autorisation de retirer la subvention si elle n'est plus nécessaire.
Pour créer les subventions, Amazon Keyspaces doit être autorisé à appeler CreateGrant
au nom de l'utilisateur qui a créé la table cryptée.
La politique de clé peut également permettre au compte de révoquer l'octroi sur la clé gérée par le client. Toutefois, si vous révoquez l'autorisation sur une table cryptée active, Amazon Keyspaces ne sera pas en mesure de protéger et de gérer la table.
Étape 3 : Spécifier une clé gérée par le client pour une nouvelle table
Suivez ces étapes pour spécifier la clé gérée par le client sur une nouvelle table à l'aide de la console Amazon Keyspaces ou. CQL
Création d'une table chiffrée à l'aide d'une clé gérée par le client (console)
-
Dans le panneau de navigation, choisissez Tables, puis Create table (Créer une table).
-
Sur la page Créer une table dans la section Détails de la table, sélectionnez un espace de touche et donnez un nom à la nouvelle table.
-
Dans la section Schéma, créez le schéma de votre table.
Dans la section Paramètres du tableau, choisissez Personnaliser les paramètres.
-
Passez aux paramètres de chiffrement.
Au cours de cette étape, vous devez sélectionner les paramètres de chiffrement de la table.
Dans la section Chiffrement au repos AWS KMS key, sous Choisir une clé, choisissez l'option Choisir une autre KMS clé (avancée), puis dans le champ de recherche, choisissez AWS KMS key ou entrez un nom de ressource Amazon (ARN).
Note
Si la clé que vous avez sélectionnée n'est pas accessible ou ne dispose pas des autorisations requises, consultez la section Résolution des problèmes d'accès à la clé dans le Guide du AWS Key Management Service développeur.
-
Choisissez Créer pour créer la table chiffrée.
Créez une nouvelle table à l'aide d'une clé gérée par le client pour le chiffrement au repos (CQL)
Pour créer une nouvelle table qui utilise une clé gérée par le client pour le chiffrement au repos, vous pouvez utiliser l'CREATE TABLE
instruction comme indiqué dans l'exemple suivant. Assurez-vous de remplacer la clé ARN par une ARN clé valide avec les autorisations accordées à Amazon Keyspaces.
CREATE TABLE
my_keyspace.my_table
(id bigint, name text, place text STATIC, PRIMARY KEY(id, name)) WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111
' } };
Si vous recevez unInvalid Request Exception
, vous devez confirmer que la clé gérée par le client est valide et qu'Amazon Keyspaces dispose des autorisations requises. Pour vérifier que la clé a été correctement configurée, consultez la section Résolution des problèmes d'accès à la clé dans le Guide du AWS Key Management Service développeur.
Étape 4 : Mettre à jour la clé de chiffrement d'une table existante
Vous pouvez également utiliser la console Amazon Keyspaces ou CQL modifier les clés de chiffrement d'une table existante entre une Clé détenue par AWS et une KMS clé gérée par le client à tout moment.
Mettre à jour une table existante avec la nouvelle clé gérée par le client (console)
-
Dans le volet de navigation, choisissez Tables.
-
Choisissez le tableau que vous souhaitez mettre à jour, puis cliquez sur l'onglet Paramètres supplémentaires.
-
Dans la section Chiffrement au repos, choisissez Gérer le chiffrement pour modifier les paramètres de chiffrement de la table.
Sous Choisir une AWS KMS key, choisissez l'option Choisir une autre KMS clé (avancée), puis dans le champ de recherche, choisissez une AWS KMS key ou entrez un nom de ressource Amazon (ARN).
Note
Si la clé que vous avez sélectionnée n'est pas valide, consultez la section Résolution des problèmes d'accès aux clés dans le Guide du AWS Key Management Service développeur.
Vous pouvez également choisir un Clé détenue par AWS pour une table chiffrée à l'aide d'une clé gérée par le client.
-
Choisissez Enregistrer les modifications pour enregistrer les modifications apportées au tableau.
Mettre à jour la clé de chiffrement utilisée pour une table existante
Pour modifier la clé de chiffrement d'une table existante, vous devez utiliser l'ALTER
TABLE
instruction pour spécifier une clé gérée par le client pour le chiffrement au repos. Assurez-vous de remplacer la clé ARN par une ARN clé valide avec les autorisations accordées à Amazon Keyspaces.
ALTER TABLE
my_keyspace.my_table
WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111
' } };
Si vous recevez unInvalid Request Exception
, vous devez confirmer que la clé gérée par le client est valide et qu'Amazon Keyspaces dispose des autorisations requises. Pour vérifier que la clé a été correctement configurée, consultez la section Résolution des problèmes d'accès à la clé dans le Guide du AWS Key Management Service développeur.
Pour rétablir l'option de chiffrement par défaut de la clé de chiffrement au repos avec Clés détenues par AWS, vous pouvez utiliser l'ALTER TABLE
instruction comme indiqué dans l'exemple suivant.
ALTER TABLE
my_keyspace.my_table
WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type' : 'AWS_OWNED_KMS_KEY' } };
Étape 5 : Utiliser le contexte de chiffrement Amazon Keyspaces dans les journaux
Un contexte de chiffrement est un ensemble de paires clé-valeur qui contiennent des données non secrètes arbitraires. Lorsque vous incluez un contexte de chiffrement dans une demande de chiffrement de données, lie AWS KMS cryptographiquement le contexte de chiffrement aux données chiffrées. Pour déchiffrer les données, vous devez transmettre le même contexte de chiffrement.
Amazon Keyspaces utilise le même contexte de chiffrement dans toutes les opérations AWS KMS cryptographiques. Si vous utilisez une clé gérée par le client pour protéger votre table Amazon Keyspaces, vous pouvez utiliser le contexte de chiffrement pour identifier l'utilisation de la clé gérée par le client dans les dossiers d'audit et les journaux. Il apparaît également en texte clair dans les journaux, tels que dans les journaux pour AWS CloudTrailet Amazon CloudWatch Logs.
Dans ses demandes adressées à AWS KMS, Amazon Keyspaces utilise un contexte de chiffrement comportant trois paires clé-valeur.
"encryptionContextSubset": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "mytable" "aws:cassandra:subscriberId": "111122223333" }
-
Keyspace : la première paire clé-valeur identifie l'espace clé qui inclut la table cryptée par Amazon Keyspaces. La clé est
aws:cassandra:keyspaceName
. La valeur est le nom du keyspace."aws:cassandra:keyspaceName": "
<keyspace-name>
"Par exemple :
"aws:cassandra:keyspaceName": "
my_keyspace
" -
Table — La deuxième paire clé-valeur identifie la table cryptée par Amazon Keyspaces. La clé est
aws:cassandra:tableName
. La valeur correspond au nom de la table."aws:cassandra:tableName": "
<table-name>
"Par exemple :
"aws:cassandra:tableName": "
my_table
" -
Compte — La troisième paire clé-valeur identifie le. Compte AWS La clé est
aws:cassandra:subscriberId
. La valeur correspond à l'ID de compte."aws:cassandra:subscriberId": "
<account-id>
"Par exemple :
"aws:cassandra:subscriberId": "111122223333"
Étape 6 : Configuration de la surveillance avec AWS CloudTrail
Si vous utilisez une clé gérée par le client pour protéger vos tables Amazon Keyspaces, vous pouvez utiliser AWS CloudTrail les journaux pour suivre les demandes qu'Amazon Keyspaces envoie en votre nom. AWS KMS
Les CreateGrant
demandes GenerateDataKey
DescribeKey
,Decrypt
, et sont abordées dans cette section. En outre, Amazon Keyspaces utilise une RetireGrantopération pour supprimer une autorisation lorsque vous supprimez une table.
- GenerateDataKey
-
Amazon Keyspaces crée une clé de table unique pour chiffrer les données au repos. Il envoie une GenerateDataKeydemande AWS KMS indiquant la KMS clé de la table.
L'événement qui enregistre l'opération
GenerateDataKey
est similaire à l'exemple d'événement suivant. L'utilisateur est le compte du service Amazon Keyspaces. Les paramètres incluent le nom de ressource Amazon (ARN) de la clé gérée par le client, un spécificateur de clé qui nécessite une clé de 256 bits et le contexte de chiffrement qui identifie l'espace clé, la table et le. Compte AWS{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:56:05Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keySpec": "AES_256", "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "5e8e9cb5-9194-4334-aacc-9dd7d50fe246", "eventID": "49fccab9-2448-4b97-a89d-7d5c39318d6f", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "84fbaaf0-9641-4e32-9147-57d2cb08792e" }
- DescribeKey
-
Amazon Keyspaces utilise une DescribeKeyopération pour déterminer si la KMS clé que vous avez sélectionnée existe dans le compte et dans la région.
L'événement qui enregistre l'opération
DescribeKey
est similaire à l'exemple d'événement suivant. L'utilisateur est le compte du service Amazon Keyspaces. Les paramètres incluent ARN la clé gérée par le client et un spécificateur de clé qui nécessite une clé de 256 bits.{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::123SAMPLE012:user/admin", "accountId": "123SAMPLE012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:55:58Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "c25a8105-050b-4f52-8358-6e872fb03a6c", "eventID": "0d96420e-707e-41b9-9118-56585a669658", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }
- Decrypt
-
Lorsque vous accédez à une table Amazon Keyspaces, Amazon Keyspaces doit déchiffrer la clé de la table afin de pouvoir déchiffrer les clés situées en dessous dans la hiérarchie. Il déchiffre ensuite les données de la table. Pour déchiffrer la clé de table, Amazon Keyspaces envoie une demande de déchiffrement indiquant KMS la clé AWS KMS de la table.
L'événement qui enregistre l'opération
Decrypt
est similaire à l'exemple d'événement suivant. L'utilisateur principal est Compte AWS celui qui accède à la table. Les paramètres incluent la clé de table cryptée (sous forme de blob de texte chiffré) et le contexte de chiffrement qui identifie la table et le. Compte AWS AWS KMS déduit l'ID de la clé gérée par le client à partir du texte chiffré.{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:29:44Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "50e80373-83c9-4034-8226-5439e1c9b259", "eventID": "8db9788f-04a5-4ae2-90c9-15c79c411b6b", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "7ed99e2d-910a-4708-a4e3-0180d8dbb68e" }
- CreateGrant
-
Lorsque vous utilisez une clé gérée par le client pour protéger votre table Amazon Keyspaces, Amazon Keyspaces utilise des subventions pour permettre au service d'effectuer des tâches continues de protection, de maintenance et de durabilité des données. Ces subventions ne sont pas requises sur Clés détenues par AWS.
Les subventions créées par Amazon Keyspaces sont spécifiques à une table. Le principal de la CreateGrantdemande est l'utilisateur qui a créé la table.
L'événement qui enregistre l'opération
CreateGrant
est similaire à l'exemple d'événement suivant. Les paramètres incluent ARN la clé gérée par le client pour la table, le principal du bénéficiaire et le principal sortant (le service Amazon Keyspaces), ainsi que les opérations couvertes par la subvention. Elle inclut également une contrainte qui exige que toutes les opérations de chiffrement utilisent le contexte de chiffrement spécifié.{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111:user/admin", "accountId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:11:10Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "a7d328af-215e-4661-9a69-88c858909f20", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ], "constraints": { "encryptionContextSubset": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" } }, "retiringPrincipal": "cassandratest.us-east-1.amazonaws.com", "granteePrincipal": "cassandratest.us-east-1.amazonaws.com" }, "responseElements": { "grantId": "18e4235f1b07f289762a31a1886cb5efd225f069280d4f76cd83b9b9b5501013" }, "requestID": "b379a767-1f9b-48c3-b731-fb23e865e7f7", "eventID": "29ee1fd4-28f2-416f-a419-551910d20291", "readOnly": false, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }