

# Migração do método de criptografia CSE-KMS para o método SSE-KMS
<a name="migrating-csekms-ssekms"></a>

É possível especificar a criptografia CSE-KMS de duas maneiras: durante a configuração de criptografia dos resultados da consulta do grupo de trabalho e nas configurações do lado do cliente. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md). Durante o processo de migração, é importante auditar os fluxos de trabalho existentes que realizam a leitura e a gravação de dados da criptografia CSE-KMS, identificar os grupos de trabalho em que a criptografia CSE-KMS está configurada e localizar as instâncias em que a criptografia CSE-KMS é definida por meio de parâmetros do lado do cliente.

## Atualização das configurações de criptografia dos resultados das consultas do grupo de trabalho
<a name="migrating-updating-workgroup-query-results-encryption"></a>

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

**Para atualizar as configurações de criptografia no console do Athena**

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

1. No painel de navegação do console do Athena, escolha **Workgroups** (Grupos de trabalho).

1. Na página **Workgroups** (Grupos de trabalho), selecione o botão do grupo de trabalho que você deseja editar. 

1. Selecione **Ações**, **Editar**.

1. Abra **Configuração do resultado da consulta** e escolha **Criptografar resultados da consulta**.

1. Na seção **Tipo de criptografia**, escolha a opção de criptografia **SSE\$1KMS**.

1. Insira sua chave do KMS em **Escolha outra chave do AWS KMS (avançada)**.

1. Escolha **Salvar alterações**. O grupo de trabalho atualizado aparece na lista na página **Workgroups** (Grupos de trabalho).

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

Execute o comando apresentado a seguir para atualizar a configuração de criptografia dos resultados das consultas para a criptografia SSE-KMS no seu grupo de trabalho.

```
aws athena update-work-group \
    --work-group "my-workgroup" \
    --configuration-updates '{
        "ResultConfigurationUpdates": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_KMS",
                "KmsKey": "<my-kms-key>"
            }
        }
    }'
```

------

## Atualização das configurações de criptografia dos resultados de consultas do lado do cliente
<a name="migrating-updating-clientside-query-results-encryption"></a>

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

Para atualizar suas configurações do lado do cliente para a criptografia dos resultados das consultas de CSE-KMS para SSE-KMS, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).

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

É possível especificar a configuração de criptografia dos resultados das consultas nas configurações do lado do cliente somente por meio do comando `start-query-execution`. Caso você execute este comando da CLI e substitua a configuração de criptografia dos resultados das consultas especificada no seu grupo de trabalho com a criptografia CSE-KMS, modifique o comando para usar `SSE_KMS` para criptografar os resultados das consultas, conforme mostrado abaixo.

```
aws athena start-query-execution \
    --query-string "SELECT * FROM <my-table>;" \
    --query-execution-context "Database=<my-database>,Catalog=<my-catalog>" \
    --result-configuration '{
        "EncryptionConfiguration": {
            "EncryptionOption": "SSE_KMS",
            "KmsKey": "<my-kms-key>"
        }
    }' \
    --work-group "<my-workgroup>"
```

------

**nota**  
Após a atualização das configurações do grupo de trabalho ou do lado do cliente, todos os novos dados inseridos por meio de consultas de gravação serão criptografados com SSE-KMS em vez de CSE-KMS. Isso ocorre porque as configurações de criptografia dos resultados das consultas também se aplicam aos novos dados inseridos nas tabelas. Além disso, os resultados das consultas, os metadados e os arquivos de manifesto do Athena são criptografados com SSE-KMS.
O Athena ainda consegue realizar a leitura de tabelas com a propriedade de tabela `has_encrypted_data`, mesmo quando existe uma combinação de objetos criptografados com CSE-KMS e SSE-S3/SSE-KMS.

# 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. 