Chiffrement au repos : comment utiliser des clés gérées par le client pour chiffrer des tables dans Amazon Keyspaces - Amazon Keyspaces (pour Apache Cassandra)

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 des clés gérées par le client pour chiffrer des tables dans Amazon Keyspaces

Vous pouvez utiliser la console ou les instructions CQLAWS KMS key pour spécifier les quatre 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.

Prérequis : créer une clé gérée par le client à l'aide d'Amazon KeyspacesAWS KMS et octroyer des autorisations à celui-ci

Avant de protéger une table Amazon Keyspaces à l'aide d'une clé gérée par le client, vous devez d'abord créer la clé dansAWS Key Management Service (AWS KMS), puis autoriser Amazon Keyspaces à utiliser cette clé.

Étape 1 : Créer une clé gérée par le client à l'aide dAWS 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 clés KMS de chiffrement symétrique à l'aide de la console ou de l'AWSAPI.

Étape 2 : Autoriser l'utilisation de votre clé gérée par le client

Avant de choisir une clé gérée par le client pour protéger une table Amazon Keyspaces, les politiques associées à cette clé gérée par le client doivent autoriser Amazon Keyspaces à l'utiliser en votre nom. Vous avez un contrôle total des politiques et des octrois de clé gérée par le client. Vous pouvez fournir ces autorisations dans une politique de clé, une politique IAM ou un octroi.

Amazon Keyspaces n'a pas besoin d'une autorisation supplémentaire pour utiliser l'par défaut Clé détenue par AWSet protéger les tables Amazon Keyspaces de votreAWS compte.

Les rubriques suivantes expliquent comment configurer les autorisations requises à l'aide des politiques et des autorisations IAM qui autorisent les tables Amazon Keyspaces à utiliser une clé gérée par le client.

Politique de clé pour 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 mandataire qui effectue la sélection. Ce principal, un utilisateur ou 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 :

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 :

  • Elle permet à Amazon Keyspaces d'utiliser la clé gérée par le client dans les opérations cryptographiques et de créer des octrois, mais seulement lorsqu'elle agit au nom des principals du compte qui ont l'autorisation d'utiliser Amazon Keyspaces. Si les mandataires spécifiés dans l'énoncé de stratégie ne sont pas autorisés à utiliser Amazon Keyspaces, l'appel échoue, même lorsqu'il provient du service Amazon Keyspaces.

  • La clé deViaService condition kms : permet l'accord d'autorisations uniquement lorsque la demande provient d'Amazon Keyspaces au nom des mandataires répertoriés dans l'énoncé de stratégie. 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 nécessite une autorisation indépendante de tout élément particulierRégion AWS.

  • Elle accorde aux administrateurs de clés gérées par le client (utilisateurs qui peuvent endosser ledb-team rôle) un accès en lecture seule à la clé gérée par le client, ainsi que l'autorisation de révoquer les octrois, en particulier ceux requis par Amazon Keyspaces pour protéger la table.

  • Elle accorde à Amazon Keyspaces un accès 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 nécessaire qu'il agisse au nom du principal du compte.

Avant d'utiliser un exemple de politique de clé, remplacez les exemples de principals par des principals réels 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": "*" } ] }

Utilisation d'octrois pour autoriser Amazon Keyspaces

Outre les politiques de clé, Amazon Keyspaces utilise des octrois 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 d'octrois, ni d'autorisations supplémentaires, pour utiliser la Clé détenue par AWSet protéger votre table.

Amazon Keyspaces utilise les autorisations d'octroi lorsqu'il effectue des tâches de maintenance système en arrière-plan et de protection des données en continu. 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 avec la même clé gérée par le client, il existe un octroi de chaque type pour chaque table. L'autorisation est limitée par le contexte de chiffrement Amazon Keyspaces, qui inclut le nom de la table et l'Compte AWSID. La subvention inclut l'autorisation de retirer la subvention si elle n'est plus nécessaire.

Pour créer les octrois, Amazon Keyspaces doit être autorisé à appeler auCreateGrant nom de l'utilisateur qui a créé la table chiffré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'octroi sur une table chiffrée active, Amazon Keyspaces ne pourra pas protéger ni maintenir 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 de CQL.

Créer une table chiffrée à l'aide d'une clé gérée par le client (console)

  1. Connectez-vous à et ouvrezAWS Management Console la console Amazon Keyspaces à l'adresse https://console.aws.amazon.com/keyspaces/home.

  2. Dans le panneau de navigation, choisissez Tables, puis Create table (Créer une table).

  3. Sur la page Créer une table, dans la section Détails de la table, sélectionnez un espace clé et donnez un nom à la nouvelle table.

  4. Dans la section Schéma, créez le schéma de votre table.

  5. Dans la section Paramètres du tableau, choisissez Personnaliser les paramètres.

  6. Passez aux paramètres de chiffrement.

    Au cours de cette étape, vous sélectionnez les paramètres de chiffrement du tableau.

    Dans la section Chiffrement au repos, sous Choisir unAWS KMS key, choisissez l'option Choisir une autre clé KMS (avancée), puis dans le champ de recherche, choisissez un nom de ressource Amazon (ARN)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 possède pas les autorisations requises, consultez la section Résolution des problèmes d'accès par clé dans le Guide duAWS Key Management Service développeur.

  7. Choisissez Créer pour créer la table chiffrée.

