

# Creación de tablas basadas en conjuntos de datos cifrados en Amazon S3
<a name="creating-tables-based-on-encrypted-datasets-in-s3"></a>

Athena puede leer y escribir en las tablas cuyos conjuntos de datos subyacentes estén cifrados en SSE-S3, SSE-KMS o CSE-KMS. Según la opción de cifrado utilizada para los datos de la tabla y el tipo de consultas ejecutadas, es posible que tenga que especificar algunas propiedades de tabla adicionales para leer y escribir los datos cifrados.

## Lectura de las tablas cifradas en SSE-S3/SSE-KMS
<a name="reading-sse-s3-sse-kms-encrypted-tables"></a>

No es necesario especificar propiedades de tabla adicionales al crear la tabla para leer conjuntos de datos cifrados con SSE-S3/SSE-KMS. Amazon S3 gestiona el descifrado de los objetos SSE automáticamente.

## Lectura de las tablas cifradas CSE-KMS
<a name="reading-cse-kms-encrypted-tables"></a>

Hay dos conjuntos diferentes de propiedades de tabla que se pueden especificar para que Athena lea los conjuntos de datos cifrados con CSE-KMS,
+ Uso de las propiedades de tabla `encryption_option` y `kms_key` (recomendado)
+ Uso de la propiedad de tabla `has_encrypted_data`

**importante**  
Si utiliza Amazon EMR junto con EMRFS para cargar archivos Parquet cifrados con CSE-KMS, debe desactivar las cargas multiparte estableciendo el valor `fs.s3n.multipart.uploads.enabled` en `false`. Si no lo hace, Athena no podrá determinar la longitud del archivo Parquet y se producirá un error **HIVE\_CANNOT\_OPEN\_SPLIT**. Para obtener más información, consulte [Configuración de carga multiparte para Amazon S3](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart) en la *Guía de administración de Amazon EMR*.

### Uso de las propiedades de tabla encryption\_option y kms\_key
<a name="using-encryption-option-and-kms-key-table-properties"></a>

En una instrucción [CREATE TABLE](create-table.md), utilice una cláusula `TBLPROPERTIES` que especifique `encryption_option='CSE_KMS'` y `kms_key='aws_kms_key_arn'`, como en el siguiente ejemplo.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/{{folder_with_my_encrypted_data}}/'
TBLPROPERTIES (
    'encryption_option' = 'CSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

Cuando se configuran estas propiedades,
+ Athena puede leer objetos cifrados con CSE-KMS creados por los clientes de cifrado de Amazon S3 V1, V2 o V3.
+ Athena utilizará la clave AWS KMS en `kms_key` para descifrar los datos de CSE-KMS. Si algún objeto se cifró con una clave AWS KMS diferente, la consulta fallará.
+ Athena aún puede leer objetos cifrados en SSE-S3 y SSE-KMS, aunque no se recomienda mezclar objetos cifrados del cliente y del lado del servidor.

### Uso de la propiedad de tabla has\_encrypted\_data
<a name="using-has-encrypted-data-table-property"></a>

En una instrucción [CREATE TABLE](create-table.md) (CREAR TABLA), utilice una cláusula `TBLPROPERTIES` que especifica `has_encrypted_data='true'`, como en el siguiente ejemplo.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/{{folder_with_my_encrypted_data}}/'
TBLPROPERTIES (
    'has_encrypted_data' = 'true')
```

Cuando se especifica la propiedad de tabla has\_encrypted\_data,
+ Athena solo puede leer objetos cifrados con CSE-KMS creados por los clientes de cifrado de Amazon S3 V1.
+ Athena deducirá la clave AWS KMS utilizada para cifrar el objeto CSE-KMS a partir de los metadatos del objeto y, a continuación, utilizará esa clave para descifrar el objeto.
+ Athena aún puede leer objetos cifrados en SSE-S3 y SSE-KMS, aunque no se recomienda mezclar objetos cifrados del cliente y del lado del servidor.

**nota**  
Cuando se especifican `encryption_option` y `kms_key` junto con `has_encrypted_data`, las propiedades de tabla `encryption_option` y `kms_key` tienen prioridad y `has_encrypted_data` se ignora.

Cuando utilice la consola de Athena para [crear una tabla mediante un formulario](data-sources-glue-manual-table.md) y especificar la ubicación de la tabla, seleccione la opción **Conjunto de datos cifrados** para añadir la propiedad `has_encrypted_data='true'` a la tabla.

![Seleccione Encrypted data set (Conjunto de datos cifrados) en el formulario para agregar tablas.](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/add-table-form-encrypted-option.png)


En la lista de tablas de la consola de Athena, las tablas cifradas con `has_encrypted_data='true'` muestran un icono con forma de llave.

![Icono de tabla de cifrado](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/tables-list-encrypted-table-icon.png)


## Escritura de datos cifrados en SSE-S3/SSE-KMS/CSE-KMS
<a name="writing-sse-s3-sse-kms-cse-kms-encrypted-data"></a>

De forma predeterminada, los archivos de datos recién insertados se cifrarán mediante la configuración de cifrado de los resultados de la consulta especificada en el grupo de trabajo de Athena. Para escribir los datos de tabla con una configuración de cifrado diferente a la configuración de cifrado de los resultados de la consulta, tendrá que añadir algunas propiedades de tabla adicionales.

En una instrucción [CREATE TABLE](create-table.md), utilice una cláusula `TBLPROPERTIES` que especifique `encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'` y `kms_key='aws_kms_key_arn'`, como en el siguiente ejemplo.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/{{folder_with_my_encrypted_data}}/'
TBLPROPERTIES (
    'encryption_option' = 'SSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

Todos los datos recién insertados se cifrarán mediante la configuración de cifrado especificada en las propiedades de tabla, en lugar de utilizar la configuración de cifrado de los resultados de la consulta en el grupo de trabajo.

## Condiciones y limitaciones
<a name="considerations-and-limitations"></a>

Cuando escriba y lea conjuntos de datos cifrados, tenga en cuenta los siguientes puntos.
+ Las propiedades de tabla `has_encrypted_data`, `encryption_option` y `kms_key` solo se pueden usar con las tablas de Hive.
+ Al crear una tabla con datos cifrados con CSE-KMS, le recomendamos que se asegure de que todos los datos estén cifrados con la misma clave. AWS KMS
+ Al crear una tabla con datos cifrados con CSE-KMS, le recomendamos que se asegure de que todos los datos estén cifrados con CSE-KMS y de que no haya una combinación de objetos cifrados con CSE-KMS y CSE-KMS.