Configurar uma tabela existente do DynamoDB para usar AWS a criptografia de banco de dados para o DynamoDB SDK - AWS Criptografia de banco SDK

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar uma tabela existente do DynamoDB para usar AWS a criptografia de banco de dados para o DynamoDB SDK

Nossa biblioteca de criptografia do lado do cliente foi renomeada para Database Encryption. AWS SDK Este guia do desenvolvedor ainda fornece informações sobre o DynamoDB Encryption Client.

Com a versão 3.x da biblioteca Java de criptografia do lado do cliente para DynamoDB, é possível configurar as tabelas existentes do Amazon DynamoDB para a criptografia do lado do cliente. Este tópico fornece orientação sobre as três etapas que você deve seguir para adicionar a versão 3.x para uma tabela existente e preenchida do DynamoDB.

Pré-requisitos

A versão 3.x da biblioteca Java de criptografia do lado do cliente para o DynamoDB requer o DynamoDB Enhanced Client fornecido em AWS SDK for Java 2.x . Se você ainda usa o D ynamoDBMapper, deve migrar AWS SDK for Java 2.x para o DynamoDB Enhanced Client.

Siga as instruções para migrar da versão 1.x para a 2.x do AWS SDK for Java.

Em seguida, siga as instruções para começar a usar o DynamoDB Enhanced Client. API

Antes de configurar sua tabela para usar a biblioteca Java de criptografia do lado do cliente para o DynamoDB, você precisa gerar TableSchema usando uma classe de dados anotada e criar um cliente aprimorado.

Etapa 1: preparar para ler e gravar itens criptografados

Conclua as etapas a seguir para preparar seu SDK cliente AWS de criptografia de banco de dados para ler e gravar itens criptografados. Depois de implantar as alterações a seguir, seu cliente continuará lendo e gravando itens de texto simples. Ele não criptografará nem assinará nenhum novo item gravado na tabela, mas poderá descriptografar itens criptografados assim que eles aparecerem. Essas mudanças preparam o cliente para começar a criptografar novos itens. As alterações a seguir devem ser implantadas em cada leitor antes de prosseguir para a próxima etapa.

1. Definir suas ações de atributos

Atualize sua classe de dados anotada para incluir ações de atributos que definam quais valores de atributos serão criptografados e assinados, quais serão somente assinados e quais serão ignorados.

Consulte o SimpleClassarquivo.java no repositório aws-database-encryption-sdk -dynamodb em GitHub para obter mais orientações sobre as anotações do DynamoDB Enhanced Client.

Por padrão, os atributos da chave primária são assinados, mas não criptografados (SIGN_ONLY), e todos os outros atributos são criptografados e assinados (ENCRYPT_AND_SIGN). Para especificar exceções, use as anotações de criptografia definidas na biblioteca de criptografia do lado do cliente para Java do DynamoDB. Por exemplo, se você quiser que um atributo específico seja assinado, use apenas a anotação @DynamoDbEncryptionSignOnly. Se você quiser que um atributo específico seja assinado e incluído no contexto de criptografia, use a @DynamoDbEncryptionSignAndIncludeInEncryptionContext anotação. Se desejar que um atributo específico não seja assinado nem criptografado (DO_NOTHING), use a anotação @DynamoDbEncryptionDoNothing.

nota

Se você especificar algum SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT atributo, os atributos de partição e classificação também deverão serSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Para ver um exemplo que mostra as anotações usadas para definirSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, consulte SimpleClass 4.java.

Por obter exemplos de anotações, consulte Uso de uma classe de dados anotada.

2. Definir quais atributos são excluídos das assinaturas

O exemplo a seguir pressupõe que todos os atributos DO_NOTHING compartilham o prefixo distinto ":" e usam o prefixo para definir os atributos não assinados permitidos. O cliente presumirá que qualquer nome de atributo com o prefixo ":" está excluído das assinaturas. Para obter mais informações, consulte Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
3. Criar um token de autenticação

O exemplo a seguir cria um token de autenticação do AWS KMS. O AWS KMS chaveiro usa criptografia simétrica ou assimétrica RSA AWS KMS keys para gerar, criptografar e descriptografar chaves de dados.

Este exemplo é usado CreateMrkMultiKeyring para criar um AWS KMS chaveiro com uma chave de criptografia KMS simétrica. O método CreateAwsKmsMrkMultiKeyring garante que o token de autenticação manipule corretamente chaves de região única e de várias regiões.

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. Definir a configuração de criptografia de tabelas do DynamoDB

O exemplo a seguir define um mapa tableConfigs que representa a configuração de criptografia dessa tabela do DynamoDB.

Este exemplo especifica o nome da tabela do DynamoDB como o nome lógico da tabela. É altamente recomendável especificar o nome da tabela do DynamoDB como o nome lógico da tabela ao definir a configuração de criptografia pela primeira vez. Para obter mais informações, consulte Configuração de criptografia no AWS Database Encryption SDK for DynamoDB.

Você deve especificar FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT como substituição de texto simples. Essa política continua lendo e gravando itens de texto simples, lendo itens criptografados e preparando o cliente para gravar itens criptografados.

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. Criar a DynamoDbEncryptionInterceptor

O exemplo a seguir cria o DynamoDbEncryptionInterceptor usando tableConfigs da Etapa 3.

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

Etapa 2: gravar itens criptografados e assinados

Atualize a política de texto simples em sua configuração DynamoDbEncryptionInterceptor para permitir que o cliente grave itens criptografados e assinados. Depois de implantar a seguinte alteração, o cliente criptografará e assinará novos itens com base nas ações de atributos que você configurou na Etapa 1. O cliente poderá ler itens de texto simples e itens criptografados e assinados.

Antes de prosseguir para a Etapa 3, você deve criptografar e assinar todos os itens de texto sem formatação existentes em sua tabela. Não há uma única métrica ou consulta que você possa executar para criptografar rapidamente seus itens de texto sem formatação existentes. Use o processo que faz mais sentido para o seu sistema. Por exemplo, é possível usar um processo assíncrono que varre lentamente a tabela e reescreve os itens usando as ações de atributos e a configuração de criptografia que você definiu. Para identificar os itens de texto simples em sua tabela, recomendamos escanear todos os itens que não contenham os aws_dbe_foot atributos aws_dbe_head e que a Criptografia de AWS Banco de Dados SDK adiciona aos itens quando eles são criptografados e assinados.

O exemplo a seguir atualiza a configuração de criptografia de tabela da Etapa 1. Você deve atualizar a substituição de texto simples com FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT. Essa política continua lendo itens de texto simples, mas também lê e grava itens criptografados. Crie um novo DynamoDbEncryptionInterceptor usando o atualizadotableConfigs.

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);

Etapa 3: somente ler itens criptografados e assinados

Depois de criptografar e assinar todos os seus itens, atualize a substituição de texto simples na configuração DynamoDbEncryptionInterceptor para permitir que o cliente somente leia e grave itens criptografados e assinados. Depois de implantar a seguinte alteração, o cliente criptografará e assinará novos itens com base nas ações de atributos que você configurou na Etapa 1. O cliente só poderá ler itens criptografados e assinados.

O exemplo a seguir atualiza a configuração de criptografia de tabela da Etapa 2. É possível atualizar a substituição de texto sem formatação com FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT ou remover a política de texto sem formatação da sua configuração. Por padrão, o cliente só lê e grava itens criptografados e assinados. Crie um novo DynamoDbEncryptionInterceptor usando o atualizadotableConfigs.

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);