Créer une nouvelle table à l'aide d'une clé gérée par le client pour le chiffrement au repos au repos (CQL)

Pour créer une nouvelle table qui utilise une clé gérée par le client pour le chiffrement au repos au repos, vous pouvez utiliser l'CREATE TABLEinstruction comme illustré dans l'exemple suivant : Assurez-vous de remplacer l'ARN de la clé par un ARN pour obtenir une clé valide avec des 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 par clé dans le Guide duAWS 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 pour modifier à tout moment les clés de chiffrement d'une table existante entre une cléClé détenue par AWS et une clé KMS gérée par le client.

Mettre à jour une table existante avec la nouvelle clé gérée par le client (console)

  1. Connectez-vous à et ouvrezAWS Management Console la console Amazon Keyspaces à l'adresse https://console.aws.amazon.com/keyspaces/home.

  2. Dans le volet de navigation, choisissez Tables.

  3. Choisissez la version que vous souhaitez mettre à jour, puis l'onglet Paramètres supplémentaires.

  4. Dans la section Chiffrement au repos, choisissez Gérer le chiffrement pour modifier les paramètres de chiffrement du tableau.

    Sous Choisir unAWS KMS key, choisissez l'option Choisir une autre clé KMS (avancée), puis dans le champ de recherche, choisissez un nom de ressource Amazon (ARN)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 par clé dans le Guide duAWS Key Management Service développeur.

    Vous pouvez également choisir unClé détenue par AWS pour une table chiffrée avec une clé gérée par le client.

  5. 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 utilisez l'ALTER TABLEinstruction pour spécifier une clé gérée par le client pour le chiffrement au repos. Assurez-vous de remplacer l'ARN de la clé par un ARN pour obtenir une clé valide avec des 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 par clé dans le Guide duAWS Key Management Service développeur.

Pour rétablir la clé de chiffrement à l'option de chiffrement par défaut au repos avecClés détenues par AWS, vous pouvez utiliser l'ALTER TABLEinstruction 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, AWS KMS lie de manière chiffrée 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érationsAWS 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 enregistrements d'audit et les journaux. Il apparaît également en texte brut dans les journaux, tels que les journaux pour AWS CloudTrailet Amazon CloudWatch Logs.

Dans ses demandes adressées àAWS KMS, Amazon Keyspaces utilise un contexte de chiffrement avec 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 de clés qui inclut la table chiffrée par Amazon Keyspaces. La clé est aws:cassandra:keyspaceName. La valeur est le nom de l'espace de clés.

    "aws:cassandra:keyspaceName": "<keyspace-name>"

    Par exemple :

    "aws:cassandra:keyspaceName": "my_keyspace"
  • Table — La deuxième paire clé-valeur identifie la table chiffré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 leCompte 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 : Configurer la surveillance avecAWS CloudTrail

Si vous utilisez une clé gérée par le client pour protéger vos tables Amazon Keyspaces, vous pouvez utiliserAWS CloudTrail les journaux pour suivre les demandes envoyées par Amazon Keyspaces àAWS KMS en votre nom.

LesGenerateDataKey,DescribeKeyDecrypt, et lesCreateGrant demandes sont abordées dans cette section. En outre, Amazon Keyspaces utilise une RetireGrantopération pour supprimer une autorisation lorsque vous supprimez un tableau.

GenerateDataKey

Amazon Keyspaces crée une clé de table unique pour chiffrer les données au repos au repos. Il envoie une GenerateDataKeydemande àAWS KMS laquelle est spécifiée la clé KMS 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 de service Amazon Keyspaces. Les paramètres incluent l'Amazon Resource Name (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 de clés, la table et leCompte 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 clé KMS que vous avez sélectionnée existe dans le compte et 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 de service Amazon Keyspaces. Les paramètres incluent l'ARN de 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 a besoin de déchiffrer la clé de table pour pouvoir déchiffrer les clés situées au-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 Decrypt àAWS KMS qui spécifie la clé KMS de la table.

L'événement qui enregistre l'opération Decrypt est similaire à l'exemple d'événement suivant. L'utilisateur est le principal de votre Compte AWS qui accède à la table. Les paramètres incluent la clé de table chiffrée (comme un objet blob de texte chiffré) et le contexte de chiffrement qui identifie la table et leCompte AWS. AWS KMSdérive 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 octrois pour autoriser le service à assurer une protection continue des données, ainsi que des tâches de maintenance et de durabilité. Ces subventions ne sont pas requises pour Clés détenues par AWS.

Les octrois qu'Amazon Keyspaces crée sont spécifiques à une table. Le principal figurant dans 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 l'ARN de la clé gérée par le client pour la table, le principal bénéficiaire et le principal de retrait (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" }