Configurer une table DynamoDB existante pour utiliser AWS le chiffrement de base de données pour DynamoDB SDK - AWS Chiffrement des bases SDK

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.

Configurer une table DynamoDB existante pour utiliser AWS le chiffrement de base de données pour DynamoDB SDK

Notre bibliothèque de chiffrement côté client a été renommée AWS Database Encryption. SDK Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB.

Avec la version 3. x de la bibliothèque de chiffrement côté client Java pour DynamoDB, vous pouvez configurer vos tables Amazon DynamoDB existantes pour le chiffrement côté client. Cette rubrique fournit des conseils sur les trois étapes à suivre pour ajouter la version 3. x vers une table DynamoDB existante et renseignée.

Prérequis

Version 3. x de la bibliothèque de chiffrement côté client Java pour DynamoDB nécessite le client DynamoDB amélioré fourni dans. AWS SDK for Java 2.x Si vous utilisez toujours le D ynamoDBMapper, vous devez migrer AWS SDK for Java 2.x vers le client DynamoDB Enhanced Client.

Suivez les instructions de migration de la version 1.x vers la version 2.x du. AWS SDK for Java

Suivez ensuite les instructions pour commencer à utiliser le client DynamoDB Enhanced. API

Avant de configurer votre table pour utiliser la bibliothèque de chiffrement côté client Java pour DynamoDB, vous devez générer une TableSchema classe de données annotée et créer un client amélioré.

Étape 1 : Préparez-vous à lire et à écrire des éléments chiffrés

Procédez comme suit pour préparer votre SDK client AWS Database Encryption à lire et écrire des éléments chiffrés. Après avoir déployé les modifications suivantes, votre client continuera à lire et à écrire des éléments en texte brut. Il ne chiffrera ni ne signera aucun nouvel élément inscrit dans la table, mais il sera en mesure de déchiffrer les éléments chiffrés dès leur apparition. Ces modifications préparent le client à commencer à chiffrer de nouveaux éléments. Les modifications suivantes doivent être déployées sur chaque lecteur avant de passer à l'étape suivante.

1. Définissez vos actions attributaires

Mettez à jour votre classe de données annotée pour inclure des actions d'attribut qui définissent les valeurs d'attribut qui seront chiffrées et signées, celles qui seront uniquement signées et celles qui seront ignorées.

Consultez le SimpleClassfichier .java dans le référentiel aws-database-encryption-sdk -dynamodb GitHub pour plus d'informations sur les annotations du client DynamoDB Enhanced.

Par défaut, les attributs de clé primaire sont signés mais pas chiffrés (SIGN_ONLY) et tous les autres attributs sont chiffrés et signés (ENCRYPT_AND_SIGN). Pour spécifier des exceptions, utilisez les annotations de chiffrement définies dans la bibliothèque de chiffrement côté client Java pour DynamoDB. Par exemple, si vous souhaitez qu'un attribut particulier soit un signe, utilisez uniquement l'@DynamoDbEncryptionSignOnlyannotation. Si vous souhaitez qu'un attribut particulier soit signé et inclus dans le contexte de chiffrement, utilisez l'@DynamoDbEncryptionSignAndIncludeInEncryptionContextannotation. Si vous souhaitez qu'un attribut particulier ne soit ni signé ni chiffré (DO_NOTHING), utilisez l'@DynamoDbEncryptionDoNothingannotation.

Note

Si vous spécifiez des SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT attributs, les attributs de partition et de tri doivent également l'êtreSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Pour un exemple illustrant les annotations utilisées pour définirSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, consultez le SimpleClassfichier 4.java.

Pour des exemples d'annotations, voirUtiliser une classe de données annotée.

2. Définissez les attributs qui seront exclus des signatures

L'exemple suivant suppose que tous les DO_NOTHING attributs partagent le préfixe distinct : « » et utilise le préfixe pour définir les attributs non signés autorisés. Le client supposera que tout nom d'attribut avec le préfixe : « » est exclu des signatures. Pour de plus amples informations, veuillez consulter Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
3. Créez un porte-clés

