Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3 - Amazon Athena

Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3

O Athena pode ler e gravar tabelas cujos conjuntos de dados subjacentes são criptografados com SSE-S3, SSE-KMS ou CSE-KMS. Dependendo da opção de criptografia usada para os dados da tabela e do tipo de consulta executada, é possível que você precise especificar algumas propriedades adicionais da tabela para ler e gravar dados criptografados.

Leitura de tabelas criptografadas com SSE-S3/SSE-KMS

Nenhuma propriedade de tabela adicional precisa ser especificada na criação de tabelas para ler conjuntos de dados criptografados com SSE-S3/SSE-KMS. O Amazon S3 manipula a descriptografia dos objetos SSE automaticamente.

Leitura de tabelas criptografadas com CSE-KMS

Há dois conjuntos diferentes de propriedades de tabela que podem ser especificados para que o Athena leia conjuntos de dados criptografados com CSE-KMS:

  • Uso das propriedades encryption_option e kms_key da tabela (recomendado)

  • Uso da propriedade has_encrypted_data da tabela

Importante

Se você usa o Amazon EMR com o EMRFS para carregar arquivos Parquet criptografados com CSE-KMS, deve desabilitar os carregamentos multipart definindo fs.s3n.multipart.uploads.enabled como false. Se você não fizer isso, o Athena não poderá determinar o tamanho do arquivo Parquet, e um erro HIVE_CANNOT_OPEN_SPLIT será emitido. Para obter mais informações, consulte Configure multipart upload for Amazon S3 (Configurar o carregamento fracionado no Amazon S3) no Guia de gerenciamento do Amazon EMR.

Uso das propriedades encryption_option e kms_key da tabela

Em uma instrução CREATE TABLE, use a cláusula TBLPROPERTIES que especifica encryption_option='CSE_KMS' e kms_key='aws_kms_key_arn', conforme mostrado no exemplo a seguir.

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')

Quando essas propriedades são configuradas:

  • O Athena pode ler objetos criptografados com CSE-KMS criados pelos clientes de criptografia V1, V2 ou V3 do Amazon S3.

  • O Athena usará a chave do AWS KMS em kms_key para descriptografar os dados do CSE-KMS. Se algum objeto for criptografado com outra chave do AWS KMS, a consulta falhará.

  • O Athena ainda pode ler objetos criptografados com SSE-S3 e SSE-KMS, embora não seja recomendável misturar objetos criptografados do lado do servidor e do lado do cliente.

Uso da propriedade has_encrypted_data a tabela

Em uma instrução CREATE TABLE, use a cláusula TBLPROPERTIES que especifica has_encrypted_data='true', conforme mostrado no exemplo a seguir.

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')

Quando a propriedade has_encrypted_data da tabela é especificada:

  • O Athena só pode ler objetos criptografados com CSE-KMS criados pelo cliente de criptografia V1 do Amazon S3.

  • O Athena inferirá a chave do AWS KMS usada para criptografar o objeto CSE-KMS dos metadados do objeto, e depois usará essa chave para descriptografar o objeto.

  • O Athena ainda pode ler objetos criptografados com SSE-S3 e SSE-KMS, embora não seja recomendável misturar objetos criptografados do lado do servidor e do lado do cliente.

nota

Quando encryption_option e kms_key são especificados junto com has_encrypted_data, as propriedades encryption_option e kms_key da tabela têm precedência, e has_encrypted_data é ignorado.

Ao usar o console do Athena para criar uma tabela usando um formulário e especificar o local da tabela, selecione a opção Conjunto de dados criptografado para adicionar a propriedade has_encrypted_data='true' à tabela.

Selecionar Encrypted data set (Conjunto de dados criptografado) no formulário “Add table” (Adicionar tabela)

Na lista de tabelas do console do Athena, as tabelas criptografadas com CSE-KMS com has_encrypted_data='true' exibem um ícone em forma de chave.

Ícone de tabela criptografada

Gravação de dados criptografados com SSE-S3/SSE-KMS/CSE-KMS

Por padrão, os arquivos de dados recém-inseridos serão criptografados usando a configuração de criptografia dos resultados da consulta especificados no grupo de trabalho do Athena. Para gravar dados de tabela com uma configuração de criptografia diferente da configuração de criptografia dos resultados da consulta, você precisará adicionar algumas propriedades adicionais da tabela.

Em uma instrução CREATE TABLE, use a cláusula TBLPROPERTIES que especifica encryption_option='SSE_S3 | SSE_KMS | CSE_KMS' e kms_key='aws_kms_key_arn', conforme mostrado no exemplo a seguir.

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 os dados recém-inseridos serão criptografados usando a configuração de criptografia especificada pelas propriedades da tabela, em vez de usar a configuração de criptografia dos resultados da consulta no grupo de trabalho.

Condições e limitações

Ao escrever e ler conjuntos de dados criptografados, considere os pontos a seguir.

  • As propriedades has_encrypted_data, encryption_option e kms_key da tabela só podem ser usadas com tabelas do Hive.

  • Ao criar uma tabela com dados criptografados com CSE-KMS, recomendamos que você garanta que todos os dados sejam criptografados com a mesma chave do AWS KMS.

  • Ao criar uma tabela com dados criptografados com CSE-KMS, recomendamos que você garanta que todos os dados sejam criptografados com CSE-KMS e que não haja uma mistura de objetos não criptografados com CSE-KMS e CSE-KMS.