Creación de tablas basadas en conjuntos de datos cifrados en Amazon S3 - Amazon Athena

Creación de tablas basadas en conjuntos de datos cifrados en Amazon S3

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

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

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 en la Guía de administración de Amazon EMR.

Uso de las propiedades de tabla encryption_option y kms_key

En una instrucción CREATE TABLE, 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

En una instrucción CREATE TABLE (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 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.

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

Escritura de datos cifrados en SSE-S3/SSE-KMS/CSE-KMS

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, 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

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.