

# Criptografia em repouso do DynamoDB
<a name="EncryptionAtRest"></a>

Todos os dados de usuário armazenados no Amazon DynamoDB são totalmente criptografados em repouso. A criptografia em repouso do DynamoDB fornece segurança aprimorada ao criptografar seus dados em repouso usando chaves de criptografia armazenadas no [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/). Essa funcionalidade ajuda a reduzir a carga e complexidade operacionais necessárias para proteger dados confidenciais. Com a criptografia de dados em repouso, você pode criar aplicativos confidenciais que atendem a requisitos rigorosos de conformidade e regulamentação de criptografia.

A criptografia em repouso do DynamoDB fornece uma camada adicional de proteção de dados sempre protegendo seus dados seguros uma tabela criptografada, incluindo a chave primária, os índices secundários local e global, os fluxos, as tabelas globais, os backups e os clusters do DynamoDB Accelerator (DAX) sempre que os dados são armazenados em mídia durável. Políticas organizacionais, regulamentações setoriais ou governamentais e exigências de conformidade geralmente demandam o uso de criptografia em repouso para aumentar a segurança de dados de seus aplicativos. Para obter mais informações sobre criptografia para aplicações de banco de dados, consulte [AWS Database Encryption SDK](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/what-is-database-encryption-sdk.html).

A criptografia em repouso integra-se com o AWS KMS para o gerenciamento da chave de criptografia usada para criptografar suas tabelas. Para obter mais informações sobre os principais tipos e estados, consulte [AWS Key Management Service concepts](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type) no *Guia do desenvolvedor do AWS Key Management Service*.

Ao criar uma nova tabela, você pode escolher um dos seguintes tipo de AWS KMS key para criptografar a tabela: É possível alternar entre esses tipos de chave a qualquer momento.
+ **Chave pertencente à AWS –** tipo de criptografia padrão. A chave pertence ao DynamoDB (sem custo adicional).
+ **Chave gerenciada pela AWS**: a chave é armazenada na sua conta e é gerenciada pelo AWS KMS (cobranças do AWS KMS são aplicáveis).
+ **Chave gerenciada pelo cliente**: a chave é armazenada na sua conta e é você que a cria, detém e gerencia. Você tem controle total sobre a chave do KMS (cobranças do AWS KMS são aplicáveis).

