

# Migración de CSE-KMS a SSE-KMS
<a name="migrating-csekms-ssekms"></a>

Puede especificar el cifrado CSE-KMS de dos maneras: durante la configuración del cifrado de los resultados de la consulta del grupo de trabajo y en la configuración del lado del cliente. Para obtener más información, consulte [Cifrado de los resultados de las consultas de Athena en Amazon S3](encrypting-query-results-stored-in-s3.md). Durante el proceso de migración, es importante auditar los flujos de trabajo existentes que leen y escriben datos de CSE-KMS, identificar los grupos de trabajo en los que está configurado CSE-KMS y localizar las instancias en las que CSE-KMS está configurado mediante parámetros del cliente.

## Actualización de la configuración de cifrado de los resultados de consultas de grupos de trabajo
<a name="migrating-updating-workgroup-query-results-encryption"></a>

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

**Cómo actualizar la configuración de cifrado en la consola de Athena**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. En el panel de navegación de la consola de Athena, elija **Grupos de trabajo**.

1. En la página **Grupos de trabajo**, seleccione el botón del grupo de trabajo que quiere editar. 

1. Seleccione **Acciones**, **Editar**.

1. Abra **Configuración de resultados de la consulta** y elija **Cifrar resultados de la consulta**.

1. En la sección **Tipo de cifrado**, elija la opción de cifrado **SSE\$1KMS**.

1. Introduzca su clave KMS en **Elegir una clave de KMS AWS diferente (avanzado)**.

1. Seleccione **Save changes (Guardar cambios)**. El grupo de trabajo actualizado aparece en la lista de la página **Grupos de trabajo**.

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

Ejecute el siguiente comando para actualizar la configuración de cifrado de los resultados de la consulta a SSE-KMS en su grupo de trabajo.

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

------

## Actualización de la configuración de cifrado de los resultados de las consultas del cliente
<a name="migrating-updating-clientside-query-results-encryption"></a>

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

Para actualizar la configuración del lado del cliente para el cifrado de los resultados de las consultas de CSE-KMS a SSE-KMS, consulte [Cifrado de los resultados de las consultas de Athena en Amazon S3](encrypting-query-results-stored-in-s3.md).

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

Solo puede especificar la configuración de cifrado de los resultados de la consulta en la configuración del lado del cliente con el comando `start-query-execution`. Si ejecuta este comando CLI y anula la configuración de cifrado de los resultados de la consulta que especificó en su grupo de trabajo con CSE-KMS, cambie el comando para cifrar los resultados de la consulta usando `SSE_KMS` de la siguiente manera.

```
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**  
Tras actualizar la configuración del grupo de trabajo o del lado del cliente, cualquier dato nuevo que inserte mediante consultas escritas utilizará el cifrado SSE-KMS en lugar del CSE-KMS. Esto se debe a que las configuraciones de cifrado de los resultados de las consultas también se aplican a los datos de tablas recientemente insertados. Los resultados de las consultas, los metadatos y los archivos de manifiesto de Athena también se cifran con SSE-KMS.
Athena puede seguir leyendo tablas con la propiedad de tabla `has_encrypted_data` incluso cuando hay una combinación de objetos cifrados con CSE-KMS y SSE-S3/SSE-KMS.

# Conversión de datos de tabla CSE-KMS a SSE-KMS
<a name="convert-csekms-table-ssekms"></a>

Si sus flujos de trabajo utilizan actualmente CSE-KMS para el cifrado de datos de tablas, realice la transición a SSE-KMS siguiendo estos pasos.

## Requisito previo
<a name="convert-csekms-table-ssekms-preq"></a>

Si sigue escribiendo datos con un grupo de trabajo de CSE-KMS o con una configuración del lado del cliente, siga los pasos que se indican en [Migración de CSE-KMS a SSE-KMS](migrating-csekms-ssekms.md) para actualizarlos a SSE-KMS. Esto evita que se agreguen nuevos datos cifrados con CSE-KMS durante el proceso de migración desde cualquier otro flujo de trabajo que pueda escribir en las tablas.

## Migración de datos
<a name="convert-csekms-table-ssekms-migrat"></a>

1. Compruebe si la tabla tiene la propiedad `has_encrypted_data` establecida en `true`. Esta propiedad especifica que la tabla puede contener datos cifrados con CSE-KMS. Sin embargo, es importante tener en cuenta que esta propiedad podría estar presente incluso en tablas sin ningún dato real cifrado con CSE-KMS.

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

   1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Elija **Iniciar editor de consultas**.

   1. En el lado izquierdo del editor, en **Base de datos**, elija la base de datos que desea consultar.

   1. En el editor de consultas, ejecute la siguiente consulta para ver el valor establecido en la propiedad `has_encrypted_data table`.

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

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

   Inicie una consulta de Athena que muestre el valor de la propiedad `has_encrypted_data` en la tabla como se muestra en el siguiente ejemplo.

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

   Obtenga los resultados de la consulta para comprobar el valor de la propiedad de tabla `has_encrypted_data` para la tabla como se muestra en el siguiente ejemplo.

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

------

1. Para cada objeto cifrado con CSE-KMS en la tabla.

   1. Descargue el objeto de S3 mediante el cliente de cifrado S3 y descífrelo. Este es un ejemplo con el AWS SDK V2 de Java.

      **Importaciones**

      ```
      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. Cargue el objeto en S3 con el mismo nombre y el cifrado SSE-KMS. A continuación, se muestra un ejemplo con el AWS SDK V2 de Java.

      **Importaciones**

      ```
      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 de**

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

## Después de la migración
<a name="convert-csekms-table-ssekms-post-migrat"></a>

Tras volver a cifrar correctamente todos los archivos CSE-KMS de la tabla, lleve a cabo los siguientes pasos. 

1. Quite la propiedad `has_encrypted_data` de la tabla.

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

   1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Elija **Iniciar editor de consultas**.

   1. En el lado izquierdo del editor, en **Base de datos**, elija la base de datos que desea consultar.

   1. En el editor de consultas, ejecute la siguiente consulta para su tabla.

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

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

   Ejecute el siguiente comando para eliminar la propiedad de `has_encrypted_data` de su tabla.

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

------

1. Actualice sus flujos de trabajo para utilizar un cliente S3 básico en lugar de un cliente de cifrado S3 y, a continuación, especifique el cifrado SSE-KMS para la escritura de datos. 