L'exemple suivant crée un AWS KMS trousseau de clés. Le AWS KMS trousseau de clés utilise un chiffrement symétrique ou asymétrique RSA AWS KMS keys pour générer, chiffrer et déchiffrer les clés de données.

Cet exemple permet CreateMrkMultiKeyring de créer un AWS KMS trousseau de clés avec une clé de chiffrement KMS symétrique. Le CreateAwsKmsMrkMultiKeyring procédé garantit que le trousseau de clés gère correctement les clés à région unique et à régions multiples.

final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
4. Définition de la configuration du chiffrement des tables DynamoDB

L'exemple suivant définit une tableConfigs carte qui représente la configuration de chiffrement pour cette table DynamoDB.

Cet exemple indique le nom de la table DynamoDB comme nom de table logique. Nous vous recommandons vivement de spécifier le nom de votre table DynamoDB comme nom de table logique lorsque vous définissez votre configuration de chiffrement pour la première fois. Pour de plus amples informations, veuillez consulter Configuration du chiffrement dans le chiffrement de AWS base de données SDK pour DynamoDB.

Vous devez le spécifier FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT comme remplacement en texte brut. Cette politique continue de lire et d'écrire des éléments en texte brut, de lire des éléments chiffrés et de préparer le client à écrire des éléments chiffrés.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);
5. Créer le DynamoDbEncryptionInterceptor

L'exemple suivant crée le DynamoDbEncryptionInterceptor à l'aide tableConfigs de l'étape 3.

DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();

Étape 2 : Écrire des éléments chiffrés et signés

Mettez à jour la politique de texte brut dans votre DynamoDbEncryptionInterceptor configuration pour permettre au client d'écrire des éléments chiffrés et signés. Après avoir déployé la modification suivante, le client chiffre et signe les nouveaux éléments en fonction des actions d'attribut que vous avez configurées à l'étape 1. Le client pourra lire les éléments en texte brut et les éléments chiffrés et signés.

Avant de passer à l'étape 3, vous devez chiffrer et signer tous les éléments en texte brut existants dans votre tableau. Il n'existe pas de métrique ou de requête unique que vous puissiez exécuter pour chiffrer rapidement vos éléments en texte brut existants. Utilisez le processus le mieux adapté à votre système. Par exemple, vous pouvez utiliser un processus asynchrone qui analyse lentement la table et réécrit les éléments à l'aide des actions attributaires et de la configuration de chiffrement que vous avez définies. Pour identifier les éléments en texte brut de votre tableau, nous vous recommandons de rechercher tous les éléments qui ne contiennent pas les aws_dbe_foot attributs aws_dbe_head et que le chiffrement de AWS base de données SDK ajoute aux éléments lorsqu'ils sont chiffrés et signés.

L'exemple suivant met à jour la configuration de chiffrement des tables depuis l'étape 1. Vous devez mettre à jour le remplacement en texte brut avec. FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT Cette politique continue de lire les éléments en texte brut, mais également de lire et d'écrire des éléments chiffrés. Créez-en un nouveau DynamoDbEncryptionInterceptor à l'aide de la mise à jourtableConfigs.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);

Étape 3 : lire uniquement les éléments chiffrés et signés

Une fois que vous avez chiffré et signé tous vos éléments, mettez à jour le remplacement en texte brut dans votre DynamoDbEncryptionInterceptor configuration pour autoriser uniquement le client à lire et écrire des éléments chiffrés et signés. Après avoir déployé la modification suivante, le client chiffre et signe les nouveaux éléments en fonction des actions d'attribut que vous avez configurées à l'étape 1. Le client ne pourra lire que les éléments chiffrés et signés.

L'exemple suivant met à jour la configuration de chiffrement des tables depuis l'étape 2. Vous pouvez soit mettre à jour la règle de remplacement en texte brut, FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT soit la supprimer de votre configuration. Le client lit et écrit uniquement les éléments chiffrés et signés par défaut. Créez-en un nouveau DynamoDbEncryptionInterceptor à l'aide de la mise à jourtableConfigs.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) // Optional: you can also remove the plaintext policy from your configuration .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);