

# Conversão dos dados da tabela criptografados com CSE-KMS para SSE-KMS
<a name="convert-csekms-table-ssekms"></a>

No momento, caso seus fluxos de trabalho usem CSE-KMS para a criptografia de dados em tabelas, faça a transição para a criptografia SSE-KMS seguindo as etapas apresentadas abaixo.

## Pré-requisito
<a name="convert-csekms-table-ssekms-preq"></a>

Caso você ainda esteja gravando dados com um grupo de trabalho CSE-KMS ou com configurações do lado do cliente, siga as etapas apresentadas em [Migração do método de criptografia CSE-KMS para o método SSE-KMS](migrating-csekms-ssekms.md) para realizar a atualização para SSE-KMS. Isso impede que novos dados criptografados com CSE-KMS sejam adicionados por qualquer outro fluxo de trabalho que realize gravação nas tabelas durante o processo de migração.

## Migrações de dados
<a name="convert-csekms-table-ssekms-migrat"></a>

1. Confirme se a propriedade `has_encrypted_data` da tabela está definida como `true`. Essa propriedade indica que a tabela pode conter dados criptografados com CSE-KMS. Porém, vale ressaltar que essa propriedade pode estar presente mesmo em tabelas sem dados efetivamente criptografados com CSE-KMS.

------
#### [ Console ]

   1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Escolha **Iniciar editor de consultas**.

   1. No lado esquerdo do editor, em **Banco de dados**, selecione o banco de dados que você deseja consultar.

   1. No editor de consultas, execute a consulta apresentada a seguir para verificar o valor definido para a propriedade `has_encrypted_data table`.

      ```
      SHOW TBLPROPERTIES {{<table_name>}}('has_encrypted_data');
      ```

------
#### [ CLI ]

   Inicie uma consulta no Athena que retorne o valor da propriedade `has_encrypted_data` na tabela, como demonstrado no exemplo a seguir.

   ```
   aws athena start-query-execution \
       --query-string "SHOW TBLPROPERTIES {{<table-name>}}('has_encrypted_data');" \
       --work-group "{{<my-workgroup>}}"
   ```

   Recupere os resultados da consulta para verificar o valor da propriedade `has_encrypted_data` da tabela para a tabela, conforme demonstrado no exemplo a seguir.

   ```
   aws athena get-query-results --query-execution-id {{<query-execution-id-from-previous-step>}}
   ```

------

1. Para cada objeto na tabela que esteja criptografado com CSE-KMS:

   1. Faça o download do objeto do S3 usando o cliente de criptografia do S3 e realize a descriptografia. A seguir, apresentamos um exemplo com o AWS SDK para Java V2.

      **Importações**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.services.s3.model.GetObjectRequest;
      import software.amazon.awssdk.services.s3.model.GetObjectResponse;
      import software.amazon.encryption.s3.S3EncryptionClient;
      import software.amazon.encryption.s3.materials.Keyring;
      import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
      ```

      Código

      ```
      final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder()
              .enableLegacyWrappingAlgorithms(true)
              .build();
      final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder()
              .enableLegacyUnauthenticatedModes(true)
              .keyring(kmsDiscoveryKeyRing)
              .build();
      
      GetObjectRequest getObjectRequest = GetObjectRequest.builder()
              .bucket("{{amzn-s3-demo-bucket}}")
              .key("{{<my-key>}}")
              .build();
      
      ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest);
      ```

   1. Faça o upload do objeto para o S3 com o mesmo nome e protegido por criptografia SSE-KMS. A seguir, apresentamos um exemplo com o AWS SDK para Java V2.

      **Importações**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.core.sync.RequestBody;
      import software.amazon.awssdk.services.s3.S3Client;
      import software.amazon.awssdk.services.s3.model.PutObjectRequest;
      import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
      ```

      **Código**

      ```
      final S3Client s3Client = S3Client.builder()
              .build();
                  
      PutObjectRequest putObjectRequest = PutObjectRequest.builder()
              .bucket("{{amzn-s3-demo-bucket}}")
              .key("{{<my-key>}}")
              .serverSideEncryption(ServerSideEncryption.AWS_KMS)
              .ssekmsKeyId("{{<my-kms-key>}}")
              .build();
      
      s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
      ```

## Após a migração
<a name="convert-csekms-table-ssekms-post-migrat"></a>

Após realizar novamente a criptografia com êxito em todos os arquivos com criptografia CSE-KMS na tabela, realize as etapas apresentadas a seguir. 

1. Remova a propriedade `has_encrypted_data` da tabela.

------
#### [ Console ]

   1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Escolha **Iniciar editor de consultas**.

   1. No lado esquerdo do editor, em **Banco de dados**, selecione o banco de dados que você deseja consultar.

   1. No editor de consultas, execute a consulta apresentada a seguir para sua tabela.

      ```
      ALTER TABLE {{<database-name>}}.{{<table-name>}} UNSET TBLPROPERTIES ('has_encrypted_data')
      ```

------
#### [ CLI ]

   Execute o comando apresentado a seguir para remover a propriedade `has_encrypted_data` da sua tabela.

   ```
   aws athena start-query-execution \
       --query-string "ALTER TABLE {{<database-name>}}.{{<table-name>}} UNSET TBLPROPERTIES ('has_encrypted_data');" \
       --work-group "{{<my-workgroup>}}"
   ```

------

1. Atualize seus fluxos de trabalho para usar um cliente básico do S3 em vez de um cliente de criptografia do S3 e, em seguida, especifique a criptografia SSE-KMS para gravações de dados. 