Para obter mais informações sobre os tipos de chave, consulte [Customer keys and AWS keys](/kms/latest/developerguide/concepts.html#key-mgmt).

**nota**  
Na criação de um novo cluster do DAX com criptografia em repouso habilitada, uma Chave gerenciada pela AWS será usada para criptografar dados em repouso no cluster.
Se sua tabela tem uma chave de classificação, algumas dessas chaves que marcam os limites de intervalo são armazenadas em textos simples nos metadados da tabela.

Quando você acessa uma tabela criptografada, o DynamoDB descriptografa os dados da tabela de forma transparente. Você não precisa alterar seu código nem suas aplicações para usar ou gerenciar tabelas criptografadas. O DynamoDB continua a entregar a mesma latência inferior a 10 milissegundos esperada, e todas as consultas do DynamoDB funcionam perfeitamente em seus dados criptografados.

É possível especificar uma chave de criptografia quando você cria uma tabela ou alterna as chaves de criptografia em uma tabela existente usando o Console de gerenciamento da AWS, a AWS Command Line Interface (AWS CLI) ou a API do Amazon DynamoDB. Para saber como, consulte [Gerenciar tabelas criptografadas no DynamoDB](encryption.tutorial.md).

A criptografia em repouso usando a Chave pertencente à AWS é oferecida sem custo adicional. No entanto, as cobranças do AWS KMS se aplicam a uma Chave gerenciada pela AWS e a uma chave gerenciada pelo cliente. Para saber mais sobre preços, consulte [Preços do AWS KMS](https://aws.amazon.com/kms/pricing).

A criptografia em repouso do DynamoDB está disponível em todas as regiões da AWS, incluindo as regiões AWS China (Pequim), AWS China (Ningxia) e AWS GovCloud (EUA). Para obter mais informações, consulte [Criptografia em repouso do DynamoDB: como funciona](encryption.howitworks.md) e [Notas de uso da criptografia em repouso do DynamoDB](encryption.usagenotes.md).

# Criptografia em repouso do DynamoDB: como funciona
<a name="encryption.howitworks"></a>

A criptografia em repouso do Amazon DynamoDB criptografa seus dados usando Advanced Encryption Standard de 256 bits (AES-256), o que ajuda a proteger seus dados contra acesso não autorizado ao armazenamento subjacente.

A criptografia em repouso integra-se com o AWS Key Management Service (AWS KMS) para o gerenciamento da chave de criptografia usada para criptografar suas tabelas.

**nota**  
Em maio de 2022, o AWS KMS alterou o cronograma de alternância para Chaves gerenciadas pela AWS a cada 3 anos (aproximadamente 1.095 dias) para a cada ano (aproximadamente 365 dias).  
Novas Chaves gerenciadas pela AWS são alternadas automaticamente um ano após serem criadas e aproximadamente a cada ano depois disso.  
As Chaves gerenciadas pela AWS existentes são alternadas automaticamente um ano após sua alternância mais recente e a cada ano depois disso.

## Chaves pertencentes à AWS
<a name="ddb-owned"></a>

 As Chaves pertencentes à AWS não são armazenadas na sua conta da AWS. Elas fazem parte de um conjunto de chaves do KMS que a AWS detém e gerencia para serem usadas em várias contas da AWS. Os serviços da AWS podem usar Chaves pertencentes à AWS para proteger os dados. As Chaves pertencentes à AWS usadas pelo DynamoDB são alternadas a cada ano (cerca de 365 dias). 

Você não pode visualizar, gerenciar ou usar Chaves pertencentes à AWS, nem auditar seu uso. No entanto, você não precisa fazer nenhum trabalho nem alterar nenhum programa para proteger as chaves que criptografam seus dados.

Não é cobrada taxa mensal nem taxa de uso para usar Chaves pertencentes à AWS, e elas não são contabilizadas com base nas cotas do AWS KMS para a sua conta.

## Chaves gerenciadas pela AWS
<a name="managed-key-service-default-kms"></a>

Chaves gerenciadas pela AWS são chaves do KMS em sua conta que são criadas, gerenciadas e usadas em seu nome por um produto da AWS integrado ao AWS KMS. Você pode visualizar as Chaves gerenciadas pela AWS na sua conta, visualizar suas políticas de chaves e auditar o uso delas em logs do AWS CloudTrail. No entanto, não é possível gerenciar essas chaves do KMS nem alterar suas permissões.

A criptografia em repouso integra-se automaticamente com o AWS KMS para o gerenciamento das Chaves gerenciadas pela AWS para o DynamoDB (`aws/dynamodb`), usadas para criptografar suas tabelas. Se uma Chave gerenciada pela AWS não existir quando você criar sua tabela do DynamoDB criptografada, o AWS KMS criará automaticamente uma nova chave para você. Essa chave é usada com tabelas criptografados que são criados no futuro. O AWS KMS integra hardware e software seguros e altamente disponíveis para oferecer um sistema de gerenciamento de chaves escalonado para a nuvem.

Para obter mais informações sobre como gerenciar as permissões de Chave gerenciada pela AWS, consulte [Autorizar uso de Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-authz) no *Guia do Desenvolvedor do AWS Key Management Service*.

## Chaves gerenciadas pelo cliente
<a name="managed-key-customer-managed"></a>

Chaves gerenciadas pelo cliente são chaves do KMS disponíveis na sua conta do AWS que você cria, detém e gerencia. Você tem controle total sobre essas chaves do KMS, inclusive para estabelecer e manter as políticas de chaves, as políticas do IAM e as concessões; habilitar e desabilitar as chaves do KMS; alternar seu material de criptografia; adicionar tags; criar aliases que fazem referência a elas; e programar a exclusão delas. Para ter mais informações sobre como gerenciar as permissões de uma chave gerenciada pelo cliente, consulte [Chaves gerenciadas pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

Quando você especifica uma chave gerenciada pelo cliente como a chave de criptografia em nível de tabela, a tabela, os índices secundários local e global e os fluxos do DynamoDB são criptografados com a mesma chave gerenciada pelo cliente. Os backups sob demanda são criptografados com a chave de criptografia no nível da tabela que é especificada no momento da criação do backup. A atualização da chave de criptografia no nível da tabela não altera a chave de criptografia associada aos backups sob demanda existentes.

Definir o estado da chave gerenciada pelo cliente como desabilitada ou programá-la para exclusão evita que todos os usuários e o serviço DynamoDB possam criptografar ou descriptografar dados e realizar operações de leitura e gravação na tabela. O DynamoDB deve ter acesso à sua chave de criptografia para garantir que você possa continuar acessando sua tabela e para evitar a perda de dados.

Se você desabilitar a chave gerenciada pelo cliente ou programá-la para exclusão, o status da tabela passará para **Inaccessible** (Inacessível). Para garantir que você possa continuar trabalhando com a tabela, é necessário conceder ao DynamoDB acesso à chave de criptografia especificada em até sete dias. Assim que o serviço detectar que a chave de criptografia está inacessível, o DynamoDB enviará uma notificação por e-mail para alertar você.

**nota**  
Se a chave gerenciada pelo cliente permanecer inacessível para o serviço DynamoDB por mais de sete dias, a tabela será arquivada e não poderá mais ser acessada. O DynamoDB criará um backup sob demanda da tabela e você será cobrado por ele. É possível usar esse backup sob demanda a fim de restaurar seus dados para uma nova tabela. Para iniciar a restauração, a última chave gerenciada pelo cliente na tabela deve estar habilitada e o DynamoDB deve ter acesso a ela.
Se a chave gerenciada pelo cliente que foi usada para criptografar uma réplica de tabela global estiver inacessível, o DynamoDB removerá essa réplica do grupo de replicação. A réplica não será excluída e a replicação será interrompida de e para essa região 20 horas após detectar que a chave gerenciada pelo cliente está inacessível.

Para obter mais informações, consulte [habilitar chaves](/kms/latest/developerguide/enabling-keys.html) e [excluir chaves.](/kms/latest/developerguide/deleting-keys.html) 

## Observações sobre o uso de Chaves gerenciadas pela AWS
<a name="managed-key-notes"></a>

O Amazon DynamoDB não consegue ler os dados da tabela, a menos que tenha acesso à chave do KMS armazenada em sua conta da AWS KMS. O DynamoDB usa criptografia envelopada e hierarquia de chaves para criptografar dados. A chave de criptografia do AWS KMS é usada para criptografar a chave raiz dessa hierarquia de chaves. Para obter mais informações, consulte [Criptografia envelopada](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping) no *Guia do desenvolvedor do AWS Key Management Service*.

 O DynamoDB não chama AWS KMS para cada operação do DynamoDB. A chave é atualizada uma vez a cada cinco minutos por chamador com tráfego ativo.

Verifique se configurou o SDK para reutilizar conexões. Caso contrário, você experimentará latências do DynamoDB tendo que reestabelecer novas entradas de cache do AWS KMS para cada operação do DynamoDB. Além disso, talvez seja necessário enfrentar custos mais altos do AWS KMS e do CloudTrail. Por exemplo, para fazer isso usando SDK de Node.js, você pode criar um novo agente HTTPS com `keepAlive` ativado. Para obter mais informações, consulte [Configurar keepAlive em Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html) no *Guia do desenvolvedor do AWS SDK para JavaScript*.

# Notas de uso da criptografia em repouso do DynamoDB
<a name="encryption.usagenotes"></a>

Considere o seguinte ao usar criptografia em repouso no Amazon DynamoDB:

## Todos os dados da tabela são criptografados
<a name="encryption.usagenotes.tabledata"></a>

A criptografia em repouso no lado do servidor está habilitada em todos os dados de tabelas do DynamoDB e não pode ser desabilitada. Não é possível criptografar apenas um subconjunto de itens em uma tabela.

A criptografia em repouso só criptografa dados enquanto eles estão estáticos (em repouso) em uma mídia de armazenamento persistente. Se a segurança dos dados for motivo de preocupação para dados em trânsito ou dados em uso, talvez seja necessário tomar outras medidas:
+ Dados em trânsito: todos os dados no DynamoDB são criptografados em trânsito. Por padrão, as comunicações com o DynamoDB usam o protocolo HTTPS, o qual protege o tráfego de rede usando a criptografia Secure Sockets Layer (SSL)/Transport Layer Security (TLS).
+ Dados em uso: proteja seus dados antes de enviá-los ao DynamoDB usando criptografia do lado do cliente. Para obter mais informações, consulte [Criptografia do lado do cliente e do lado do servidor](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/client-server-side.html) no *Guia do desenvolvedor do Amazon DynamoDB Encryption Client*.

É possível pode usar fluxos com tabelas criptografadas. Os fluxos do DynamoDB são sempre criptografados com uma chave de criptografia em nível de tabela. Para obter mais informações, consulte [Capturar dados de alterações para o DynamoDB Streams](Streams.md).

Os backups do DynamoDB são criptografados, e a tabela que é restaurada de um backup também tem a criptografia habilitada. É possível usar a Chave pertencente à AWS, a Chave gerenciada pela AWS ou a chave gerenciada pelo cliente para criptografar seus dados de backup. Para obter mais informações, consulte [Backup e restauração para o DynamoDB](Backup-and-Restore.md).

Os índices secundários locais e os índices secundários globais são criptografados usando a mesma chave da tabela-base.

## Tipos de criptografia
<a name="encryption.usagenotes.encryptiontypes"></a>

**nota**  
As chaves gerenciadas pelo cliente não são compatíveis com a tabela global versão 2017. Se quiser usar uma chave gerenciada pelo cliente em uma tabela global do DynamoDB, você deverá atualizar a tabela para a Tabela global versão 2019 e habilitá-la.

No Console de gerenciamento da AWS, o tipo de criptografia é `KMS` quando você usa a Chave gerenciada pela AWS ou a chave gerenciada pelo cliente para criptografar seus dados. O tipo de criptografia é `DEFAULT` quando você usa a Chave pertencente à AWS. Na API do Amazon DynamoDB, o tipo de criptografia é `KMS` quando a Chave gerenciada pela AWS ou a chave gerenciada pelo cliente é usada. Na ausência do tipo de criptografia, seus dados são criptografados usando a Chave pertencente à AWS. É possível alternar entre a Chave pertencente à AWS, a Chave gerenciada pela AWS e a chave gerenciada pelo cliente a qualquer momento. Você pode usar o console, a AWS Command Line Interface (AWS CLI) ou a API do Amazon DynamoDB para alternar as chaves de criptografia.

Observe as seguintes limitações ao usar chaves gerenciadas pelo cliente:
+ Não é possível usar uma chave gerenciada pelo cliente com clusters do DynamoDB Accelerator (DAX). Para obter mais informações, consulte [Criptografia em repouso do DAX](DAXEncryptionAtRest.md).
+ É possível usar uma chave gerenciada pelo cliente para criptografar tabelas que usam transações. No entanto, para garantir a durabilidade da propagação das transações, uma cópia da solicitação da transação é temporariamente armazenada pelo serviço e criptografada usando uma Chave pertencente à AWS. Os dados confirmados em suas tabelas e índices secundários são sempre criptografados em repouso usando a chave gerenciada pelo cliente.
+ É possível usar uma chave gerenciada pelo cliente para criptografar tabelas que usam o Contributor Insights. No entanto, os dados transmitidos ao Amazon CloudWatch são criptografados com uma Chave pertencente à AWS.
+ Ao fazer a transição para uma nova chave gerenciada pelo cliente, mantenha a chave original ativada até que o processo seja concluído. O AWS ainda precisará da chave original para descriptografar os dados antes de criptografá-los com a nova chave. O processo será concluído quando o Status SSEDescription da tabela estiver HABILITADO e o KMSMasterKeyArn da nova chave gerenciada pelo cliente for exibido. Nesse momento, a chave original pode ser desativada ou programada para exclusão.
+ Depois que a nova chave gerenciada pelo cliente é exibida, a tabela e quaisquer novos backups sob demanda são criptografados com a nova chave.
+ Todos os backups sob demanda existentes permanecem criptografados com a chave gerenciada pelo cliente que foi usada quando esses backups foram criados. Você precisará dessa mesma chave para restaurar os backups. Você pode identificar a chave para o período em que cada backup foi criado usando a API DescribeBackup para exibir a SSEDescription desse backup.
+ Se você desabilitar sua chave gerenciada pelo cliente ou programá-la para exclusão, qualquer dado no DynamoDB Streams ainda estará sujeito a uma vida útil de 24 horas. Qualquer dado de atividade não recuperado é elegível para remoção quando tiver mais de 24 horas.
+ Se você desabilitar sua chave gerenciada pelo cliente ou programá-la para exclusão, as exclusões por vida útil (TTL) continuarão por 30 minutos. Essas exclusões do TTL continuarão a ser emitidas ao DynamoDB Streams e estarão sujeitas ao intervalo de retenção/remoção padrão.

  Para obter mais informações, consulte [ habilitar chaves](/kms/latest/developerguide/enabling-keys.html) e [excluir chaves.](/kms/latest/developerguide/deleting-keys.html) 

## Usar chaves do KMS e chaves de dados
<a name="dynamodb-kms"></a>

O recurso de criptografia em repouso do DynamoDB usa uma AWS KMS key e uma hierarquia de chaves de dados para proteger os dados da sua tabela. O DynamoDB usa a mesma hierarquia de chaves para proteger fluxos do DynamoDB, tabelas globais e backups quando eles são gravados em mídia durável.

Recomendamos que você planeje sua estratégia de criptografia antes de implementar sua tabela no DynamoDB. Se você armazenar dados confidenciais no DynamoDB, considere incluir a criptografia do lado do cliente em seu plano. Dessa forma, você poderá criptografar os dados o mais próximo possível de sua origem e garantir sua proteção durante todo o ciclo de vida. Para obter mais informações, consulte a documentação [Cliente de criptografia do DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html).

**AWS KMS key**  
A criptografia em repouso protege suas tabelas do DynamoDB em uma AWS KMS key. Por padrão, o DynamoDB usa uma [Chave pertencente à AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk), uma chave de criptografia multilocatário que é criada e gerenciada em uma conta de serviço do DynamoDB. Porém, você pode criptografar suas tabelas do DynamoDB em uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) para o DynamoDB (`aws/dynamodb`) na sua Conta da AWS. Você pode selecionar uma chave do KMS diferente para cada tabela. A chave do KMS selecionada para uma tabela também é usada para criptografar índices secundários locais e globais, fluxos e backups.  
Você seleciona a chave do KMS para uma tabela ao criar ou atualizar essa tabela. É possível alterar a chave do KMS de uma tabela a qualquer momento, seja no console do DynamoDB ou usando a operação [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html). O processo de alternar chaves é transparente e não exige tempo de inatividade ou serviço de degradação.  
O DynamoDB oferece suporte somente para [chaves do KMS simétricas](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). Não é possível usar uma [chave do KMS assimétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks) para criptografar tabelas do DynamoDB. 
Use uma chave gerenciada pelo cliente para obter os seguintes recursos:  
+ Você cria e gerencia a chave do KMS, incluindo a configuração de [políticas de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), [políticas do IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) e [concessões](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) para controlar o acesso à chave do KMS. Você pode [habilitar e desabilitar](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html) a chave do KMS, habilitar e desabilitar a [alternância automática de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html) e [excluir a chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html) quando ela não estiver mais em uso.
+ Você pode usar uma chave gerenciada pelo cliente com [material de chave importado](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) ou uma chave gerenciada pelo cliente em um [armazenamento de chaves personalizado](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) que você possui e gerencia. 
+ Você pode auditar a criptografia e a descriptografia da sua tabela do DynamoDB examinando as chamadas de API do DynamoDB para o AWS KMS em [logs do AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail).
Use a Chave gerenciada pela AWS se precisar de qualquer um dos seguintes recursos:  
+ Você pode [ visualizar a chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html) e [sua política de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html). (Você não pode alterar a política de chave.)
+ Você pode auditar a criptografia e a descriptografia da sua tabela do DynamoDB examinando as chamadas de API do DynamoDB para o AWS KMS em [logs do AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail).
No entanto, a Chave pertencente à AWS é gratuita e seu uso não conta para [cotas de solicitações ou de recursos do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html). As chaves gerenciadas pelo cliente e as Chaves gerenciadas pela AWS [geram uma cobrança](https://aws.amazon.com/kms/pricing/) para cada chamada de API, e as cotas do AWS KMS são aplicáveis a essas chaves do KMS.

**Chaves de tabela**  
O DynamoDB usa a chave do KMS para a tabela para [gerar](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) e criptografar uma [chave de dados](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) exclusiva para a tabela, conhecida como *chave de tabela*. A chave de tabela é mantida durante a vida útil da tabela criptografada.   
A chave de tabela é usada como uma chave de criptografia de chaves. O DynamoDB usa essa chave de tabela para proteger as chaves de criptografia dos dados usadas para criptografar os dados da tabela. O DynamoDB gera uma chave de criptografia dos dados exclusiva para cada estrutura subjacente em uma tabela, mas vários itens de tabela podem ser protegidos com a mesma chave de criptografia dos dados.  

![\[Criptografar uma tabela do DynamoDB com criptografia em repouso\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/service-ddb-encrypt.png)

Quando você acessa uma tabela criptografada pela primeira vez, o DynamoDB envia uma solicitação para o AWS KMS usar a chave do KMS para descriptografar a chave de tabela. Ele usa a chave de tabela de texto simples para descriptografar as chaves de criptografia dos dados e usa as chaves de criptografia dos dados de texto simples para descriptografar os dados da tabela.  
O DynamoDB armazena e usa a chave de tabelas e as chaves de criptografia dos dados fora do AWS KMS. Ele protege todas as chaves com a criptografia [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) e chaves de criptografia de 256 bits. Armazena as chaves criptografadas com os dados criptografados para que estejam disponíveis para descriptografar os dados da tabela sob demanda.  
Se você alterar a chave do KMS da tabela, o DynamoDB gerará uma nova chave de tabela. Ele usará a nova chave de tabela para criptografar novamente as chaves de criptografia dos dados.

**Armazenamento em cache de chaves de tabela**  
Para evitar chamar o AWS KMS para cada operação do DynamoDB, o DynamoDB armazena em cache chaves de tabela em texto simples para cada chamador na memória. Quando o DynamoDB recebe uma solicitação para a chave de tabela armazenada em cache após cinco minutos de inatividade, ele envia uma nova solicitação ao AWS KMS para descriptografar a chave de tabela. Essa chamada capturará todas as alterações feitas nas políticas de acesso da chave do KMS no AWS KMS ou no AWS Identity and Access Management (IAM) desde a última solicitação para descriptografar a chave de tabela.

## Autorizar o uso da sua chave do KMS
<a name="dynamodb-kms-authz"></a>

Se você usar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) ou a [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) na sua conta para proteger a tabela do DynamoDB, as políticas nessa chave do KMS deverão conceder ao DynamoDB permissão para usá-la em seu nome. O contexto de autorização na Chave gerenciada pela AWS para o DynamoDB inclui sua política de chaves e concessões que delegam permissões para usá-la. 

Você tem controle total sobre as políticas e concessões em uma chave gerenciada pelo cliente. Como a Chave gerenciada pela AWS está na sua conta, você pode visualizar suas políticas e concessões. Porém, como ela é gerenciada pela AWS, você não pode alterar as políticas.

O DynamoDB não precisa de autorização adicional para usar a [Chave pertencente à AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) padrão para proteger as tabelas do DynamoDB na sua Conta da AWS.

**Topics**
+ [

### Política de chaves para uma Chave gerenciada pela AWS
](#dynamodb-policies)
+ [

### Política de chaves para uma chave gerenciada pelo cliente
](#dynamodb-customer-cmk-policy)
+ [

### Usar concessões para autorizar o DynamoDB
](#dynamodb-grants)

### Política de chaves para uma Chave gerenciada pela AWS
<a name="dynamodb-policies"></a>

Quando o DynamoDB usa a [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para o DynamoDB (`aws/dynamodb`) em operações de criptografia, ele faz isso em nome do usuário que está acessando o [recurso do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html). A política de chaves na Chave gerenciada pela AWS concede a todos os usuários na conta permissão para usar a Chave gerenciada pela AWS para operações especificadas. Porém, a permissão é concedida somente quando o DynamoDB faz a solicitação em nome do usuário. A [condição ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) na política de chaves não permite que nenhum usuário use a Chave gerenciada pela AWS, a menos que a solicitação seja proveniente do serviço DynamoDB.

Essa política de chaves, como as políticas de todas as Chaves gerenciadas pela AWS, é estabelecida pela AWS. Você não pode alterá-la, mas pode visualizá-la a qualquer momento. Para obter mais detalhes, consulte [Visualizar uma política de chaves](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-viewing.html).

As declarações de política na política de chaves têm os seguintes efeitos:
+ Permita que os usuários na conta usem a Chave gerenciada pela AWS para o DynamoDB em operações de criptografia somente quando essa solicitação for proveniente do DynamoDB em seu nome. A política também permite que os usuários [criem concessões](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) para a chave do KMS.
+ Permite identidades autorizadas do IAM na conta visualizem as propriedades da Chave gerenciada pela AWS para o DynamoDB e [revoguem a concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) que permite ao DynamoDB usar a chave do KMS. O DynamoDB usa [concessões](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) para operações de manutenção em andamento.
+ Permite que o DynamoDB execute operações somente leitura para encontrar a Chave gerenciada pela AWS para o DynamoDB na sua conta.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "auto-dynamodb-1",
  "Statement" : [ {
    "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "*"
    },
    "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ],
    "Resource" : "*",
    "Condition" : {
      "StringEquals" : {
        "kms:CallerAccount" : "111122223333",
        "kms:ViaService" : "dynamodb.us-west-2.amazonaws.com"
      }
    }
  }, {
    "Sid" : "Allow direct access to key metadata to the account",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ],
    "Resource" : "*"
  }, {
    "Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly",
    "Effect" : "Allow",
    "Principal" : {
      "Service" : "dynamodb.amazonaws.com"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ],
    "Resource" : "*"
  } ]
}
```

------

### Política de chaves para uma chave gerenciada pelo cliente
<a name="dynamodb-customer-cmk-policy"></a>

Ao escolher uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) para proteger uma tabela do DynamoDB, o DynamoDB obtém permissão para usar a chave do KMS em nome da entidade principal que faz a seleção. Essa entidade principal, um usuário ou uma função, deve ter as permissões em uma chave do KMS exigida pelo DynamoDB. É possível fornecer essas permissões em uma [política de chaves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), em uma [política do IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) ou em uma [concessão](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html).

No mínimo, o DynamoDB exige as seguintes permissões em uma chave gerenciada pelo cliente:
+ [kms:Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1 (para kms:ReEncryptFrom e kms:ReEncryptTo)
+ kms:GenerateDataKey\$1 (para [kms:GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) e [kms:GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html))
+ [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)

Por exemplo, o exemplo de política de chaves a seguir fornece somente as permissões necessárias. A política tem os seguintes efeitos:
+ Permite que o DynamoDB use a chave do KMS em operações de criptografia e crie concessões, mas somente quando está atuando em nome de entidades principais na conta que tem permissão para usar o DynamoDB. Se as entidades principais especificadas na instrução de política não tiverem permissão para usar o DynamoDB, a chamada falhará, mesmo se vier do serviço do DynamoDB. 
+ A chave de condição [kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) concede as permissões somente quando a solicitação é proveniente do DynamoDB em nome das entidades principais listadas na instrução da política. Essas entidades principais não podem chamar essas operações diretamente. Observe que o valor de `kms:ViaService`, `dynamodb.*.amazonaws.com`, tem um asterisco (\$1) na posição da região. O DynamoDB requer a permissão para ser independente de qualquer Região da AWS particular, para que ele possa fazer chamadas entre regiões como suporte a [tabelas globais do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html).
+ Concede aos administradores da chave do KMS (usuários que podem assumir a função `db-team`) acesso somente leitura à chave do KMS e permissão para revogar concessões, incluindo as [concessões exigidas pelo DynamoDB](#dynamodb-grants) para proteger a tabela.

Antes de usar um exemplo de política de chaves, substitua o exemplo de entidades principais por entidades principais reais da sua conta da Conta da AWS.

------
#### [ JSON ]

****  

```
{
  "Id": "key-policy-dynamodb",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "*",      
      "Condition": { 
         "StringLike": {
           "kms:ViaService" : "dynamodb.*.amazonaws.com"
         }
      }
    },
    {
      "Sid":  "Allow administrators to view the KMS key and revoke grants",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/db-team"
       },
      "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:RevokeGrant"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Usar concessões para autorizar o DynamoDB
<a name="dynamodb-grants"></a>

Além de políticas de chaves, o DynamoDB usa concessões para definir permissões em uma chave gerenciada pelo cliente ou na Chave gerenciada pela AWS para o DynamoDB (`aws/dynamodb`). Para visualizar as concessões em uma chave do KMS na sua conta, use a operação [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html). O DynamoDB não precisa de concessões ou permissões adicionais para usar a [Chave pertencente à AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) para proteger sua tabela.

O DynamoDB usa as permissões de concessão ao executar manutenção do sistema e tarefas de proteção de dados contínua em segundo plano. Usa também concessões para gerar [chaves de tabela](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-encrypt).

Cada concessão é específica a uma tabela. Se a conta incluir várias tabelas criptografadas na mesma chave do KMS, haverá uma concessão de cada tipo para cada tabela. A concessão é restrita pelo [contexto de criptografia do DynamoDB](#dynamodb-encryption-context), que inclui o nome da tabela e o ID da Conta da AWS, bem como a permissão para [retirar a concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) caso ela não seja mais necessária. 

Para criar as concessões, o DynamoDB deve ter permissão para chamar `CreateGrant` em nome do usuário que criou a tabela criptografada. Para Chaves gerenciadas pela AWS, o DynamoDB recebe a permissão `kms:CreateGrant` da [política de chaves](#dynamodb-policies), o que permite que os usuários da conta chamem [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) na chave do KMS somente quando o DynamoDB faz a solicitação em nome de um usuário autorizado. 

A política de chaves também pode permitir que a conta [revogue a concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) na chave do KMS. No entanto, se você revogar a concessão em uma tabela criptografada ativa, o DynamoDB não poderá proteger e manter a tabela.

## Contexto de criptografia do DynamoDB
<a name="dynamodb-encryption-context"></a>

Um [contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) é um conjunto de pares de chave-valor que contêm dados arbitrários não secretos. Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, o AWS KMS vincula de forma criptográfica o contexto de criptografia aos dados criptografados. Para descriptografar os dados, você deve passar o mesmo contexto de criptografia. 

O DynamoDB usa o mesmo contexto de criptografia em todas as operações de criptografia do AWS KMS. Se você usar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) ou uma [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger a tabela do DynamoDB, poderá usar o contexto de criptografia para identificar o uso da chave do KMS em logs e registros de auditoria. Ele também aparece em texto simples em logs, como o [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) e o [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). 

O contexto de criptografia também pode ser usado como uma condição para autorização em políticas e concessões. O DynamoDB usa o contexto de criptografia para restringir as [concessões](#dynamodb-grants) que permitem acesso à chave gerenciada pelo cliente ou à Chave gerenciada pela AWS na sua conta e região.

Em suas solicitações para o AWS KMS, o DynamoDB usa um contexto de criptografia com dois pares de chave-valor.

```
"encryptionContextSubset": {
    "aws:dynamodb:tableName": "Books"
    "aws:dynamodb:subscriberId": "111122223333"
}
```
+ **Tabela** – O primeiro par de chave-valor identifica a tabela que o DynamoDB está criptografando. A chave é `aws:dynamodb:tableName`. O valor é o nome da tabela.

  ```
  "aws:dynamodb:tableName": "<table-name>"
  ```

  Por exemplo:

  ```
  "aws:dynamodb:tableName": "Books"
  ```
+ **Conta** – O segundo par de chave-valor identifica a Conta da AWS. A chave é `aws:dynamodb:subscriberId`. O valor é o ID de conta.

  ```
  "aws:dynamodb:subscriberId": "<account-id>"
  ```

  Por exemplo:

  ```
  "aws:dynamodb:subscriberId": "111122223333"
  ```

## Monitoramento da interação do DynamoDB com o AWS KMS
<a name="dynamodb-cmk-trail"></a>

Se você usa uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) ou uma [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger tabelas do DynamoDB, é possível usar logs do AWS CloudTrail para monitorar as solicitações que o DynamoDB envia ao AWS KMS em seu nome.

As solicitações `GenerateDataKey`, `Decrypt` e `CreateGrant` são discutidas nesta seção. Além disso, o DynamoDB usa uma operação [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) para determinar se a chave do KMS escolhida existe na conta e na região. Usa também uma operação [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) para remover uma concessão quando você exclui uma tabela. 

**GenerateDataKey**  
Quando você habilita a criptografia em repouso em uma tabela, o DynamoDB cria uma chave de tabela exclusiva. Ele envia uma solicitação *[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)* ao AWS KMS que especifica a chave do KMS para a tabela.   
O evento que registra a operação `GenerateDataKey` é semelhante ao evento de exemplo a seguir. O usuário é a conta de serviço do DynamoDB. Os parâmetros incluem o Amazon Resource Name (ARN) da chave do KMS, um especificador de chave que requer uma chave de 256 bits e o [contexto de criptografia](#dynamodb-encryption-context) que identifica a tabela e a conta da Conta da AWS.  

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSService", 
        "invokedBy": "dynamodb.amazonaws.com" 
    },
    "eventTime": "2018-02-14T00:15:17Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:dynamodb:tableName": "Services",
            "aws:dynamodb:subscriberId": "111122223333"
        }, 
        "keySpec": "AES_256", 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    "responseElements": null,
    "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190",
    "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333",
            "type": "AWS::KMS::Key" 
        } 
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333",
    "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad"
}
```

**Decrypt**  
Quando você acessa uma tabela criptografada do DynamoDB, o DynamoDB precisa descriptografar a chave da tabela para que possa descriptografar as chaves abaixo dela na hierarquia. Descriptografa os dados na tabela. Para descriptografar a chave da tabela. O DynamoDB envia uma solicitação [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) solicitação ao AWS KMS que especifica a chave do KMS para a tabela.  
O evento que registra a operação `Decrypt` é semelhante ao evento de exemplo a seguir. O usuário é a entidade principal na sua Conta da AWS que está acessando a tabela. Os parâmetros incluem a chave de tabela criptografada (como um blob de texto cifrado) e o [contexto de criptografia](#dynamodb-encryption-context) que identifica a tabela e a Conta da AWS. O AWS KMS deriva o ID da chave do KMS do texto cifrado.   

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T16:42:15Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDT3HGFQZX4RY6RU",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin" 
            }
        },
        "invokedBy": "dynamodb.amazonaws.com"
    },
    "eventTime": "2018-02-14T16:42:39Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": 
    {
        "encryptionContext":
        {
            "aws:dynamodb:tableName": "Books",
            "aws:dynamodb:subscriberId": "111122223333" 
        }
    }, 
    "responseElements": null, 
    "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5",
    "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", 
    "readOnly": true, 
    "resources": [ 
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        }
    ],
    "eventType": "AwsApiCall", 
    "recipientAccountId": "111122223333"
}
```

**CreateGrant**  
Ao usar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) ou uma [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger sua tabela do DynamoDB, o DynamoDB usa [concessões](#dynamodb-grants) para permitir que o serviço realize a proteção de dados e tarefas contínuas de manutenção e durabilidade. Essas concessões não são necessárias em [Chave pertencente à AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk).  
As concessões que o DynamoDB cria são específicas de uma tabela. A entidade principal na solicitação [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) é o usuário que criou a tabela.   
O evento que registra a operação `CreateGrant` é semelhante ao evento de exemplo a seguir. Os parâmetros incluem o Amazon Resource Name (ARN) da chave do KMS para a tabela, a entidade principal favorecida e a entidade principal que está sendo retirada (o serviço DynamoDB) e as operações que a concessão abrange. Incluem também uma restrição que requer que todas as operações de criptografia usem o [contexto de criptografia](#dynamodb-encryption-context).  

```
{ 
    "eventVersion": "1.05", 
    "userIdentity": 
    { 
        "type": "AssumedRole", 
        "principalId": "AROAIGDTESTANDEXAMPLE:user01", 
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", 
        "accountId": "111122223333", 
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE", 
        "sessionContext": { 
            "attributes": { 
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T00:12:02Z" 
            }, 
            "sessionIssuer": { 
                "type": "Role", 
                "principalId": "AROAIGDTESTANDEXAMPLE", 
                "arn": "arn:aws:iam::111122223333:role/Admin", 
                "accountId": "111122223333", 
                "userName": "Admin" 
            }
        }, 
        "invokedBy": "dynamodb.amazonaws.com" 
    }, 
    "eventTime": "2018-02-14T00:15:15Z", 
    "eventSource": "kms.amazonaws.com", 
    "eventName": "CreateGrant", 
    "awsRegion": "us-west-2", 
    "sourceIPAddress": "dynamodb.amazonaws.com", 
    "userAgent": "dynamodb.amazonaws.com", 
    "requestParameters": { 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", 
        "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "constraints": { 
            "encryptionContextSubset": {
                "aws:dynamodb:tableName": "Books",
                "aws:dynamodb:subscriberId": "111122223333" 
            } 
        }, 
        "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "operations": [ 
            "DescribeKey", 
            "GenerateDataKey", 
            "Decrypt", 
            "Encrypt", 
            "ReEncryptFrom", 
            "ReEncryptTo", 
            "RetireGrant" 
        ] 
    }, 
    "responseElements": { 
        "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" 
    }, 
    "requestID": "2192b82a-111c-11e8-a528-f398979205d8", 
    "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", 
    "readOnly": false, 
    "resources": [ 
        { 
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        } 
    ], 
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

# Gerenciar tabelas criptografadas no DynamoDB
<a name="encryption.tutorial"></a>

É possível usar o Console de gerenciamento da AWS ou a AWS Command Line Interface (AWS CLI) para especificar a chave de criptografia em novas tabelas e atualizar as chaves de criptografia em tabelas existentes no Amazon DynamoDB.

**Topics**
+ [

## Especificar a chave de criptografia para uma nova tabela
](#encryption.tutorial-creating)
+ [

## Atualizar uma chave de criptografia
](#encryption.tutorial-update)

## Especificar a chave de criptografia para uma nova tabela
<a name="encryption.tutorial-creating"></a>

Siga estas etapas para especificar a chave de criptografia em uma nova tabela usando o console do Amazon DynamoDB ou a AWS CLI.

### Criar uma tabela criptografada (console)
<a name="encryption.tutorial-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1.  No painel de navegação, no lado esquerdo do console, selecione **Tables** (Tabelas).

1. Selecione **Create Table** (Criar tabela). Para o **Table name** (Nome da tabela), insira **Music**. Para a chave primária, insira **Artist**. Para a chave de classificação, insira **SongTitle**, os dois como strings.

1. Em **Settings** (Configurações), verifique se **Customize Settings** (Personalizar configurações) está selecionado.
**nota**  
Se a opção **Use default settings** (Usar configurações padrão) estiver selecionada, as tabelas serão criptografadas em repouso com Chave pertencente à AWS sem custo adicional.

1. Em **Encryption at rest** (Criptografia em repouso), escolha um tipo de criptografia: Chave pertencente à AWS, Chave gerenciada pela AWS, ou chave gerenciada pelo cliente.
   +  **Owned by Amazon DynamoDB** (Propriedade do Amazon DynamoDB) chave de propriedade da AWS, pertencente e gerenciada especificamente pelo DynamoDB. Não há custo adicional para usar essa chave.
   + **AWS Chave gerenciada pela**. Alias da chave: `aws/dynamodb`. A chave é armazenada na sua conta e é gerenciada pelo AWS Key Management Service (AWS KMS). Cobranças do AWS KMS são aplicáveis).
   +  **Stored in your account, and owned and managed by you. (Armazenada em sua conta, de sua propriedade e gerenciada por você.** Chave gerenciada pelo cliente A chave é armazenada na sua conta e é gerenciada pelo AWS Key Management Service (AWS KMS). Cobranças do AWS KMS são aplicáveis).
**nota**  
Se você optar por ser o proprietário e gerenciar sua própria chave, certifique-se de que a Política de chaves do KMS está definida corretamente. Para obter mais informações, consulte [Política de chaves para uma chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

1. Selecione **Create** (Criar) para criar a tabela criptografada. Para confirmar o tipo de criptografia, selecione os detalhes da tabela na guia **Overview** (Visão geral) e revise a seção **Additional details** (Detalhes adicionais).

### Criar uma tabela criptografada (AWS CLI)
<a name="encryption.tutorial-cli"></a>

Use a AWS CLI para criar uma tabela com a Chave pertencente à AWS padrão, com a Chave gerenciada pela AWS ou com a chave gerenciada pelo cliente para o Amazon DynamoDB.

**Para criar uma tabela criptografada com a padrão Chave pertencente à AWS**
+ Crie a tabela `Music` criptografada da seguinte forma:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
  ```
**nota**  
Essa tabela agora está criptografada com a Chave pertencente à AWS padrão na conta de serviço do DynamoDB.

**Para criar uma tabela criptografada com a Chave gerenciada pela AWS para o DynamoDB**
+ Crie a tabela `Music` criptografada da seguinte forma:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS
  ```

   O status `SSEDescription` da descrição da tabela é definido como `ENABLED`, e o `SSEType` é `KMS`: 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Para criar uma tabela criptografada com uma chave gerenciada pelo cliente para o DynamoDB**
+ Crie a tabela `Music` criptografada da seguinte forma:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**nota**  
Para o `KMSMasterKeyId`, você pode usar um ID de chave, um ARN de chave ou um alias de chave. Se você usar um alias de chave (por exemplo, `alias/my-key`), o DynamoDB resolverá o alias e associará a chave do AWS KMS subjacente à tabela. Na descrição da tabela, o `KMSMasterKeyArn` sempre mostrará o ARN da chave resolvida, não o alias. Para saber mais sobre identificadores de chave, consulte [Identificadores de chave (KeyId)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) no *Guia do desenvolvedor do AWS Key Management Service*.

   O status `SSEDescription` da descrição da tabela é definido como `ENABLED`, e o `SSEType` é `KMS`:

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

## Atualizar uma chave de criptografia
<a name="encryption.tutorial-update"></a>

Também é possível usar o console do DynamoDB ou a AWS CLI para atualizar as chaves de criptografia de uma tabela existente entre uma Chave pertencente à AWS, uma Chave gerenciada pela AWS e uma chave gerenciada pelo cliente a qualquer momento.

### Atualizar uma chave de criptografia (console)
<a name="encryption.tutorial-update-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1.  No painel de navegação, no lado esquerdo do console, selecione **Tables** (Tabelas).

1. Escolha a tabela que você deseja atualizar.

1. Selecione **Actions** (Ações) e depois selecione a opção **Update settings** (Atualizar configurações).

1. Vá para a guia **Additional settings** (Configurações adicionais).

1. Em **Encryption** (Criptografia), escolha **Manage encryption** (Gerenciar criptografia).

1. Escolha um tipo de criptografia:
   +  **Propriedade do Amazon DynamoDB.** A chave AWS KMS pertence e é gerenciada pelo DynamoDB. Não há custo adicional para usar essa chave.
   + Alias de chave da **chave gerenciada da AWS**: `aws/dynamodb`. A chave é armazenada na sua conta e é gerenciada pelo AWS Key Management Service (AWS KMS). Cobranças do AWS KMS são aplicáveis.
   +  **Stored in your account, and owned and managed by you(Armazenada em sua conta, de sua propriedade e gerenciada por você.** A chave é armazenada na sua conta e é gerenciada pelo AWS Key Management Service (AWS KMS). Cobranças do AWS KMS são aplicáveis.
**nota**  
Se você optar por ser o proprietário e gerenciar sua própria chave, certifique-se de que a Política de chaves do KMS está definida corretamente. Para obter mais informações, consulte [Política de chaves para uma chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

   Depois escolha **Save** (Salvar) para atualizar a tabela criptografada. Para confirmar o tipo de criptografia, verifique os detalhes da tabela na guia **Overview** (Visão geral).

### Atualizar uma chave de criptografia (AWS CLI)
<a name="encryption.tutorial-update-cli"></a>

Os exemplos a seguir mostram como atualizar uma tabela de criptografia usando a AWS CLI.

**Para atualizar uma tabela criptografada com a padrão Chave pertencente à AWS**
+ Atualize a tabela `Music`, como o exemplo a seguir.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=false
  ```
**nota**  
Essa tabela agora está criptografada com a Chave pertencente à AWS padrão na conta de serviço do DynamoDB.

**Para atualizar uma tabela criptografada com a Chave gerenciada pela AWS para o DynamoDB**
+ Atualize a tabela `Music`, como o exemplo a seguir.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true
  ```

   O status `SSEDescription` da descrição da tabela é definido como `ENABLED`, e o `SSEType` é `KMS`:

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Para atualizar uma tabela criptografada com uma chave gerenciada pelo cliente para o DynamoDB**
+ Atualize a tabela `Music`, como o exemplo a seguir.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**nota**  
Para o `KMSMasterKeyId`, você pode usar um ID de chave, um ARN de chave ou um alias de chave. Se você usar um alias de chave (por exemplo, `alias/my-key`), o DynamoDB resolverá o alias e associará a chave do AWS KMS subjacente à tabela. Na descrição da tabela, o `KMSMasterKeyArn` sempre mostrará o ARN da chave resolvida, não o alias.

   O status `SSEDescription` da descrição da tabela é definido como `ENABLED`, e o `SSEType` é `KMS`: 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```