

# Criar tabelas baseadas em conjuntos de dados criptografados no Amazon S3
<a name="creating-tables-based-on-encrypted-datasets-in-s3"></a>

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
<a name="reading-sse-s3-sse-kms-encrypted-tables"></a>

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
<a name="reading-cse-kms-encrypted-tables"></a>

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](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart) (Configurar o carregamento fracionado no Amazon S3) no *Guia de gerenciamento do Amazon EMR*.

### Uso das propriedades encryption\_option e kms\_key da tabela
<a name="using-encryption-option-and-kms-key-table-properties"></a>

Em uma instrução [CREATE TABLE](create-table.md), 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
<a name="using-has-encrypted-data-table-property"></a>

Em uma instrução [CREATE TABLE](create-table.md), 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](data-sources-glue-manual-table.md) 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)](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/add-table-form-encrypted-option.png)


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](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/tables-list-encrypted-table-icon.png)


## Gravação de dados criptografados com SSE-S3/SSE-KMS/CSE-KMS
<a name="writing-sse-s3-sse-kms-cse-kms-encrypted-data"></a>

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](create-table.md), 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
<a name="considerations-and-limitations"></a>

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.