

# Segurança e compatibilidade no Amazon DynamoDB
<a name="security"></a>

A segurança da nuvem na AWS é a nossa maior prioridade. Como cliente da AWS, você contará com um data center e uma arquitetura de rede criados para atender aos requisitos das organizações com as maiores exigências de segurança.

A segurança é uma responsabilidade compartilhada entre a AWS e você. O [modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/) descreve isto como segurança *da* nuvem e segurança *na* nuvem:
+ **Segurança da nuvem:** a AWS é responsável pela proteção da infraestrutura que executa produtos da AWS na Nuvem da AWS. A AWS também fornece serviços que podem ser usados com segurança. A eficácia de nossa segurança é regularmente testada e verificada por auditores terceirizados como parte dos [programas de conformidade da AWS](https://aws.amazon.com/compliance/programs/). Para saber mais sobre os programas de compatibilidade aplicáveis ao DynamoDB, consulte [Serviços da AWS no escopo do programa de compatibilidade](https://aws.amazon.com/compliance/services-in-scope/).
+ **Segurança da nuvem**: sua responsabilidade é determinada pelo serviço da AWS que você usa. Também existe a responsabilidade por outros fatores, incluindo a confidencialidade de dados, os requisitos da organização e as leis e regulamentos aplicáveis.

Esta documentação ajudará você a entender como aplicar o modelo de responsabilidade compartilhada ao usar o DynamoDB. Os tópicos a seguir mostram como configurar o DynamoDB para atender aos seus objetivos de segurança e compatibilidade. Você também aprenderá como usar outros serviços da AWS que podem ajudar a monitorar e proteger seus recursos do DynamoDB.

**Topics**
+ [Políticas gerenciadas pela AWS para o Amazon DynamoDB](ddb-security-iam.awsmanpol.md)
+ [Usar políticas baseadas em recursos para o DynamoDB](access-control-resource-based.md)
+ [Usar o controle de acesso por atributo com o DynamoDB](attribute-based-access-control.md)
+ [Proteção de dados no DynamoDB](data-protection.md)
+ [AWS Identity and Access Management (IAM) e DynamoDB](identity-and-access-mgmt.md)
+ [Validação de conformidade do DynamoDB por setor](Compliance.md)
+ [Resiliência e recuperação de desastres no Amazon DynamoDB](disaster-recovery-resiliency.md)
+ [Segurança da infraestrutura no Amazon DynamoDB](network-isolation.md)
+ [AWS PrivateLink para DynamoDB](privatelink-interface-endpoints.md)
+ [Análise de configuração e vulnerabilidade no Amazon DynamoDB](configuration-vulnerability.md)
+ [Práticas recomendadas de segurança para o Amazon DynamoDB](best-practices-security.md)

# Políticas gerenciadas pela AWS para o Amazon DynamoDB
<a name="ddb-security-iam.awsmanpol"></a>

O DynamoDB usa políticas gerenciadas pela AWS para definir um conjunto de permissões que o serviço precisa para realizar ações específicas. O DynamoDB mantém e atualiza as políticas gerenciadas pela AWS. Não é possível alterar as permissões em políticas gerenciadas pela AWS. Para obter mais informações sobre as políticas gerenciadas pela AWS, consulte [Políticas gerenciadas pela AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) no Guia do usuário do IAM.

Ocasionalmente, o DynamoDB pode acrescentar permissões adicionais a uma política gerenciada pela AWS para oferecer suporte a novos recursos. Esse tipo de atualização afeta todas as identidades (usuários, grupos e funções) em que a política está anexada. É mais provável que uma política gerenciada pela AWS seja atualizada quando um novo recurso é iniciado ou quando novas operações são disponibilizadas. O DynamoDB não remove permissões de uma política gerenciada pela AWS, portanto as atualizações de políticas não suspendem suas permissões existentes. Para ter uma lista das políticas gerenciadas da AWS, consulte [AWS managed policies](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/policy-list.html).

## Política gerenciada pela AWS: DynamoDBReplicationServiceRolePolicy
<a name="ddb-security-iam.awsmanpol.policy"></a>

Não é possível anexar a política `DynamoDBReplicationServiceRolePolicy` às suas entidades do IAM. Essa política é anexada a um perfil vinculado ao serviço que permite que o DynamoDB realize ações em seu nome. Para obter mais informações, consulte [Usar o IAM com tabelas globais](globaltables-security.md).

Essa política concede permissões que possibilitam que o perfil vinculado ao serviço execute a replicação de dados entre réplicas de tabelas globais. Ela também concede permissões administrativas para gerenciar réplicas de tabelas globais em seu nome.

**Detalhes relacionados às permissões**

Essa política concede permissões para fazer o seguinte:
+ `dynamodb`: executar replicação de dados e gerenciar réplicas de tabelas.
+ `application-autoscaling`: recuperar e gerenciar as configurações de ajuste de escala automático da tabela.
+ `account`: recuperar o status da região para avaliar a acessibilidade a réplicas.
+ `iam`: para criar a função vinculada ao serviço para ajuste de escala automático da aplicação, caso essa função ainda não exista.

A definição dessa política gerenciada pode ser encontrada [aqui](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/DynamoDBReplicationServiceRolePolicy.html).

## Política gerenciada pela AWS: AmazonDynamoDBFullAccess\$1v2
<a name="ddb-security-iam.awsmanpol.fullaccesspolicy-v2"></a>

A política de escopo reduzido `AmazonDynamoDBFullAccess_v2` concede privilégios de acesso específicos aos usuários. É possível anexar a política `AmazonDynamoDBFullAccess_v2` às suas identidades do IAM. Essa política concede acesso administrativo a recursos do Amazon DynamoDB e concede a uma identidade do IAM (como usuário, grupo ou perfil) acesso aos Serviços da AWS aos quais o DynamoDB está integrado para usar todos os recursos do DynamoDB. O uso dessa política permite o acesso a todos os recursos do DynamoDB que estão disponíveis no Console de gerenciamento da AWS.

**Detalhes de permissões**

Esta política inclui as seguintes permissões:
+ `Amazon DynamoDB`
+ `DynamoDB Accelerator`
+ `AWS KMS`
+ `AWS Resource Groups Tagging`
+ `Lambda`
+ `Application Auto Scaling`
+ `CloudWatch`
+ `Amazon Kinesis`
+ `Amazon EC2`
+ `IAM`

Para analisar a política no formato `JSON`, consulte [AmazonDynamoDBFullAccess\$1v2](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBFullAccess_v2.html).

## Política gerenciada da AWS: AmazonDynamoDBReadOnlyAccess
<a name="ddb-security-iam.awsmanpol.readonlypolicy"></a>

É possível anexar a política `AmazonDynamoDBReadOnlyAccess` às suas identidades do IAM.

Essa política concede acesso somente leitura ao Amazon DynamoDB.

**Detalhes de permissões**

Esta política inclui as seguintes permissões:
+ `Amazon DynamoDB`: concede acesso somente leitura ao Amazon DynamoDB.
+ `Amazon DynamoDB Accelerator (DAX)`: fornece acesso somente leitura ao Amazon DynamoDB Accelerator (DAX).
+ `Application Auto Scaling`: isso permite que as entidades principais visualizem configurações do Aplicativo de ajuste de escala automático. Isso é necessário para que os usuários possam visualizar as políticas de escalabilidade automática anexadas a uma tabela.
+ `CloudWatch`: permite que as entidades principais visualizem dados métricos e alarmes configurados no CloudWatch. Isso é necessário para que os usuários possam visualizar o tamanho da tabela faturável e os alarmes do CloudWatch que foram configurados para uma tabela.
+ `AWS Data Pipeline`: possibilita que as entidades principais visualizem o AWS Data Pipeline e objetos associados.
+ `Amazon EC2`: possibilita que as entidades principais visualizem VPCs, sub-redes e grupos de segurança do Amazon EC2.
+ `IAM`: possibilita que as entidades principais visualizem os perfis do IAM.
+ `AWS KMS`: permite que as entidades principais visualizem as chaves configuradas no AWS KMS. Isso é necessário para que os usuários possam visualizar as AWS KMS keys que eles criam e gerenciam na conta.
+ `Amazon SNS`: possibilita que as entidades principais listem tópicos do Amazon SNS e assinaturas por tópico.
+ `AWS Resource Groups`: possibilita que as entidades principais visualizem grupos e suas consultas.
+ `AWS Resource Groups Tagging`: possibilita que as entidades principais listem todos os recursos marcados ou que foram marcados anteriormente em uma região.
+ `Kinesis`: possibilita que as entidades principais visualizem as descrições dos fluxos de dados do Kinesis.
+ `Amazon CloudWatch Contributor Insights`: possibilita que as entidades principais visualizem dados de séries temporais coletados pelas regras do Contributor Insights.

Para examinar a política no formato `JSON`, consulte [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBReadOnlyAccess.html).

## Atualizações do DynamoDB para políticas gerenciadas pela AWS
<a name="ddb-security-iam.awsmanpol.updates"></a>

Esta tabela mostra as atualizações das políticas de gerenciamento de acesso da AWS para o DynamoDB.


****  

| Alteração | Descrição | Alterado em | 
| --- | --- | --- | 
| AmazonDynamoDBFullAccess: descontinuada | Esta política foi substituída por uma política com escopo reduzido chamada `AmazonDynamoDBFullAccess_v2`. Após **abril de 2025**, a política `AmazonDynamoDBFullAccess` não poderá ser anexada a nenhum novo usuário, grupo ou perfil. Para obter mais informações, consulte [Política gerenciada pela AWS: AmazonDynamoDBFullAccess\$1v2](#ddb-security-iam.awsmanpol.fullaccesspolicy-v2).  | 28 de abril de 2025 | 
| AmazonDynamoDBReadOnlyAccessAtualização de  para uma política existente | O AmazonDynamoDBReadOnlyAccess adicionou as permissões dynamodb:GetAbacStatus e dynamodb:UpdateAbacStatus. Essas permissões autorizam que você visualize o status do ABAC e habilite o ABAC para a Conta da AWS na região atual. | 18 de novembro de 2024 | 
| AmazonDynamoDBReadOnlyAccessAtualização de  para uma política existente | AmazonDynamoDBReadOnlyAccess adicionou a permissão dynamodb:GetResourcePolicy. Essa permissão concede acesso para ler políticas baseadas em recursos vinculadas aos recursos do DynamoDB. | 20 de março de 2024 | 
| Atualização de DynamoDBReplicationServiceRolePolicy para uma política existente | DynamoDBReplicationServiceRolePolicy adicionou a permissão dynamodb:GetResourcePolicy. Essa permissão possibilita que o perfil vinculado ao serviço leia as políticas baseadas em recursos vinculadas aos recursos do DynamoDB. | 15 de dezembro de 2023 | 
| Atualização de DynamoDBReplicationServiceRolePolicy para uma política existente | DynamoDBReplicationServiceRolePolicy adicionou a permissão account:ListRegions. Essa permissão possibilita que o perfil vinculado ao serviço avalie a acessibilidade a réplicas. | 10 de maio de 2023 | 
| Adição de DynamoDBReplicationServiceRolePolicy à lista de políticas gerenciadas | Adição de informações sobre a política gerenciada DynamoDBReplicationServiceRolePolicy, que é usada pelo perfil vinculado ao serviço de tabelas globais do DynamoDB. | 10 de maio de 2023 | 
| As tabelas globais do DynamoDB começaram a monitorar alterações | As tabelas globais do DynamoDB começaram a monitorar alterações para suas políticas gerenciadas pela AWS. | 10 de maio de 2023 | 

# Usar políticas baseadas em recursos para o DynamoDB
<a name="access-control-resource-based"></a>

O DynamoDB é compatível com políticas baseadas em recursos para tabelas, índices e fluxos. Com as políticas baseadas em recursos, é possível definir as permissões de acesso especificando quem tem acesso a cada recurso e as ações que podem ser realizadas em cada recurso.

É possível associar uma política baseada em recursos aos recursos do DynamoDB, como uma tabela ou um fluxo. Nessa política, você deve especificar permissões para as [entidades principais](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) do Identity and Access Management (IAM) que podem realizar ações específicas nesses recursos do DynamoDB. Por exemplo, a política associada a uma tabela conterá permissões para acesso à tabela e seus índices. Como resultado, as políticas baseadas em recursos podem ajudar a simplificar o controle de acesso às tabelas, aos índices e aos fluxos do DynamoDB, definindo permissões em nível de recurso. O tamanho máximo de uma política que pode ser associada a um recurso do DynamoDB é de 20 KB.

Um benefício significativo do uso de políticas baseadas em recursos é simplificar o controle de acesso entre contas para conceder acesso entre contas a entidades principais do IAM em diferentes Contas da AWS. Para obter mais informações, consulte [Política baseada em recursos para acesso entre contas](rbac-examples.md#rbac-examples-cross-account).

As políticas baseadas em recursos também comportam integrações com recursos do analisador de acesso externo [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) e do [Bloqueio de Acesso Público (BPA)](rbac-bpa-rbp.md). O IAM Access Analyzer relata o acesso entre contas a entidades externas especificadas em políticas baseadas em recursos. Ele também fornece visibilidade para ajudar a refinar as permissões e se adequar ao princípio de privilégio mínimo. O BPA ajuda a impedir o acesso público às tabelas, aos índices e aos fluxos do DynamoDB e é habilitado automaticamente nos fluxos de trabalho de criação e modificação de políticas baseadas em recursos.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/q9sBxrVgq4U?si=0cR4TJIlKvH9Wlu5/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/q9sBxrVgq4U?si=0cR4TJIlKvH9Wlu5)


**Topics**
+ [Criar uma tabela com uma política baseada em recursos](rbac-create-table.md)
+ [Associar uma política a uma tabela existente do DynamoDB](rbac-attach-resource-based-policy.md)
+ [Associar uma política baseada em recurso a um fluxo do DynamoDB](rbac-attach-resource-policy-streams.md)
+ [Remover uma política baseada em recurso de uma tabela do DynamoDB](rbac-delete-resource-based-policy.md)
+ [Acesso entre contas com políticas baseadas em recurso no DynamoDB](rbac-cross-account-access.md)
+ [Bloquear o acesso público com políticas baseadas em recurso no DynamoDB](rbac-bpa-rbp.md)
+ [Operações de API do DynamoDB aceitas por políticas baseadas em recurso](rbac-iam-actions.md)
+ [Autorização com políticas baseadas em identidade do IAM e políticas baseadas em recursos do DynamoDB](rbac-auth-iam-id-based-policies-DDB.md)
+ [Exemplos de políticas baseadas em recurso do DynamoDB](rbac-examples.md)
+ [Considerações sobre políticas baseadas em recurso do DynamoDB](rbac-considerations.md)
+ [Práticas recomendadas para políticas baseadas em recurso do DynamoDB](rbac-best-practices.md)

# Criar uma tabela com uma política baseada em recursos
<a name="rbac-create-table"></a>

É possível adicionar uma política baseada em recursos ao criar uma tabela usando o console do DynamoDB, a API [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html), a AWS CLI, o [AWS SDK](rbac-attach-resource-based-policy.md#rbac-attach-policy-java-sdk) ou um modelo do CloudFormation.

## AWS CLI
<a name="rbac-create-table-CLI"></a>

O exemplo a seguir cria uma tabela chamada *MusicCollection* usando o comando `create-table` da AWS CLI. Esse comando também inclui o parâmetro `resource-policy` que adiciona uma política baseada em recursos à tabela. Essa política possibilita que o usuário *John* realize as ações de API [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html), [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) e [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) na tabela.

Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

```
aws dynamodb create-table \
    --table-name MusicCollection \
    --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
    --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --resource-policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::123456789012:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:RestoreTableToPointInTime\",
                        \"dynamodb:GetItem\",
                        \"dynamodb:DescribeTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## Console de gerenciamento da AWS
<a name="rbac-create-table-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, selecione **Criar tabela**.

1. Em **Detalhes da tabela**, insira o nome da tabela, a chave de partição e os detalhes da chave de classificação.

1. Em **Configurações da tabela**, selecione **Personalizar configurações**.

1. (Opcional) Especifique as opções para **Classe de tabela**, **Calculadora de capacidade**, **Configurações de capacidade de leitura/gravação**, **Índices secundários**, **Criptografia em repouso** e **Proteção contra exclusão**.

1. Em **Política baseada em recursos**, adicione uma política para definir as permissões de acesso para a tabela e seus índices. Nessa política, você especifica quem tem acesso a esses recursos e as ações que podem realizar em cada recurso. Para adicionar uma política, siga um destes procedimentos:
   + Digite ou cole um documento de política JSON. Para ter detalhes sobre a linguagem de política do IAM, consulte [Criar políticas usando o editor de JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) no *Guia do usuário do IAM*.
**dica**  
Para ver exemplos de políticas baseadas em recursos no Guia do desenvolvedor do Amazon DynamoDB, selecione **Exemplos de políticas**.
   + Selecione **Adicionar nova declaração** para adicionar uma nova declaração e insira as informações nos campos fornecidos. Repita esta etapa para todas as instruções que deseja adicionar.
**Importante**  
Solucione avisos de segurança, erros ou sugestões antes de salvar a política.

   O exemplo de política do IAM a seguir possibilita que o usuário *John* realize as ações da API [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html), [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) e [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) na tabela *MusicCollection*.

   Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:user/username"
         },
         "Action": [
           "dynamodb:RestoreTableToPointInTime",
           "dynamodb:GetItem",
           "dynamodb:PutItem"
         ],
         "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
       }
     ]
   }
   ```

------

1. (Opcional) Escolha **Preview external access** (Pré-visualizar o acesso externo) na canto inferior direito para pré-visualizar a forma como sua nova política afetará o acesso público e entre contas ao seu recurso. Antes de salvar sua política, você pode verificar se ela introduz novas descobertas do IAM Access Analyzer ou resolve as descobertas existentes. Se você não vir um analisador ativo, escolha **Go to Access Analyzer** (Acessar o Access Analyzer) para [criar um analisador de contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) no IAM Access Analyzer. Para ter mais informações, consulte [Acesso de visualização](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html).

1. Escolha **Criar tabela**.

## Modelo do AWS CloudFormation
<a name="rbac-create-table-cfn"></a>

------
#### [ Using the AWS::DynamoDB::Table resource ]

O modelo do CloudFormation a seguir cria uma tabela com um fluxo usando o recurso [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html). Esse modelo também inclui políticas baseadas em recursos que são associadas à tabela e ao fluxo.

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "MusicCollectionTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "AttributeDefinitions": [
                    {
                        "AttributeName": "Artist",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "Artist",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PROVISIONED",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 5
                },
                "StreamSpecification": {
                  "StreamViewType": "OLD_IMAGE",
                  "ResourcePolicy": {
                    "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                        {
                            "Principal": {
                                "AWS": "arn:aws:iam::111122223333:user/John"
                            },
                            "Effect": "Allow",
                            "Action": [
                                "dynamodb:GetRecords",
                                "dynamodb:GetShardIterator",
                                "dynamodb:DescribeStream"
                            ],
                            "Resource": "*"
                        }
                      ]
                    }
                  }
                },
                "TableName": "MusicCollection",
                "ResourcePolicy": {
                    "PolicyDocument": {
                        "Version": "2012-10-17",		 	 	 
                        "Statement": [
                            {
                                "Principal": {
                                    "AWS": [
                                        "arn:aws:iam::111122223333:user/John"
                                    ]
                                },
                                "Effect": "Allow",
                                "Action": "dynamodb:GetItem",
                                "Resource": "*"
                            }
                        ]
                    }
                }
            }
           
        }
    }
}
```

------
#### [ Using the AWS::DynamoDB::GlobalTable resource ]

O modelo do CloudFormation a seguir cria uma tabela com o recurso [AWS::DynamoDB::GlobalTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html) e associa uma política baseada em recursos à tabela e ao seu fluxo.

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "GlobalMusicCollection": {
            "Type": "AWS::DynamoDB::GlobalTable",
            "Properties": {
                "TableName": "MusicCollection",
                "AttributeDefinitions": [{
                    "AttributeName": "Artist",
                    "AttributeType": "S"
                }],
                "KeySchema": [{
                    "AttributeName": "Artist",
                    "KeyType": "HASH"
                }],
                "BillingMode": "PAY_PER_REQUEST",
                "StreamSpecification": {
                    "StreamViewType": "NEW_AND_OLD_IMAGES"
                },
                "Replicas": [
                    {
                        "Region": "us-east-1",
                        "ResourcePolicy": {
                            "PolicyDocument": {
                                "Version": "2012-10-17",		 	 	 
                                "Statement": [{
                                    "Principal": {
                                        "AWS": [
                                            "arn:aws:iam::111122223333:user/John"
                                        ]
                                    },
                                    "Effect": "Allow",
                                    "Action": "dynamodb:GetItem",
                                    "Resource": "*"
                                }]
                            }
                        },
                        "ReplicaStreamSpecification": {
                            "ResourcePolicy": {
                                "PolicyDocument": {
                                    "Version": "2012-10-17",		 	 	 
                                    "Statement": [{
                                        "Principal": {
                                            "AWS": "arn:aws:iam::111122223333:user/John"
                                        },
                                        "Effect": "Allow",
                                        "Action": [
                                            "dynamodb:GetRecords",
                                            "dynamodb:GetShardIterator",
                                            "dynamodb:DescribeStream"
                                        ],
                                        "Resource": "*"
                                    }]
                                }
                            }
                        }
                    }
                ]
            }
        }
    }
}
```

------

# Associar uma política a uma tabela existente do DynamoDB
<a name="rbac-attach-resource-based-policy"></a>

É possível associar uma política baseada em recursos a uma tabela existente ou modificar uma política existente usando o console do DynamoDB, a API [PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html), a AWS CLI, o SDK da AWS ou um [modelo do CloudFormation](rbac-create-table.md#rbac-create-table-cfn).

## Exemplo de AWS CLI para associar uma nova política
<a name="rbac-attach-policy-CLI"></a>

O exemplo de política do IAM a seguir usa o comando `put-resource-policy` da AWS CLI para associar uma política baseada em recursos a uma tabela existente. Este exemplo possibilita que o usuário *John* realize as ações da API [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html), [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html), [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) e [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) em uma tabela existente chamada *MusicCollection*.

Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetItem\",
                        \"dynamodb:PutItem\",
                        \"dynamodb:UpdateItem\",
                        \"dynamodb:UpdateTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## Exemplo de AWS CLI para atualizar condicionalmente uma política existente
<a name="rbac-update-policy-CLI"></a>

Para atualizar condicionalmente uma política existente baseada em recursos de uma tabela, é possível usar o parâmetro `expected-revision-id` opcional. O exemplo a seguir só atualizará a política se ela existir no DynamoDB e se o ID de revisão atual corresponder ao parâmetro `expected-revision-id` fornecido.

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --expected-revision-id 1709841168699 \ 
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetItem\",
                        \"dynamodb:UpdateItem\",
                        \"dynamodb:UpdateTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## Console de gerenciamento da AWS
<a name="rbac-attach-policy-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, selecione uma tabela existente.

1. Navegue até a guia **Permissões** e selecione **Criar política de tabela**.

1. No editor de políticas baseadas em recursos, adicione a política que você gostaria de associar e selecione **Criar política**.

   O exemplo de política do IAM a seguir possibilita que o usuário *John* realize as ações da API [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html), [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html), [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) e [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) em uma tabela existente chamada *MusicCollection*.

   Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::111122223333:user/username"
         },
         "Action": [
           "dynamodb:GetItem",
           "dynamodb:PutItem",
           "dynamodb:UpdateItem",
           "dynamodb:UpdateTable"
         ],
         "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
       }
     ]
   }
   ```

------

## AWS SDK for Java 2.x
<a name="rbac-attach-policy-java-sdk"></a>

O exemplo de política do IAM a seguir usa o método `putResourcePolicy` para associar uma política baseada em recursos a uma tabela existente. Essa política possibilita que um usuário realize a ação da API [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) em uma tabela existente.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.PutResourcePolicyRequest;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * [Get started with the AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html)
 */
public class PutResourcePolicy {

    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <tableArn> <allowedAWSPrincipal>

                Where:
                    tableArn - The Amazon DynamoDB table ARN to attach the policy to. For example, arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection.
                    allowedAWSPrincipal - Allowed AWS principal ARN that the example policy will give access to. For example, arn:aws:iam::123456789012:user/John.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String tableArn = args[0];
        String allowedAWSPrincipal = args[1];
        System.out.println("Attaching a resource-based policy to the Amazon DynamoDB table with ARN " +
                tableArn);
        Region region = Region.US_WEST_2;
        DynamoDbClient ddb = DynamoDbClient.builder()
                .region(region)
                .build();

        String result = putResourcePolicy(ddb, tableArn, allowedAWSPrincipal);
        System.out.println("Revision ID for the attached policy is " + result);
        ddb.close();
    }

    public static String putResourcePolicy(DynamoDbClient ddb, String tableArn, String allowedAWSPrincipal) {
        String policy = generatePolicy(tableArn, allowedAWSPrincipal);
        PutResourcePolicyRequest request = PutResourcePolicyRequest.builder()
                .policy(policy)
                .resourceArn(tableArn)
                .build();

        try {
            return ddb.putResourcePolicy(request).revisionId();
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        return "";
    }

    private static String generatePolicy(String tableArn, String allowedAWSPrincipal) {
        return "{\n" +
                "    \"Version\": \"2012-10-17\",\n" +,		 	 	 
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": {\"AWS\":\"" + allowedAWSPrincipal + "\"},\n" +
                "            \"Action\": [\n" +
                "                \"dynamodb:GetItem\"\n" +
                "            ],\n" +
                "            \"Resource\": \"" + tableArn + "\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";
    }
}
```

# Associar uma política baseada em recurso a um fluxo do DynamoDB
<a name="rbac-attach-resource-policy-streams"></a>

É possível associar uma política baseada em recursos ao fluxo de uma tabela existente ou modificar uma política existente usando o console do DynamoDB, a API [PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html), a AWS CLI, o SDK da AWS ou um [modelo do CloudFormation](rbac-create-table.md#rbac-create-table-cfn).

**nota**  
Não é possível associar uma política a um fluxo ao criá-lo usando as APIs [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) ou [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html). No entanto, é possível modificar ou excluir uma política após a exclusão de uma tabela. Também é possível modificar ou excluir a política de um fluxo desabilitado.



## AWS CLI
<a name="rbac-attach-policy-stream-CLI"></a>

O exemplo de política do IAM a seguir usa o comando `put-resource-policy` da AWS CLI para associar uma política baseada em recursos ao fluxo de uma tabela denominada *MusicCollection*. Este exemplo possibilita que o usuário *John* realize as ações de API [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html), [GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html) e [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) no fluxo.

Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

```
aws dynamodb put-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492 \
    --policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::111122223333:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:GetRecords\",
                        \"dynamodb:GetShardIterator\",
                        \"dynamodb:DescribeStream\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492\"
                }
            ]
        }"
```

## Console de gerenciamento da AWS
<a name="rbac-attach-policy-stream-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 do console do DynamoDB, selecione **Tabelas** e, depois, uma tabela existente.

   Verifique se a tabela selecionada tem fluxos ativados. Para ter informações sobre como ativar fluxos para uma tabela, consulte [Habilitar um fluxo](Streams.md#Streams.Enabling).

1. Escolha a aba **Permissões**.

1. Em **Política baseada em recursos para fluxo ativo**, selecione **Criar política de fluxo**.

1. No editor **Política baseada em recursos**, adicione uma política para definir as permissões de acesso para o fluxo. Nessa política, você deve especificar quem tem acesso ao fluxo e as ações que podem realizar no fluxo. Para adicionar uma política, siga um destes procedimentos:
   + Digite ou cole um documento de política JSON. Para ter detalhes sobre a linguagem de política do IAM, consulte [Criar políticas usando o editor de JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) no *Guia do usuário do IAM*.
**dica**  
Para ver exemplos de políticas baseadas em recursos no Guia do desenvolvedor do Amazon DynamoDB, selecione **Exemplos de políticas**.
   + Selecione **Adicionar nova declaração** para adicionar uma nova declaração e insira as informações nos campos fornecidos. Repita esta etapa para todas as instruções que deseja adicionar.
**Importante**  
Solucione avisos de segurança, erros ou sugestões antes de salvar a política.

1. (Opcional) Escolha **Preview external access** (Pré-visualizar o acesso externo) na canto inferior direito para pré-visualizar a forma como sua nova política afetará o acesso público e entre contas ao seu recurso. Antes de salvar sua política, você pode verificar se ela introduz novas descobertas do IAM Access Analyzer ou resolve as descobertas existentes. Se você não vir um analisador ativo, escolha **Go to Access Analyzer** (Acessar o Access Analyzer) para [criar um analisador de contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) no IAM Access Analyzer. Para ter mais informações, consulte [Acesso de visualização](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html).

1. Escolha **Criar política**.

O exemplo de política do IAM a seguir associa uma política baseada em recursos ao fluxo de uma tabela denominada *MusicCollection*. Este exemplo possibilita que o usuário *John* realize as ações de API [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html), [GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html) e [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) no fluxo.

Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/username"
      },
      "Action": [
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator",
        "dynamodb:DescribeStream"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
      ]
    }
  ]
}
```

------

# Remover uma política baseada em recurso de uma tabela do DynamoDB
<a name="rbac-delete-resource-based-policy"></a>

É possível excluir uma política baseada em recursos de uma tabela existente usando o console do DynamoDB, a API [DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html), a AWS CLI, o SDK da AWS ou um modelo do CloudFormation.

## AWS CLI
<a name="rbac-delete-policy-CLI"></a>

O exemplo a seguir usa o comando `delete-resource-policy` da AWS CLI para remover uma política baseada em recursos de uma tabela denominada *MusicCollection*.

Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

```
aws dynamodb delete-resource-policy \
    --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection
```

## Console de gerenciamento da AWS
<a name="rbac-delete-policy-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 do console do DynamoDB, selecione **Tabelas** e, depois, uma tabela existente.

1. Escolha **Permissões**.

1. No menu suspenso **Gerenciar política**, selecione **Excluir política**.

1. Na caixa de diálogo **Excluir política baseada em recursos para tabela**, digite **confirm** para confirmar a ação de exclusão.

1. Escolha **Excluir**.

# Acesso entre contas com políticas baseadas em recurso no DynamoDB
<a name="rbac-cross-account-access"></a>

Usando uma política baseada em recursos, é possível fornecer acesso entre contas a recursos disponíveis em diferentes Contas da AWS. Todo o acesso entre contas permitido pelas políticas baseadas em recursos será relatado por meio das descobertas de acesso externo do IAM Access Analyzer, se você tiver um analisador na mesma Região da AWS que o recurso. O IAM Access Analyzer executa verificações de política para validar sua política em relação à [gramática das políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html) e às [práticas recomendadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) do IAM. Essas verificações geram descobertas e fornecem recomendações práticas que ajudam a criar políticas que sejam funcionais e estejam em conformidade com as práticas recomendadas de segurança. É possível ver as descobertas ativas do IAM Access Analyzer na guia **Permissões** do [console do DynamoDB](https://console.aws.amazon.com/dynamodb/).

Para ter informações sobre a validação de políticas usando o IAM Access Analyzer, consulte [Validação de política do IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) no *Guia do usuário do IAM*. Para visualizar uma lista de avisos, erros e sugestões retornados pelo IAM Access Analyzer, consulte [Referência de verificação de políticas do IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html).

Para conceder permissão [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) a um usuário A na conta A para acessar uma tabela B na conta B, realize as seguintes etapas:

1. Associe uma política baseada em recursos à tabela B que conceda permissão ao usuário A para realizar a ação `GetItem`.

1. Associe uma política baseada em recursos ao usuário A que conceda permissão para realizar a ação `GetItem` na tabela B.

Usando a opção **Visualizar acesso externo** disponível no [console do DynamoDB](https://console.aws.amazon.com/dynamodb/), é possível visualizar como sua nova política afetará o acesso público e entre contas ao seu recurso. Antes de salvar sua política, você pode verificar se ela introduz novas descobertas do IAM Access Analyzer ou resolve as descobertas existentes. Se você não vir um analisador ativo, escolha **Go to Access Analyzer** (Acessar o Access Analyzer) para [criar um analisador de contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling) no IAM Access Analyzer. Para ter mais informações, consulte [Acesso de visualização](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html).

O parâmetro do nome da tabela nas APIs do plano de dados e do ambiente de gerenciamento do DynamoDB aceita o nome do recurso da Amazon (ARN) completo da tabela para comportar operações entre contas. Se você fornecer apenas o parâmetro do nome da tabela em vez de um ARN completo, a operação da API será realizada na tabela da conta à qual o solicitante pertence. Para ter um exemplo de política de use acesso entre contas, consulte [Política baseada em recursos para acesso entre contas](rbac-examples.md#rbac-examples-cross-account).

A conta do proprietário do recurso será cobrada mesmo quando uma entidade principal de outra conta estiver lendo ou gravando na tabela do DynamoDB na conta do proprietário. Se a tabela tiver um throughput provisionado, a soma de todas as solicitações das contas do proprietário e dos solicitantes em outras contas determinará se a solicitação terá controle de utilização (se o ajuste de escala automático estiver desabilitado) ou se a escala será reduzida ou aumentada verticalmente se o ajuste de escala automático não estiver habilitado.

As solicitações serão registradas nos logs do CloudTrail das contas do proprietário e do solicitante para que as duas contas possam rastrear qual conta acessou quais dados.

## Compartilhamento de acesso com funções do AWS Lamba entre contas
<a name="rbac-analyze-cross-account-lambda-access"></a>

**Funções do Lambda na conta A**

1. Acesse o [console do IAM](https://console.aws.amazon.com/iam/) para criar um perfil do IAM que será usado como [perfil de execução do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) para sua função do AWS Lambda na conta A. Adicione a política gerenciada `AWSLambdaDynamoDBExecutionRole` do IAM que tem as permissões necessárias de invocação do DynamoDB Streams e do Lambda. Essa política também concede acesso a todos os possíveis recursos do DynamoDB Streams aos quais você possa ter acesso na conta A.

1. No [console do Lambda](https://console.aws.amazon.com/lambda/), crie uma função do AWS Lamba para processar registros em um fluxo do DynamoDB e, durante a configuração do perfil de execução, escolha aquele que você criou na etapa anterior.

1. Forneça o perfil de execução da função do Lambda ao proprietário da conta B do DynamoDB Streams a fim de configurar a política baseada em recursos para acesso de leitura entre contas.

1. Conclua a configuração da função do Lambda.

**Fluxo do DynamoDB na conta B**

1. Obtenha o perfil de execução entre contas do Lambda da conta A que invocará a função do Lambda.

1. No console do Amazon DynamoDB na conta B, escolha a tabela para o acionador entre contas do Lambda. Na guia **Exportações e streams**, localize o ARN do seu fluxo do DynamoDB. Observe que o status do DynamoDB Stream deve ser Ativado. Além disso, anote o ARN completo do fluxo, conforme necessário para a política de recursos.

1. Na guia **Permissões**, clique no botão **Criar política de transmissão** para iniciar o editor visual de políticas. Clique no botão **Adicionar nova instrução** ou edite a política, caso já exista.

1. Crie uma política que especifique o perfil de execução do Lambda na conta A como entidade principal e conceda as ações necessárias do DynamoDB Streams. É necessário incluir as ações `dynamodb:DescribeStream`, `dynamodb:GetRecords`, `dynamodb:GetShardIterator` e `dynamodb:ListShards`. Para ter mais informações sobre exemplos de política de recursos para o DynamoDB Streams, consulte [Exemplos de políticas baseadas em recurso do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html).

**nota**  
O acesso entre contas das [APIs do ambiente de gerenciamento](HowItWorks.API.md#HowItWorks.API.ControlPlane) tem um limite menor de transações por segundo (TPS) de quinhentas solicitações.

# Bloquear o acesso público com políticas baseadas em recurso no DynamoDB
<a name="rbac-bpa-rbp"></a>

O [Bloqueio de Acesso Público (BPA)](#rbac-bpa-rbp) é um recurso que identifica e impede a associação de políticas baseadas em recursos que concedem acesso público às tabelas, aos índices ou aos fluxos do DynamoDB em suas contas da [Amazon Web Services (AWS)](https://aws.amazon.com/). Com o BPA, é possível impedir o acesso público aos recursos do DynamoDB. O BPA realiza verificações durante a criação ou a modificação de uma política baseada em recursos e ajuda a melhorar o procedimento de segurança com o DynamoDB.

O BPA usa [raciocínio automatizado](https://aws.amazon.com/what-is/automated-reasoning/) para analisar o acesso concedido por sua política baseada em recursos e alerta você se essas permissões forem encontradas no momento da administração de uma política baseada em recursos. A análise verifica o acesso a todas as declarações de políticas baseadas em recursos, ações e ao conjunto de chaves de condição usadas nas políticas.

**Importante**  
O BPA ajuda a proteger os recursos impedindo que o acesso público seja concedido por meio de políticas baseadas em recursos que estão diretamente associadas aos recursos do DynamoDB, como tabelas, índices e fluxos. Além de usar o BPA, inspecione com cuidado as seguintes políticas para garantir que elas não concedam acesso público:  
Políticas baseadas em identidade vinculadas a entidades principais da AWS associadas (por exemplo, perfis do IAM).
Políticas baseadas em recursos vinculadas a recursos da AWS associados (por exemplo, chaves do AWS Key Management Service).

Você deve garantir que a [entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) não inclua uma entrada `*` ou que uma das chaves de condição especificadas restrinja o acesso das entidades principais ao recurso. Se a política baseada em recursos conceder acesso público à tabela, aos índices ou ao fluxo entre Contas da AWS, o DynamoDB impedirá que você crie ou modifique a política até que a especificação dentro da política seja corrigida e considerada não pública.

É possível tornar uma política não pública especificando uma ou mais entidades principais no bloco `Principal`. O exemplo de política baseada em recursos a seguir bloqueia o acesso público ao especificar duas entidades principais.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "123456789012",
      "111122223333"
    ]
  },
  "Action": "dynamodb:*",
  "Resource": "*"
}
```

Políticas que restringem o acesso especificando determinadas chaves de condição também não são consideradas públicas. Junto com a avaliação da entidade principal especificada na política baseada em recursos, as seguintes [chaves de condição confiáveis](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) são usadas para concluir a avaliação de uma política baseada em recursos para acesso não público:
+ `aws:PrincipalAccount`
+ `aws:PrincipalArn`
+ `aws:PrincipalOrgID`
+ `aws:PrincipalOrgPaths`
+ `aws:SourceAccount`
+ `aws:SourceArn`
+ `aws:SourceVpc`
+ `aws:SourceVpce`
+ `aws:UserId`
+ `aws:PrincipalServiceName`
+ `aws:PrincipalServiceNamesList`
+ `aws:PrincipalIsAWSService`
+ `aws:Ec2InstanceSourceVpc`
+ `aws:SourceOrgID`
+ `aws:SourceOrgPaths`

Além disso, para que uma política baseada em recursos não seja pública, os valores de nome do recurso da Amazon (ARN) e das chaves de string não devem conter curingas nem variáveis. Se a política baseada em recursos usa a chave `aws:PrincipalIsAWSService`, você deve garantir que tenha definido o valor da chave como verdadeiro.

A seguinte política limita o acesso ao usuário `John` na conta especificada. A condição faz com que a `Principal` seja restrita e não seja considerada pública.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "*"
  },
  "Action": "dynamodb:*",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:PrincipalArn": "arn:aws:iam::123456789012:user/John"
    }
  }
}
```

O exemplo a seguir de uma política baseada em recursos não pública restringe `sourceVPC` usando o operador `StringEquals`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "dynamodb:*",
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpc": [
            "vpc-91237329"
          ]
        }
      }
    }
  ]
}
```

------

# Operações de API do DynamoDB aceitas por políticas baseadas em recurso
<a name="rbac-iam-actions"></a>

Este tópico lista as operações de API aceitas por políticas baseadas em recursos. No entanto, em relação ao acesso entre contas, só é possível usar determinado conjunto de APIs do DynamoDB por meio de políticas baseadas em recursos. Não é possível associar políticas baseadas em recursos a tipos de recursos, como backups e importações. As ações do IAM, as quais correspondem às APIs que operam nesses tipos de recurso, são excluídas das ações do IAM aceitas nas políticas baseadas em recursos. Como os administradores da tabela definem as configurações internas da tabela na mesma conta, as APIs, como [UpdateTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTimeToLive.html) e [DisableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DisableKinesisStreamingDestination.html), não comportam o acesso entre contas por meio de políticas baseadas em recursos.

As APIs do plano de dados e do ambiente de gerenciamento do DynamoDB que comportam o acesso entre contas também aceitam sobrecarga de nomes de tabelas, o que permite especificar o ARN em vez do nome da tabela. É possível especificar o ARN da tabela no parâmetro `TableName` dessas APIs. No entanto, nem todas essas APIs são compatíveis com o acesso entre contas.

**Topics**
+ [Operações de API do plano de dados](#rbac-data-plane-actions)
+ [Operações de API PartiQL](#rbac-partiql-actions)
+ [Operações de API do ambiente de gerenciamento](#rbac-control-plane-actions)
+ [Operações de API de tabelas globais da versão 2019.11.21 (atual)](#rbac-current-global-table-actions)
+ [Operações de API de tabelas globais versão 2017.11.29 (herdada)](#rbac-legacy-global-table-actions)
+ [Operação de API de tags](#rbac-tags-actions)
+ [Operações de API de backup e restauração](#rbac-backup-restore-actions)
+ [Operações de API de backup contínuo/restauração (PITR)](#rbac-continuous-backup-restore-actions)
+ [Operações de API do Contributor Insights](#rbac-contributor-insights-actions)
+ [Operações API de exportação](#rbac-export-actions)
+ [Operações de API de importação](#rbac-import-actions)
+ [Operações de API do Amazon Kinesis Data Streams](#rbac-kinesis-actions)
+ [Operações de API de políticas baseadas em recursos](#rbac-rbp-actions)
+ [Operações de API de vida útil](#rbac-ttl-actions)
+ [Outras operações de API](#rbac-other-actions)
+ [Operações de API do DynamoDB Streams](#rbac-ds-actions)

## Operações de API do plano de dados
<a name="rbac-data-plane-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API do [plano de dados](HowItWorks.API.md#HowItWorks.API.DataPlane) para políticas baseadas em recursos e acesso entre contas.


| Plano de dados: APIs de tabelas/índices | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DeleteItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html)   | Sim | Sim | 
|   [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)   | Sim | Sim | 
|   [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)   | Sim | Sim | 
|   [Consulta](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html)   | Sim | Sim | 
|   [Verificar](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html)   | Sim | Sim | 
|   [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)   | Sim | Sim | 
|   [TransactGetItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html)   | Sim | Sim | 
|   [TransactWriteItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html)   | Sim | Sim | 
|   [BatchGetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html)   | Sim | Sim | 
|   [BatchWriteItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html)   | Sim | Sim | 

## Operações de API PartiQL
<a name="rbac-partiql-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API [PartiQL](HowItWorks.API.md#HowItWorks.API.DataPlane.partiql) para políticas baseadas em recursos e acesso entre contas.


| APIs PartiQL | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [BatchExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchExecuteStatement.html)   | Sim | Não | 
|   [ExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html)   | Sim | Não | 
|   [ExecuteTransaction](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteTransaction.html)   | Sim | Não | 

## Operações de API do ambiente de gerenciamento
<a name="rbac-control-plane-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API do [ambiente de gerenciamento](HowItWorks.API.md#HowItWorks.API.ControlPlane) para políticas baseadas em recursos e acesso entre contas.


| Ambiente de gerenciamento: APIs de tabelas | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html)   | Não | Não | 
|   [DeleteTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteTable.html)   | Sim | Sim | 
|   [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)   | Sim | Sim | 
|   [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html)   | Sim | Sim | 

## Operações de API de tabelas globais da versão 2019.11.21 (atual)
<a name="rbac-current-global-table-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de [tabelas globais da versão 2019.11.21 (atual)](GlobalTables.md) para políticas baseadas em recursos e acesso entre contas.


| APIs de tabelas globais versão 2019.11.21 (atual) | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeTableReplicaAutoScaling](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTableReplicaAutoScaling.html)   | Sim | Não | 
|   [UpdateTableReplicaAutoScaling](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTableReplicaAutoScaling.html)   | Sim | Não | 

## Operações de API de tabelas globais versão 2017.11.29 (herdada)
<a name="rbac-legacy-global-table-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de [tabelas globais da versão 2017.11.29 (herdada)](globaltables.V1.md) para políticas baseadas em recursos e acesso entre contas.


| APIs de tabelas globais versão 2017.11.29 (herdada) | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [CreateGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateGlobalTable.html)   | Não | Não | 
|   [DescribeGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeGlobalTable.html)   | Não | Não | 
|   [DescribeGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeGlobalTableSettings.html)   | Não | Não | 
|   [ListGlobalTables](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListGlobalTables.html)   | Não | Não | 
|   [UpdateGlobalTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTable.html)   | Não | Não | 
|   [UpdateGlobalTableSettings](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateGlobalTableSettings.html)   | Não | Não | 

## Operação de API de tags
<a name="rbac-tags-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API relacionadas a [tags](Tagging.Operations.md) para políticas baseadas em recursos e acesso entre contas.


| APIs de tags | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [ListTagsOfResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTagsOfResource.html)   | Sim | Sim | 
|   [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)   | Sim | Sim | 
|   [UntagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UntagResource.html)   | Sim | Sim | 

## Operações de API de backup e restauração
<a name="rbac-backup-restore-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API relacionadas a [backup e restauração](Backup-and-Restore.md) para políticas baseadas em recursos e acesso entre contas.


| APIs de backup e restauração | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [CreateBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateBackup.html)   | Sim | Não | 
|   [DescribeBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeBackup.html)   | Não | Não | 
|   [DeleteBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteBackup.html)   | Não | Não | 
|  [RestoreTableFromBackup](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableFromBackup.html)  | Não | Não | 

## Operações de API de backup contínuo/restauração (PITR)
<a name="rbac-continuous-backup-restore-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido por operações de API relacionadas a [backup contínuo/restauração (PITR)](Point-in-time-recovery.md) para políticas baseadas em recursos e acesso entre contas.


| APIs de backup contínuo/restauração (PITR) | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeContinuousBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeContinuousBackups.html)   | Sim | Não | 
|   [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html)   | Sim | Não | 
|   [UpdateContinuousBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateContinuousBackups.html)   | Sim | Não | 

## Operações de API do Contributor Insights
<a name="rbac-contributor-insights-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido por operações de API relacionadas a [backup contínuo/restauração (PITR)](Point-in-time-recovery.md) para políticas baseadas em recursos e acesso entre contas.


| APIs do Contributor Insights | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeContributorInsights.html)   | Sim | Não | 
|   [ListContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListContributorInsights.html)   | Não | Não | 
|   [UpdateContributorInsights](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateContributorInsights.html)   | Sim | Não | 

## Operações API de exportação
<a name="rbac-export-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de exportação para políticas baseadas em recursos e acesso entre contas.


| APIs de exportação | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeExport](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeExport.html)   | Não | Não | 
|   [ExportTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExportTableToPointInTime.html)   | Sim | Não | 
|   [ListExports](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListExports.html)   | Não | Não | 

## Operações de API de importação
<a name="rbac-import-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de importação para políticas baseadas em recursos e acesso entre contas.


| APIs de importação | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeImport](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeImport.html)   | Não | Não | 
|   [ImportTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ImportTable.html)   | Não | Não | 
|   [ListImports](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListImports.html)   | Não | Não | 

## Operações de API do Amazon Kinesis Data Streams
<a name="rbac-kinesis-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API do Kinesis Data Streams para políticas baseadas em recursos e acesso entre contas.


| APIs do Kinesis | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeKinesisStreamingDestination.html)   | Sim | Não | 
|   [DisableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DisableKinesisStreamingDestination.html)   | Sim | Não | 
|   [EnableKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_EnableKinesisStreamingDestination.html)   | Sim | Não | 
|   [UpdateKinesisStreamingDestination](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateKinesisStreamingDestination.html)   | Sim | Não | 

## Operações de API de políticas baseadas em recursos
<a name="rbac-rbp-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de políticas baseadas em recursos para políticas baseadas em recursos e acesso entre contas.


| APIs de políticas baseadas em recursos | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [GetResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetResourcePolicy.html)   | Sim | Não | 
|   [PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html)   | Sim | Não | 
|   [DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html)   | Sim | Não | 

## Operações de API de vida útil
<a name="rbac-ttl-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido pelas operações de API de [vida útil](TTL.md) (TTL) para políticas baseadas em recursos e acesso entre contas.


| APIs de TTL | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTimeToLive.html)   | Sim | Não | 
|   [UpdateTimeToLive](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTimeToLive.html)   | Sim | Não | 

## Outras operações de API
<a name="rbac-other-actions"></a>

A tabela a seguir lista o suporte em nível de API fornecido por outras operações de API variadas para políticas baseadas em recursos e acesso entre contas.


| Outras APIs | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeLimits](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeLimits.html)   | Não | Não | 
|   [DescribeEndpoints](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeEndpoints.html)   | Não | Não | 
|   [ListBackups](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListBackups.html)   | Não | Não | 
|   [ListTables](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTables.html)   | Não | Não | 

## Operações de API do DynamoDB Streams
<a name="rbac-ds-actions"></a>

A tabela a seguir lista o suporte em nível de API de APIs do DynamoDB Streams para políticas baseadas em recursos e acesso entre contas.


| APIs do DynamoDB Streams | Suporte a políticas baseadas em recursos. | Suporte entre contas. | 
| --- | --- | --- | 
|   [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html)   | Sim | Sim | 
|   [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)   | Sim | Sim | 
|   [GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html)   | Sim | Sim | 
|   [ListStreams](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_ListStreams.html)   | Não | Não | 

# Autorização com políticas baseadas em identidade do IAM e políticas baseadas em recursos do DynamoDB
<a name="rbac-auth-iam-id-based-policies-DDB"></a>

As **políticas baseadas em identidade** são associadas a uma identidade, como usuários, grupos de usuários e perfis do IAM. São os documentos da política do IAM que controlam quais ações uma identidade pode realizar, em quais recursos e em que condições. As políticas baseadas em identidade podem ser políticas [gerenciadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html) e [em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies).

As **políticas baseadas em recursos** são documentos de política do IAM que você associa a um recurso, como uma tabela do DynamoDB. Essas políticas concedem permissão à entidade principal especificada para executar ações específicas nesse recurso e definem em que condições isso se aplica. Por exemplo, a política baseada em recursos para uma tabela do DynamoDB também inclui o índice associado à tabela. As políticas baseadas em recursos são políticas em linha. Não há políticas baseadas em recursos gerenciadas.

Para ter mais informações sobre essas políticas, consulte [Políticas baseadas em identidade e em recurso](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) no *Guia do usuário do IAM*.

Se a entidade principal do IAM for da mesma conta que o proprietário do recurso, uma política baseada em recursos é suficiente para especificar as permissões de acesso ao recurso. Você ainda pode optar por uma política baseada em identidade do IAM além de uma política baseada em recursos. Em relação ao acesso entre contas, é necessário possibilitar o acesso de forma explícita nas políticas de identidade e de recursos, conforme especificado em [Acesso entre contas com políticas baseadas em recurso no DynamoDB](rbac-cross-account-access.md). Ao usar os dois tipos de políticas, uma política é avaliada conforme descrito em [Determinar se uma solicitação é permitida ou negada em uma conta](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow).

**Importante**  
Se uma política baseada em identidade conceder acesso incondicional a uma tabela do DynamoDB (por exemplo, `dynamodb:GetItem` sem nenhuma condição), uma política baseada em recursos que permita acesso com condições em `dynamodb:Attributes` não restringirá esse acesso. A permissão incondicional da política baseada em identidade tem precedência, e as condições da política baseada em recursos não são aplicadas como restrições. Para restringir o acesso a atributos específicos, use uma instrução `Deny` explícita em vez de se fiar somente em instruções `Allow` condicionais na política baseada em recursos.

# Exemplos de políticas baseadas em recurso do DynamoDB
<a name="rbac-examples"></a>

Ao especificar um ARN no campo `Resource` de uma política baseada em recursos, a política entrará em vigor somente se o ARN especificado corresponder ao ARN do recurso do DynamoDB ao qual está associado.

**nota**  
Lembre-se de substituir o texto em *itálico* pelas informações específicas do recurso.

## Política baseada em recursos para uma tabela
<a name="rbac-examples-get"></a>

A política baseada em recursos a seguir, anexada a uma tabela do DynamoDB chamada *MusicCollection*, oferece aos usuários do IAM *John* e *Jane* permissão para realizar as ações [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) e [BatchGetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html) no recurso *MusicCollection*.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::111122223333:user/username",
            "arn:aws:iam::111122223333:user/Jane"
          ]
        },
        "Action": [
          "dynamodb:GetItem",
          "dynamodb:BatchGetItem"
        ],
        "Resource": [
          "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
        ]
    }
  ]
}
```

------

## Política baseada em recursos para um fluxo
<a name="rbac-examples-streams"></a>

A política baseada em recursos a seguir, anexada a um fluxo do DynamoDB chamado `2024-02-12T18:57:26.492`, oferece aos usuários do IAM *John* e *Jane* permissão para realizar as ações de API [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html), [GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html) e [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) no recurso `2024-02-12T18:57:26.492`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/username",
          "arn:aws:iam::111122223333:user/Jane"
        ]
      },
      "Action": [
        "dynamodb:DescribeStream",
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
      ]
    }
  ]
}
```

------

## Política baseada em recursos para acesso a fim de realizar todas as ações em recursos especificados
<a name="rbac-examples-wildcard"></a>

Para permitir que um usuário realize todas as ações em uma tabela e em todos os índices associados a uma tabela, é possível usar um caractere curinga (\$1) para representar as ações e os recursos associados à tabela. O uso de um caractere curinga para os recursos permitirá que o usuário acesse a tabela do DynamoDB e todos os índices associados, incluindo aqueles que ainda não foram criados. Por exemplo, a política a seguir concederá permissão ao usuário *John* para realizar qualquer ação na tabela *MusicCollection* e em todos os seus índices, incluindo quaisquer índices que serão criados no futuro.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/role-name"
      },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/index/index-name"
      ]
    }
  ]
}
```

------

## Política baseada em recursos para acesso entre contas
<a name="rbac-examples-cross-account"></a>

É possível especificar permissões para uma identidade do IAM entre contas para acessar os recursos do DynamoDB. Por exemplo, talvez seja necessário que um usuário de uma conta confiável tenha acesso para ler o conteúdo da sua tabela, com a condição de que ele acesse somente itens e atributos específicos nesses itens. A política a seguir concede acesso ao usuário *John* por meio de um ID de Conta da AWS confiável *111111111111* para acessar dados de uma tabela na conta *123456789012* usando a API [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html). A política garante que o usuário possa acessar somente itens com uma chave primária *Jane* e que o usuário só possa recuperar os atributos `Artist` e `SongTitle`, mas nenhum outro atributo.

**Importante**  
Se você não especificar a condição `SPECIFIC_ATTRIBUTES`, verá todos os atributos dos itens exibidos.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountTablePolicy",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/John"
            },
            "Action": "dynamodb:GetItem",
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

Além da política anterior baseada em recursos, a política baseada em identidade associada ao usuário *John* também precisa permitir a ação da API `GetItem` para que o acesso entre contas funcione. Veja a seguir um exemplo de política baseada em identidade que deve ser associada ao usuário *John*.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountIdentityBasedPolicy",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

O usuário John pode fazer uma solicitação `GetItem` especificando o ARN da tabela no parâmetro `table-name` para acessar a tabela *MusicCollection* na conta *123456789012*.

```
aws dynamodb get-item \
    --table-name arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --key '{"Artist": {"S": "Jane"}' \
    --projection-expression 'Artist, SongTitle' \
    --return-consumed-capacity TOTAL
```

## Política baseada em recursos com condições de endereço IP
<a name="rbac-examples-conditions"></a>

É possível aplicar uma condição para restringir endereços IP de origem, nuvens privadas virtuais (VPCs) e endpoint da VPC (VPCE). É possível especificar permissões com base nos endereços de origem da solicitação de origem. Por exemplo, convém permitir que um usuário acesse os recursos do DynamoDB somente se eles estiverem sendo acessados de uma fonte IP específica, como um endpoint de VPN corporativo. Especifique esses endereços IP na declaração `Condition`.

O exemplo a seguir permite que o usuário *John* acesse qualquer recurso do DynamoDB quando os IPs de origem são `54.240.143.0/24` e `2001:DB8:1234:5678::/64`.

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

****  

```
{
  "Id":"PolicyId2",
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AllowIPmix",
      "Effect":"Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/username"
      },
      "Action":"dynamodb:*",
      "Resource":"*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "54.240.143.0/24",
            "2001:DB8:1234:5678::/64"
          ]
        }
      }
    }
  ]
}
```

------

Também é possível negar todo o acesso aos recursos do DynamoDB, exceto quando a origem é um endpoint da VPC específico, por exemplo, *vpce-1a2b3c4d*.

**Importante**  
Quando você usa o DAX com tabelas do DynamoDB que têm políticas de recursos baseadas em IP em ambientes somente IPv6, deve configurar regras de acesso adicionais. Se sua política de recursos restringir o acesso ao espaço de endereço IPv4 `0.0.0.0/0` nas tabelas, você deverá permitir o acesso ao perfil do IAM associado ao seu cluster do DAX. Adicione uma condição `ArnNotEquals` à sua política para garantir que o DAX mantenha o acesso às suas tabelas do DynamoDB. Para acessar mais informações, consulte [DAX e IPv6](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.create-cluster.DAX_and_IPV6.html).

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

****  

```
{
  "Id":"PolicyId",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToSpecificVPCEOnly",
      "Principal": "*",
      "Action": "dynamodb:*",
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "StringNotEquals":{
          "aws:sourceVpce":"vpce-1a2b3c4d"
        }
      }
    }
  ]
}
```

------

## Política baseada em recursos usando um perfil do IAM
<a name="rbac-examples-iam"></a>

Você também pode especificar um perfil de serviço do IAM na política baseada em recursos. As entidades do IAM que assumem esse perfil são limitadas pelas ações permitidas especificadas para o perfil e para o conjunto específico de recursos dentro da política baseada em recursos.

O exemplo a seguir permite que uma entidade do IAM realize todas as ações do DynamoDB nos recursos *MusicCollection* e *MusicCollection* do DynamoDB.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/*"
      ]
    }
  ]
}
```

------

# Considerações sobre políticas baseadas em recurso do DynamoDB
<a name="rbac-considerations"></a>

Ao definir políticas baseadas em recursos para os recursos do DynamoDB, são feitas as seguintes considerações:

**Considerações gerais**
+ O tamanho máximo aceito para um documento de política baseado em recursos é de 20 KB. O DynamoDB conta espaços em branco ao calcular o tamanho de uma política em relação a esse limite. 
+ As atualizações subsequentes de uma política para determinado recurso são bloqueadas por 15 segundos após uma atualização bem-sucedida da política para o mesmo recurso.
+ No momento, só é possível associar uma política baseada em recursos a fluxos existentes. Não é possível associar uma política a um fluxo ao criá-la.

**Considerações sobre tabelas globais**
+ As políticas baseadas em recursos não são compatíveis com réplicas da [Global Table versão 2017.11.29](globaltables_HowItWorks.md) (herdada).
+ Em uma política baseada em recursos, se a ação de um perfil vinculado ao serviço (SLR) do DynamoDB replicar dados para uma tabela global for negada, a adição ou a exclusão de uma réplica falhará com um erro.
+ O recurso [AWS::DynamoDB::GlobalTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html) não comporta a criação de uma réplica e a adição de uma política baseada em recursos a essa réplica na mesma atualização da pilha em regiões diferentes da região onde você implanta a atualização da pilha.

**Considerações sobre o acesso entre contas**
+ O acesso entre contas usando políticas baseadas em recursos não comporta tabelas criptografadas com chaves gerenciadas da AWS porque não é possível conceder acesso entre contas à política do KMS gerenciada da AWS.

**CloudFormation Considerações sobre o**
+ As políticas baseadas em recursos não aceitam a [detecção de oscilação](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html#). Se você atualizar uma política baseada em recursos fora do modelo de pilha do AWS CloudFormation, precisará atualizar a pilha do CloudFormation com as alterações.
+ As políticas baseadas em recursos não comportam mudanças fora da banda. Se você adicionar, atualizar ou excluir uma política fora do modelo do CloudFormation, a alteração não será substituída se não houver alterações na política dentro do modelo.

  Por exemplo, digamos que seu modelo contenha uma política baseada em recursos que você atualize posteriormente fora do modelo. Se você não fizer nenhuma alteração na política no modelo, a política atualizada no DynamoDB não será sincronizada com a política no modelo.

  Por outro lado, digamos que seu modelo não contenha uma política baseada em recursos, mas você adiciona uma política fora do modelo. Essa política não será removida do DynamoDB, desde que você não a adicione ao modelo. Ao adicionar uma política ao modelo e atualizar a pilha, a política existente no DynamoDB será atualizada para corresponder à definida no modelo.

# Práticas recomendadas para políticas baseadas em recurso do DynamoDB
<a name="rbac-best-practices"></a>

Este tópico descreve as práticas recomendadas para definir permissões de acesso para os recursos do DynamoDB e as ações permitidas nesses recursos.

## Simplificar o controle de acesso aos recursos do DynamoDB
<a name="rbac-simplify-access-control"></a>

Se as entidades principais do AWS Identity and Access Management que precisam acessar um recurso do DynamoDB fizerem parte da mesma Conta da AWS que a do proprietário do recurso, uma política baseada em identidade do IAM não será necessária para cada entidade principal. Uma política baseada em recursos associada aos recursos especificados será suficiente. Esse tipo de configuração simplifica o controle de acesso.

## Proteger os recursos do DynamoDB com políticas baseadas em recursos
<a name="rbac-protect"></a>

 Para todas as tabelas e os fluxos do DynamoDB, crie políticas baseadas em recursos para impor o controle de acesso para esses recursos. As políticas baseadas em recursos permitem centralizar as permissões em nível de recursos, simplificar o controle de acesso às tabelas, aos índices e aos fluxos do DynamoDB e reduzir as despesas indiretas administrativas. Se nenhuma política baseada em recursos for especificada para uma tabela ou um fluxo, o acesso à tabela ou ao fluxo será negado implicitamente, a menos que políticas baseadas em identidade associadas às entidades principais do IAM permitam o acesso.

## Aplique permissões de privilégio mínimo
<a name="rbac-least-privilege"></a>

Ao definir permissões com políticas baseadas em recursos para recursos do DynamoDB, conceda apenas as permissões necessárias para a realização de uma ação. Você faz isso definindo as ações que podem ser executadas em recursos específicos sob condições específicas, também conhecidas como permissões de privilégio mínimo. É possível começar com permissões amplas enquanto explora as permissões necessárias para sua workload ou para seu caso de uso. À medida que seu caso de uso se desenvolve, você pode trabalhar para reduzir as permissões que concede para caminhar em direção ao privilégio mínimo.

## Analisar a atividade de acesso entre contas para gerar políticas de privilégio mínimo
<a name="rbac-analyze-cross-account-access"></a>

O IAM Access Analyzer relata o acesso entre contas a entidades externas especificadas em políticas baseadas em recursos e fornece visibilidade para ajudar você a refinar as permissões e se adequar ao privilégio mínimo. Para obter mais informações sobre a geração de políticas, consulte [Geração de políticas do IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html).

## Usar o IAM Access Analyzer para gerar políticas de privilégio mínimo
<a name="rbac-iam-access-analyzer"></a>

Para conceder apenas as permissões necessárias para executar uma tarefa, você pode gerar políticas com base em sua atividade de acesso registrada no AWS CloudTrail. O IAM Access Analyzer analisa os serviços e as ações que suas políticas usam.

# Usar o controle de acesso por atributo com o DynamoDB
<a name="attribute-based-access-control"></a>

O [controle de acesso por atributo (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) é uma estratégia de autorização que define as permissões de acesso com base em [condições de tag](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html) em suas políticas baseadas em identidade ou em outras políticas da AWS, como políticas baseadas em recursos e políticas do IAM da organização. É possível anexar tags às tabelas do DynamoDB, que são então avaliadas em relação às condições baseadas em tags. Os índices associados a uma tabela herdam as tags adicionadas à tabela. É possível adicionar até cinquenta tags a cada tabela do DynamoDB. O tamanho máximo aceito para todas as tags em uma tabela é de 10 KB. Para ter mais informações sobre a marcação de recursos do DynamoDB e restrições de marcação, consulte [Marcar recursos no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.Operations.html) e [Restrições de marcação no DynamoDB](Tagging.md#TaggingRestrictions).

Para ter informações sobre como usar essas tags para controlar o acesso aos recursos da AWS, consulte no Guia do usuário do IAM:
+ [What is ABAC for AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)
+ [Controlar o acesso a recursos da AWS usando tags](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)

Com o uso do ABAC, é possível impor diferentes níveis de acesso para que suas equipes e aplicações realizem ações nas tabelas do DynamoDB usando menos políticas. É possível especificar uma tag no [elemento de condição](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) de uma política do IAM para controlar o acesso às tabelas ou aos índices do DynamoDB. Essas condições determinam o nível de acesso que uma entidade principal do IAM, um usuário ou um perfil tem às tabelas e aos índices do DynamoDB. Quando uma entidade principal do IAM faz uma solicitação de acesso ao DynamoDB, as tags do recurso e da identidade são avaliadas em relação às condições de tag na política do IAM. Depois disso, a política será efetiva somente se as condições de tag forem atendidas. Isso permite criar uma política do IAM que informe efetivamente uma das seguintes opções:
+ *Permitir que o usuário gerencie apenas os recursos que têm uma tag com uma chave `X` e um valor `Y`*.
+ *Negar acesso a todos os usuários aos recursos marcados com uma chave `X`*.

Por exemplo, é possível criar uma política que permita que os usuários atualizem uma tabela apenas se ela tiver o par de chave-valor de tag: `"environment": "staging"`. É possível usar a chave de condição [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) para permitir ou negar acesso a uma tabela com base nas tags anexadas a essa tabela.

É possível incluir condições baseadas em atributos ao criar a política ou posteriormente usar o Console de gerenciamento da AWS, a API da AWS, a AWS Command Line Interface (AWS CLI), o AWS SDK ou o AWS CloudFormation.

O exemplo a seguir permite a ação [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) em uma tabela chamada `MusicTable` se ela incluir uma chave de tag com o nome `environment` e o valor `production`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:*:*:table/MusicTable",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/environment": "production"
        }
      }
    }
  ]
}
```

------

**Topics**
+ [Por que devo usar o ABAC?](#why-use-abac)
+ [Chaves de condição para implementar o ABAC com o DynamoDB](#condition-keys-implement-abac)
+ [Considerações sobre o uso do ABAC com o DynamoDB](#abac-considerations)
+ [Habilitar o ABAC no DynamoDB](abac-enable-ddb.md)
+ [Usar o ABAC com tabelas e índices do DynamoDB](abac-implementation-ddb-tables.md)
+ [Exemplos de uso do ABAC com tabelas e índices do DynamoDB](abac-example-use-cases.md)
+ [Solução de problemas comuns de ABAC para tabelas e índices do DynamoDB](abac-troubleshooting.md)

## Por que devo usar o ABAC?
<a name="why-use-abac"></a>
+ **Gerenciamento de políticas mais simples:** é possível usar menos políticas porque não é necessário criar políticas diferentes para definir o nível de acesso para cada entidade principal do IAM.
+ **Controle de acesso escalável:** ajustar a escala do controle de acesso é mais fácil com o ABAC, pois não é necessário atualizar as políticas ao criar recursos do DynamoDB. É possível usar tags para autorizar o acesso às entidades principais do IAM que contêm tags correspondentes às tags do recurso. É possível integrar novas entidades principais do IAM ou recursos do DynamoDB e aplicar as tags apropriadas para conceder automaticamente as permissões necessárias sem precisar fazer nenhuma alteração na política.
+ **Gerenciamento de permissões refinado:** é prática recomendada [conceder o privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) ao criar políticas. Com o uso do ABAC, é possível criar tags para a entidade principal do IAM e usá-las para conceder acesso a ações e recursos específicos que correspondam às tags na entidade principal do IAM. 
+ **Alinhamento com o diretório corporativo:** é possível associar tags a atributos de funcionários existentes do seu diretório corporativo com o objetivo de alinhar suas políticas de controle de acesso à estrutura organizacional.

## Chaves de condição para implementar o ABAC com o DynamoDB
<a name="condition-keys-implement-abac"></a>

É possível usar as seguintes chaves de condição nas políticas da AWS para controlar o nível de acesso às suas tabelas e índices do DynamoDB:
+ [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag): controla o acesso com base no fato de o par de chave-valor da tag em uma tabela ou um índice do DynamoDB corresponder ou não à chave e ao valor da tag em uma política. Essa chave de condição é relevante para todas as APIs que operam em uma tabela ou um índice existente.

  As condições `dynamodb:ResourceTag` são avaliadas como se você não tivesse anexado nenhuma tag a um recurso.
+ [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag): permite comparar o par de chave/valor da tag que foi transmitido na solicitação com o par de tags especificado na política. Essa chave de condição é relevante para APIs que contêm tags como parte da carga útil da solicitação. Essas APIs incluem [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) e [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html).
+ [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys): compara as chaves de tag em uma solicitação com as chaves especificadas na política. Essa chave de condição é relevante para APIs que contêm tags como parte da carga útil da solicitação. Essas APIs incluem `CreateTable`, `TagResource` e `UntagResource`.

## Considerações sobre o uso do ABAC com o DynamoDB
<a name="abac-considerations"></a>

Ao usar o ABAC com tabelas ou índices do DynamoDB, as seguintes considerações se aplicam:
+ A marcação e o ABAC não são aceitos no DynamoDB Streams.
+ A marcação e o ABAC não são aceitos em backups do DynamoDB. Para usar o ABAC com backups, recomendamos usar o [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html).
+ As tags não são preservadas nas tabelas restauradas. É necessário adicionar tags às tabelas restauradas para usar condições baseadas em tags em políticas.

# Habilitar o ABAC no DynamoDB
<a name="abac-enable-ddb"></a>

Para a maioria das Contas da AWS, o ABAC é habilitado por padrão. Usando o [console do DynamoDB](https://console.aws.amazon.com/dynamodb/), é possível confirmar se o ABAC está habilitado para sua conta. Para fazer isso, abra o console do DynamoDB com um perfil que tenha a permissão [dynamodb:GetAbacStatus](#required-permissions-abac). Depois, abra a página **Configurações** do console do DynamoDB.

Se você não vir o cartão **Controle de acesso por atributo** ou se o cartão exibir o status **Ativado**, isso significa que o ABAC está habilitado para sua conta. No entanto, se você vir o cartão **Controle de acesso por atributo** com o status **Desativado**, conforme mostrado na imagem a seguir, o ABAC não está habilitado para sua conta.

## Controle de acesso por atributo: não habilitado
<a name="abac-disabled-image"></a>

![\[Página Configurações no console do DynamoDB que mostra o cartão Controle de acesso por atributo.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/ddb-console-settings-page.png)


O ABAC não está habilitado para Contas da AWS para as quais as condições baseadas em tags especificadas nas políticas baseadas em identidade ou em outras políticas ainda precisam ser auditadas. Se o ABAC não estiver habilitado para sua conta, as condições baseadas em tags nas políticas destinadas a atuar nas tabelas ou nos índices do DynamoDB serão avaliadas como se nenhuma tag estivesse presente nos recursos ou nas solicitações de API. Quando o ABAC está habilitado para sua conta, as condições baseadas em tags nas políticas da conta são avaliadas levando em conta as tags anexadas às tabelas ou às solicitações de API.

Para habilitar o ABAC para sua conta, recomendamos primeiro auditar as políticas conforme descrito na seção [Auditoria de políticas](#policy-audit-for-abac). Depois, inclua as [permissões necessárias para o ABAC](#required-permissions-abac) na política do IAM. Por fim, siga as etapas descritas em [Habilitar o ABAC no console](#abac-enable-console) para habilitar o ABAC para sua conta na região atual. Depois de habilitar o ABAC, é possível cancelá-lo nos próximos sete dias corridos após a adesão.

**Topics**
+ [Auditar as políticas antes de habilitar o ABAC](#policy-audit-for-abac)
+ [Permissões do IAM necessárias para habilitar o ABAC](#required-permissions-abac)
+ [Habilitar o ABAC no console](#abac-enable-console)

## Auditar as políticas antes de habilitar o ABAC
<a name="policy-audit-for-abac"></a>

Antes de habilitar o ABAC para sua conta, audite as políticas para confirmar se as condições baseadas em tags que possam existir nas políticas da conta estão configuradas conforme o pretendido. A auditoria das políticas ajudará a evitar surpresas com alterações de autorização nos fluxos de trabalho do DynamoDB após a habilitação do ABAC. Para ver exemplos do uso de condições baseadas em atributos com tags e o comportamento antes e depois da implementação do ABAC, consulte [Exemplos de uso do ABAC com tabelas e índices do DynamoDBExemplo de casos de uso](abac-example-use-cases.md).

## Permissões do IAM necessárias para habilitar o ABAC
<a name="required-permissions-abac"></a>

É necessário ter a permissão `dynamodb:UpdateAbacStatus` para habilitar o ABAC para sua conta na região atual. Para confirmar se o ABAC está habilitado para a conta, você também deve ter a permissão `dynamodb:GetAbacStatus`. Com essa permissão, é possível visualizar o status do ABAC para uma conta em qualquer região. É necessário ter essas permissões além da permissão necessária para acessar o console do DynamoDB.

A política do IAM a seguir concede a permissão para habilitar o ABAC e visualizar seu status para uma conta na região atual.

```
{
"version": "2012-10-17", 		 	 	 &TCX5-2025-waiver;
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:UpdateAbacStatus",
                "dynamodb:GetAbacStatus"
             ],
            "Resource": "*"
        }
    ]
}
```

## Habilitar o ABAC no console
<a name="abac-enable-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 superior, escolha a região para a qual você deseja habilitar o ABAC.

1. No painel de navegação esquerdo, escolha **Configurações**.

1. Na página **Configurações**, faça o seguinte:

   1. No cartão **Controle de acesso por atributo**, escolha **Habilitar**.

   1. Na caixa **Confirmar configuração de controle de acesso por atributo**, escolha **Habilitar** para confirmar sua escolha.

      Isso habilita o ABAC para a região atual e o cartão **Controle de acesso por atributo** mostra o status **Ativado**.

      Se você quiser cancelar a habilitação do ABAC no console, poderá fazer isso nos próximos sete dias corridos após a habilitação. Para cancelar a habilitação, escolha **Desabilitar** no cartão **Controle de acesso por atributo** na página **Configurações**.
**nota**  
A atualização do status do ABAC é uma operação assíncrona. Se as tags em suas políticas não forem avaliadas imediatamente, talvez seja necessário esperar algum tempo, pois a aplicação das alterações será finalmente consistente.

# Usar o ABAC com tabelas e índices do DynamoDB
<a name="abac-implementation-ddb-tables"></a>

As etapas a seguir demonstram como configurar permissões usando o ABAC. Neste cenário de exemplo, você adicionará tags a uma tabela do DynamoDB e criará um perfil do IAM com uma política que inclui condições baseadas em tags. Depois, você testará as permissões permitidas na tabela do DynamoDB combinando as condições da tag.

**Topics**
+ [Etapa 1: adicionar tags a uma tabela do DynamoDB](#abac-add-table-tags)
+ [Etapa 2: criar um perfil do IAM com uma política que inclui condições baseadas em tags](#abac-create-iam-role)
+ [Etapa 3: testar permissões](#abac-test-permissions)

## Etapa 1: adicionar tags a uma tabela do DynamoDB
<a name="abac-add-table-tags"></a>

É possível adicionar tags a tabelas novas ou existentes do DynamoDB usando o Console de gerenciamento da AWS, a API da AWS, a AWS Command Line Interface (AWS CLI), o AWS SDK ou o AWS CloudFormation. Por exemplo, o comando da CLI [tag-resource](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/tag-resource.html) a seguir adiciona uma tag a uma tabela chamada `MusicTable`.

```
aws dynamodb tag-resource —resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/MusicTable —tags Key=environment,Value=staging
```

## Etapa 2: criar um perfil do IAM com uma política que inclui condições baseadas em tags
<a name="abac-create-iam-role"></a>

[Crie uma política do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) usando a chave de condição [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) para comparar o par de chave-valor da tag especificado na política do IAM com o par de chave-valor anexado à tabela. O seguinte exemplo de política permite que os usuários coloquem ou atualizem itens em tabelas caso essas tabelas contenham o par de chave-valor de tag: `"environment": "staging"`. Se uma tabela não tiver o par de chave-valor de tag especificado, essas ações serão negadas.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "staging"
                }
            }
        }
    ]
}
```

------

## Etapa 3: testar permissões
<a name="abac-test-permissions"></a>

1. Anexe a política do IAM a um usuário ou um perfil de teste à sua Conta da AWS. Assegure-se de que a entidade principal do IAM utilizada não tenha acesso à tabela do DynamoDB por meio de uma política diferente.

1. Assegure-se de que sua tabela do DynamoDB contenha a chave de tag `"environment"` com um valor de `"staging"`.

1. Realize as ações `dynamodb:PutItem` e `dynamodb:UpdateItem` na tabela marcada. Essas ações devem ser bem-sucedidas caso o par de chave-valor de tag `"environment": "staging"` esteja presente.

   Se você realizar essas ações em uma tabela que não tenha o par de chave-valor de tag `"environment": "staging"`, sua solicitação falhará com uma `AccessDeniedException`.

Você também pode analisar os outros [exemplos de casos de uso](abac-example-use-cases.md) descritos na seção a seguir para implementar o ABAC e realizar mais testes.

# Exemplos de uso do ABAC com tabelas e índices do DynamoDB
<a name="abac-example-use-cases"></a>

Os exemplos a seguir descrevem alguns casos de uso para implementar condições baseadas em atributos usando tags.

**Topics**
+ [Exemplo 1: permitir uma ação usando aws:ResourceTag](#abac-allow-example-resource-tag)
+ [Exemplo 2: permitir uma ação usando aws:RequestTag](#abac-allow-example-request-tag)
+ [Exemplo 3: negar uma ação usando aws:TagKeys](#abac-deny-example-tag-key)

## Exemplo 1: permitir uma ação usando aws:ResourceTag
<a name="abac-allow-example-resource-tag"></a>

Usando a chave de condição `aws:ResourceTag/tag-key`, é possível comparar o par de chave-valor da tag especificado em uma política do IAM com o par de chave-valor anexado a uma tabela do DynamoDB. Por exemplo, é possível permitir uma ação específica, como [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html), caso haja correspondência das condições da tag em uma política do IAM e em uma tabela. Para fazer isso, execute as seguintes etapas:

------
#### [ Using the AWS CLI ]

1. Crie uma tabela. O exemplo a seguir usa o comando [create-table](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/create-table.html) da AWS CLI para criar uma tabela chamada `myMusicTable`.

   ```
   aws dynamodb create-table \
     --table-name myMusicTable \
     --attribute-definitions AttributeName=id,AttributeType=S \
     --key-schema AttributeName=id,KeyType=HASH \
     --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
     --region us-east-1
   ```

1. Adicione uma tag a essa tabela. O exemplo de comando [tag-resource](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/tag-resource.html) da AWS CLI a seguir adiciona o par de chave-valor de tag `Title: ProductManager` à `myMusicTable`.

   ```
   aws dynamodb tag-resource --region us-east-1 --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable --tags Key=Title,Value=ProductManager
   ```

1. Crie uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) e adicione-a a um perfil que tenha a política gerenciada [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBReadOnlyAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "dynamodb:PutItem",
         "Resource": "arn:aws:dynamodb:*:*:table/*",
         "Condition": {
           "StringEquals": {
             "aws:ResourceTag/Title": "ProductManager"
           }
         }
       }
     ]
   }
   ```

------

   Essa política permite a ação `PutItem` na tabela quando a chave e o valor da tag anexados à tabela correspondem às tags especificadas na política.

1. Assuma o perfil com as políticas descritas na Etapa 3.

1. Use o comando [put-item](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/put-item.html) da AWS CLI para inserir um item na `myMusicTable`.

   ```
   aws dynamodb put-item \
       --table-name myMusicTable --region us-east-1 \
       --item '{
           "id": {"S": "2023"},
           "title": {"S": "Happy Day"},
           "info": {"M": {
               "rating": {"N": "9"},
               "Artists": {"L": [{"S": "Acme Band"}, {"S": "No One You Know"}]},
               "release_date": {"S": "2023-07-21"}
           }}
       }'
   ```

1. Verifique a tabela para saber se o item foi adicionado a ela.

   ```
   aws dynamodb scan --table-name myMusicTable  --region us-east-1
   ```

------
#### [ Using the AWS SDK for Java 2.x ]

1. Crie uma tabela. O exemplo a seguir usa a API [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) para criar uma tabela chamada `myMusicTable`.

   ```
   DynamoDbClient dynamoDB = DynamoDbClient.builder().region(region).build();
   CreateTableRequest createTableRequest = CreateTableRequest.builder()
       .attributeDefinitions(
           Arrays.asList(
               AttributeDefinition.builder()
               .attributeName("id")
               .attributeType(ScalarAttributeType.S)
               .build()
           )
       )
       .keySchema(
           Arrays.asList(
               KeySchemaElement.builder()
               .attributeName("id")
               .keyType(KeyType.HASH)
               .build()
           )
       )
       .provisionedThroughput(ProvisionedThroughput.builder()
           .readCapacityUnits(5L)
           .writeCapacityUnits(5L)
           .build()
       )
       .tableName("myMusicTable")
       .build();
   
   CreateTableResponse createTableResponse = dynamoDB.createTable(createTableRequest);
   String tableArn = createTableResponse.tableDescription().tableArn();
   String tableName = createTableResponse.tableDescription().tableName();
   ```

1. Adicione uma tag a essa tabela. A API [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html) no exemplo a seguir adiciona o par de chave-valor de tag `Title: ProductManager` à `myMusicTable`.

   ```
   TagResourceRequest tagResourceRequest = TagResourceRequest.builder()
       .resourceArn(tableArn)
       .tags(
           Arrays.asList(
               Tag.builder()
               .key("Title")
               .value("ProductManager")
               .build()
           )
       )
       .build();
   dynamoDB.tagResource(tagResourceRequest);
   ```

1. Crie uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) e adicione-a a um perfil que tenha a política gerenciada [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBReadOnlyAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "dynamodb:PutItem",
         "Resource": "arn:aws:dynamodb:*:*:table/*",
         "Condition": {
           "StringEquals": {
             "aws:ResourceTag/Title": "ProductManager"
           }
         }
       }
     ]
   }
   ```

------

   Essa política permite a ação `PutItem` na tabela quando a chave e o valor da tag anexados à tabela correspondem às tags especificadas na política.

1. Assuma o perfil com as políticas descritas na Etapa 3.

1. Use a API [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) para colocar um item na `myMusicTable`.

   ```
   HashMap<String, AttributeValue> info = new HashMap<>();
   info.put("rating", AttributeValue.builder().s("9").build());
   info.put("artists", AttributeValue.builder().ss(List.of("Acme Band","No One You Know").build());
   info.put("release_date", AttributeValue.builder().s("2023-07-21").build());
   
   HashMap<String, AttributeValue> itemValues = new HashMap<>();
   itemValues.put("id", AttributeValue.builder().s("2023").build());
   itemValues.put("title", AttributeValue.builder().s("Happy Day").build());
   itemValues.put("info", AttributeValue.builder().m(info).build());
   
   
   PutItemRequest putItemRequest = PutItemRequest.builder()
                   .tableName(tableName)
                   .item(itemValues)
                   .build();
   dynamoDB.putItem(putItemRequest);
   ```

1. Verifique a tabela para saber se o item foi adicionado a ela.

   ```
   ScanRequest scanRequest = ScanRequest.builder()
                   .tableName(tableName)
                   .build();
                   
   ScanResponse scanResponse = dynamoDB.scan(scanRequest);
   ```

------
#### [ Using the AWS SDK para Python (Boto3) ]

1. Crie uma tabela. O exemplo a seguir usa a API [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) para criar uma tabela chamada `myMusicTable`.

   ```
   create_table_response = ddb_client.create_table(
       AttributeDefinitions=[
           {
               'AttributeName': 'id',
               'AttributeType': 'S'
           },
       ],
       TableName='myMusicTable',
       KeySchema=[
           {
               'AttributeName': 'id',
               'KeyType': 'HASH'
           },
       ],
           ProvisionedThroughput={
           'ReadCapacityUnits': 5,
           'WriteCapacityUnits': 5
       },
   )
   
   table_arn = create_table_response['TableDescription']['TableArn']
   ```

1. Adicione uma tag a essa tabela. A API [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html) no exemplo a seguir adiciona o par de chave-valor de tag `Title: ProductManager` à `myMusicTable`.

   ```
   tag_resouce_response = ddb_client.tag_resource(
       ResourceArn=table_arn,
       Tags=[
           {
               'Key': 'Title',
               'Value': 'ProductManager'
           },
       ]
   )
   ```

1. Crie uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) e adicione-a a um perfil que tenha a política gerenciada [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBReadOnlyAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
           "Effect": "Allow",
           "Action": "dynamodb:PutItem",
           "Resource": "arn:aws:dynamodb:*:*:table/*",
           "Condition": {
               "StringEquals": {
               "aws:ResourceTag/Title": "ProductManager"
               }
           }
           }
       ]
       }
   ```

------

   Essa política permite a ação `PutItem` na tabela quando a chave e o valor da tag anexados à tabela correspondem às tags especificadas na política.

1. Assuma o perfil com as políticas descritas na Etapa 3.

1. Use a API [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) para colocar um item na `myMusicTable`.

   ```
   put_item_response = client.put_item(
       TableName = 'myMusicTable'
       Item = {
           'id': '2023',
           'title': 'Happy Day',
           'info': {
               'rating': '9',
               'artists': ['Acme Band','No One You Know'],
               'release_date': '2023-07-21'
           }
       }
   )
   ```

1. Verifique a tabela para saber se o item foi adicionado a ela.

   ```
   scan_response = client.scan(
       TableName='myMusicTable'
   )
   ```

------

**Sem ABAC**  
Se o ABAC não estiver habilitado para a Conta da AWS, as condições de tag na política do IAM e na tabela do DynamoDB não serão correspondentes. Consequentemente, a ação `PutItem` exibirá uma `AccessDeniedException` devido ao efeito da política `AmazonDynamoDBReadOnlyAccess`.

```
An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::123456789012:assumed-role/DynamoDBReadOnlyAccess/Alice is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:PutItem action.
```

**Com ABAC**  
Se o ABAC estiver habilitado para a Conta da AWS, a ação `put-item` será concluída com êxito e adicionará um novo item à tabela. Isso ocorre porque a política em linha na tabela permite a ação `PutItem` caso as condições de tag na política do IAM e na tabela coincidam.

## Exemplo 2: permitir uma ação usando aws:RequestTag
<a name="abac-allow-example-request-tag"></a>

Usando a chave de condição [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag), você pode comparar o par de chave-valor de tag que é transmitido em sua solicitação com o par de tags especificado na política do IAM. Por exemplo, você pode permitir uma ação específica, como `CreateTable`, usando o `aws:RequestTag` caso as condições de tag não coincidam. Para fazer isso, execute as seguintes etapas:

------
#### [ Using the AWS CLI ]

1. Crie uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) e adicione-a a um perfil que tenha a política gerenciada [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/ReadOnlyAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "dynamodb:CreateTable",
                   "dynamodb:TagResource"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Owner": "John"
                   }
               }
           }
       ]
   }
   ```

------

1. Crie uma tabela que contenha o par de chave-valor de tag `"Owner": "John"`.

   ```
   aws dynamodb create-table \
   --attribute-definitions AttributeName=ID,AttributeType=S \
   --key-schema AttributeName=ID,KeyType=HASH  \
   --provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \
   --region us-east-1 \
   --tags Key=Owner,Value=John \
   --table-name myMusicTable
   ```

------
#### [ Using the AWS SDK para Python (Boto3) ]

1. Crie uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) e adicione-a a um perfil que tenha a política gerenciada [AmazonDynamoDBReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBReadOnlyAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "dynamodb:CreateTable",
                   "dynamodb:TagResource"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Owner": "John"
                   }
               }
           }
       ]
   }
   ```

------

1. Crie uma tabela que contenha o par de chave-valor de tag `"Owner": "John"`.

   ```
   ddb_client = boto3.client('dynamodb')
   
   create_table_response = ddb_client.create_table(
       AttributeDefinitions=[
           {
               'AttributeName': 'id',
               'AttributeType': 'S'
           },
       ],
       TableName='myMusicTable',
       KeySchema=[
           {
               'AttributeName': 'id',
               'KeyType': 'HASH'
           },
       ],
           ProvisionedThroughput={
           'ReadCapacityUnits': 1000,
           'WriteCapacityUnits': 500
       },
       Tags=[
           {
               'Key': 'Owner',
               'Value': 'John'
           },
       ],
   )
   ```

------

**Sem ABAC**  
Se o ABAC não estiver habilitado para a Conta da AWS, as condições de tag na política em linha e na tabela do DynamoDB não vão coincidir. Consequentemente, a solicitação `CreateTable` falhará e a tabela não será criada.

```
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/Admin/John is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:CreateTable action.
```

**Com ABAC**  
Se o ABAC estiver habilitado para a Conta da AWS, sua solicitação de criação de tabela será concluída com êxito. Como o par de chave-valor de tag `"Owner": "John"` está presente na solicitação `CreateTable`, a política em linha permite que o usuário `John` realize a ação `CreateTable`.

## Exemplo 3: negar uma ação usando aws:TagKeys
<a name="abac-deny-example-tag-key"></a>

Usando a chave de condição [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys), você pode comparar as chaves de tag em uma solicitação com as chaves especificadas na política do IAM. Por exemplo, será possível negar uma ação específica, como `CreateTable`, usando `aws:TagKeys` se uma chave de tag específica *não* estiver presente na solicitação. Para fazer isso, execute as seguintes etapas:

------
#### [ Using the AWS CLI ]

1. Adicione uma [política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies) a um perfil que tenha a política gerenciada [AmazonDynamoDBFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBFullAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": [
                   "dynamodb:CreateTable",
                   "dynamodb:TagResource"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/*",
               "Condition": {
                   "Null": {
                       "aws:TagKeys": "false"
                   },
                   "ForAllValues:StringNotEquals": {
                       "aws:TagKeys": "CostCenter"
                   }
               }
           }
       ]
   }
   ```

------

1. Assuma o perfil ao qual a política foi anexada e crie uma tabela com a chave de tag `Title`.

   ```
   aws dynamodb create-table \
   --attribute-definitions AttributeName=ID,AttributeType=S \
   --key-schema AttributeName=ID,KeyType=HASH  \
   --provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \
   --region us-east-1 \
   --tags Key=Title,Value=ProductManager \
   --table-name myMusicTable
   ```

------
#### [ Using the AWS SDK para Python (Boto3) ]

1. Adicione uma [política gerenciada pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies) a um perfil que tenha a política gerenciada [AmazonDynamoDBFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonDynamoDBFullAccess.html) pela AWS anexada a ela, conforme mostrado no exemplo a seguir.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": [
                   "dynamodb:CreateTable",
                   "dynamodb:TagResource"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/*",
               "Condition": {
                   "Null": {
                       "aws:TagKeys": "false"
                   },
                   "ForAllValues:StringNotEquals": {
                       "aws:TagKeys": "CostCenter"
                   }
               }
           }
       ]
   }
   ```

------

1. Assuma o perfil ao qual a política foi anexada e crie uma tabela com a chave de tag `Title`.

   ```
   ddb_client = boto3.client('dynamodb')
   
   create_table_response = ddb_client.create_table(
       AttributeDefinitions=[
           {
               'AttributeName': 'id',
               'AttributeType': 'S'
           },
       ],
       TableName='myMusicTable',
       KeySchema=[
           {
               'AttributeName': 'id',
               'KeyType': 'HASH'
           },
       ],
           ProvisionedThroughput={
           'ReadCapacityUnits': 1000,
           'WriteCapacityUnits': 500
       },
       Tags=[
           {
               'Key': 'Title',
               'Value': 'ProductManager'
           },
       ],
   )
   ```

------

**Sem ABAC**  
Se o ABAC não estiver habilitado para a Conta da AWS, o DynamoDB não enviará as chaves de tag no comando `create-table` ao IAM. A condição `Null` garante que a condição seja avaliada como `false` caso não haja tags na solicitação. Como a política `Deny` não coincide, o comando `create-table` é concluído com êxito.

**Com ABAC**  
Se o ABAC estiver habilitado para a Conta da AWS, as chaves de tag transmitidas no comando `create-table` serão enviadas ao IAM. A chave de tag `Title` é avaliada em relação à chave de tag baseada em condições, `CostCenter`, presente na política `Deny`. A chave de tag `Title` não corresponde à chave de tag presente na política `Deny` por causa do operador `StringNotEquals`. Portanto, a ação `CreateTable` falha e sua tabela não é criada. A execução do comando `create-table` exibe uma `AccessDeniedException`.

```
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/DynamoFullAccessRole/ProductManager is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable with an explicit deny in an identity-based policy.
```

# Solução de problemas comuns de ABAC para tabelas e índices do DynamoDB
<a name="abac-troubleshooting"></a>

Este tópico oferece conselhos para solução de erros e problemas comuns que você pode encontrar ao implementar o ABAC em tabelas ou índices do DynamoDB.

## Chaves de condição específicas do serviço em políticas geram um erro
<a name="abac-troubleshooting-service-specific-keys"></a>

Chaves de condição específicas do serviço não são consideradas chaves de condição válidas. Se você usou essas chaves em suas políticas, elas gerarão um erro. Para corrigir esse problema, você deve substituir as chaves de condição específicas do serviço por uma [chave de condição apropriada para implementar o ABAC](attribute-based-access-control.md#condition-keys-implement-abac) no DynamoDB.

Por exemplo, digamos que você tenha usado a chave de condição `dynamodb:ResourceTag` em uma [política em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) que executa a solicitação [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html). Imagine que a solicitação falhe com uma `AccessDeniedException`. O exemplo a seguir mostra a política em linha errônea com a chave de condição `dynamodb:ResourceTag`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/*",
            "Condition": {
                "StringEquals": {
                    "dynamodb:ResourceTag/Owner": "John"
                }
            }
        }
    ]
}
```

------

Para corrigir esse problema, substitua a chave de condição `dynamodb:ResourceTag` por `aws:ResourceTag`, conforme mostrado no exemplo a seguir.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Owner": "John"
                }
            }
        }
    ]
}
```

------

## Não é possível cancelar o ABAC
<a name="abac-troubleshooting-unable-opt-out"></a>

Se o ABAC foi habilitado para sua conta por meio do Suporte, você não poderá cancelá-lo pelo console do DynamoDB. Para cancelá-lo, entre em contato com o [Suporte](https://console.aws.amazon.com/support).

Você mesmo poderá cancelar o ABAC *somente se* as seguintes condições forem verdadeiras:
+ Você usou o método de autoatendimento para [ativar por meio do console do DynamoDB](abac-enable-ddb.md#abac-enable-console).
+ Você está cancelando o recurso em até sete dias corridos após a ativação.

# Proteção de dados no DynamoDB
<a name="data-protection"></a>

O Amazon DynamoDB fornece uma infraestrutura de armazenamento resiliente projetada para armazenamento de dados essenciais à missão e primários. Os dados são armazenados de maneira redundante em vários dispositivos de diversas instalações em uma região do Amazon DynamoDB.

O DynamoDB protege os dados de usuário armazenados em repouso e também os dados em trânsito entre os clientes on-premises e o Amazon DynamoDB e entre o Amazon DynamoDB e outros recursos da AWS na mesma região da AWS.

**Topics**
+ [Criptografia em repouso do DynamoDB](EncryptionAtRest.md)
+ [Proteger as conexões do DynamoDB usando endpoints da VPC e políticas do IAM](inter-network-traffic-privacy.md)

# 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",
  }
  ```

# Proteger as conexões do DynamoDB usando endpoints da VPC e políticas do IAM
<a name="inter-network-traffic-privacy"></a>

As conexões são protegidas entre o Amazon DynamoDB e as aplicações on-premises e entre o DynamoDB e outros recursos da AWS na mesma região da AWS.

## Política necessária para endpoints
<a name="inter-network-traffic-DescribeEndpoints"></a>

O Amazon DynamoDB fornece uma API [DescribeEndpoints](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeEndpoints.html) que permite enumerar informações de endpoints regionais. Para solicitações aos endpoints públicos do DynamoDB, a API responde independentemente da política do IAM configurada para o DynamoDB, mesmo que haja uma negação explícita ou implícita na política do IAM ou do endpoint da VPC. Isso ocorre porque o DynamoDB ignora intencionalmente a autorização para a API `DescribeEndpoints`.

Para solicitações de um endpoint da VPC, as políticas de endpoint do IAM e da nuvem privada virtual (VPC) devem autorizar a chamada de API `DescribeEndpoints` para as entidades principais do Identity and Access Management (IAM) solicitantes usando a ação do IAM `dynamodb:DescribeEndpoints`. Caso contrário, o acesso à API `DescribeEndpoints` será negado.

Veja a seguir um exemplo de uma política de endpoints.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "dynamodb:DescribeEndpoints",
            "Resource": "*"
        }
    ]
}
```

------

## Tráfego entre clientes de serviço e on-premises e as aplicações
<a name="inter-network-traffic-privacy-on-prem"></a>

Você tem duas opções de conectividade entre sua rede privada e a AWS: 
+ Uma conexão do AWS Site-to-Site VPN. Para obter mais informações, consulte [O que é o AWS Site-to-Site VPN?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) no * Guia do usuário do AWS Site-to-Site VPN*.
+ Uma conexão do Direct Connect. Para obter mais informações, consulte [O que é o Direct Connect?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) no * Guia do usuário do Direct Connect*.

O acesso ao DynamoDB via rede é feito por meio de APIs publicadas pela AWS. Os clientes devem ser compatíveis com o Transport Layer Security (TLS) 1.2. Recomendamos o TLS 1.3. Os clientes também devem ter suporte a pacotes de criptografia com sigilo de encaminhamento perfeito (PFS) como Ephemeral Diffie-Hellman (DHE) ou Ephemeral Elliptic Curve Diffie-Hellman (ECDHE). A maioria dos sistemas modernos como Java 7 e versões posteriores oferece suporte a esses modos. Além disso, você deve assinar solicitações usando um ID da chave de acesso e uma chave de acesso secreta associados a uma entidade principal do IAM. Ou você pode usar o [AWS Security Token Service (STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) para gerar credenciais de segurança temporárias para assinar solicitações.

## Tráfego entre recursos da AWS na mesma região
<a name="inter-network-traffic-privacy-within-region"></a>

Um endpoint da Amazon Virtual Private Cloud (Amazon VPC) para DynamoDB é uma entidade lógica dentro de uma VPC que permite conectividade apenas com o DynamoDB. A Amazon VPC encaminha as solicitações para o DynamoDB e roteia as respostas de volta para a VPC. Para obter mais informações, consulte [Endpoints da VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) no *Guia do usuário da Amazon VPC*. Para obter exemplos de políticas que podem ser usadas para controlar o acesso a partir de endpoints da VPC, consulte [Usar políticas do IAM para controlar o acesso ao DynamoDB](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-ddb.html). 

**nota**  
Os endpoints da Amazon VPC não podem ser acessados via AWS Site-to-Site VPN ou Direct Connect.

# AWS Identity and Access Management (IAM) e DynamoDB
<a name="identity-and-access-mgmt"></a>

 O AWS Identity and Access Management é um serviço da AWS que ajuda a controlar o acesso aos recursos da AWS de maneira segura. Os administradores controlam quem pode ser autenticado (fazer login) e autorizado (ter permissões) para usar os recursos do Amazon DynamoDB e do DynamoDB Accelerator. Você pode usar o IAM para gerenciar as permissões de acesso e implementar políticas de segurança para o Amazon DynamoDB e o DynamoDB Accelerator. O IAM é um AWS serviço da que pode ser usado sem custo adicional. 

 

**Topics**
+ [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md)
+ [Uso de condições de política do IAM para controle de acesso refinado](specifying-conditions.md)

# Gerenciamento de identidade e acesso no Amazon DynamoDB
<a name="security-iam"></a>





O AWS Identity and Access Management (IAM) é um serviço da AWS service (Serviço da AWS) que ajuda um administrador a controlar com segurança o acesso aos recursos da AWS. Os administradores do IAM controlam quem pode ser *autenticado* (fazer login) e *autorizado* (ter permissões) para usar os recursos do DynamoDB. O IAM é um AWS service (Serviço da AWS) que pode ser usado sem custo adicional.

**Topics**
+ [Público](#security_iam_audience)
+ [Autenticação com identidades](#security_iam_authentication)
+ [Gerenciar o acesso usando políticas](#security_iam_access-manage)
+ [Como o Amazon DynamoDB funciona com o IAM](security_iam_service-with-iam.md)
+ [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md)
+ [Solução de problemas de identidade e acesso no Amazon DynamoDB](security_iam_troubleshoot.md)
+ [Política do IAM para evitar a compra de capacidade reservada do DynamoDB](iam-policy-prevent-purchase-reserved-capacity.md)

## Público
<a name="security_iam_audience"></a>

A forma como você usa o AWS Identity and Access Management (IAM) difere com base em seu perfil:
+ **Usuário do serviço**: solicite permissões ao seu administrador se você não conseguir acessar os atributos (consulte [Solução de problemas de identidade e acesso no Amazon DynamoDB](security_iam_troubleshoot.md)).
+ **Administrador do serviço**: determine o acesso do usuário e envie solicitações de permissão (consulte [Como o Amazon DynamoDB funciona com o IAM](security_iam_service-with-iam.md))
+ **Administrador do IAM**: escreva políticas para gerenciar o acesso (consulte [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md))

## Autenticação com identidades
<a name="security_iam_authentication"></a>

A autenticação é a forma como fazer login na AWS usando suas credenciais de identidade. Você precisa se autenticar como o Usuário raiz da conta da AWS, como um usuário do IAM ou assumindo um perfil do IAM.

Você pode fazer login como uma identidade federada usando credenciais de uma fonte de identidade, como o Centro de Identidade do AWS IAM (Centro de Identidade do IAM), autenticação única ou credenciais do Google/Facebook. Para ter mais informações sobre como fazer login, consulte [Como fazer login em sua Conta da AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) no *Guia do usuário do Início de Sessão da AWS*.

Para acesso programático, a AWS oferece um SDK e uma CLI para assinar solicitações criptograficamente. Para ter mais informações, consulte [AWS Signature Version 4 para solicitações de API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) no *Guia do usuário do IAM*.

### Usuário-raiz Conta da AWS
<a name="security_iam_authentication-rootuser"></a>

 Ao criar uma Conta da AWS, você começa com uma identidade de login única chamada *usuário-raiz* da Conta da AWS, que tem acesso total a todos os recursos e Serviços da AWS. É altamente recomendável não usar o usuário-raiz em tarefas diárias. Consulte as tarefas que exigem credenciais de usuário-raiz em [Tarefas que exigem credenciais de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) no *Guia do usuário do IAM*. 

### Identidade federada
<a name="security_iam_authentication-federated"></a>

Como prática recomendada, exija que os usuários humanos usem a federação com um provedor de identidades para acessar a Serviços da AWS usando credenciais temporárias.

Uma *identidade federada* é um usuário do seu diretório empresarial, de um provedor de identidades da web ou do Directory Service que acessa Serviços da AWS usando credenciais de uma fonte de identidade. As identidades federadas assumem funções que oferecem credenciais temporárias.

Para o gerenciamento de acesso centralizado, recomendamos Centro de Identidade do AWS IAM. Para saber mais, consulte [O que é o IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) no *Guia do usuário do Centro de Identidade do AWS IAM*.

### Usuários e grupos do IAM
<a name="security_iam_authentication-iamuser"></a>

Um *[usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* é uma identidade com permissões específicas para uma única pessoa ou aplicação. É recomendável usar credenciais temporárias, em vez de usuários do IAM com credenciais de longo prazo. Para saber mais, consulte [Exigir que os usuários humanos usem a federação com um provedor de identidade para acessar a AWS usando credenciais temporárias](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) no *Guia do usuário do IAM*.

Um [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) especifica um conjunto de usuários do IAM e facilita o gerenciamento de permissões para grandes conjuntos de usuários. Para ter mais informações, consulte [Casos de uso de usuários do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) no *Guia do usuário do IAM*.

### Perfis do IAM
<a name="security_iam_authentication-iamrole"></a>

Uma *[perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* é uma identidade com permissões específicas que oferece credenciais temporárias. É possível assumir um perfil [alternando de um usuário para um perfil do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) ou chamando uma operação de API AWS CLI ou AWS. Para saber mais, consulte [Métodos para assumir um perfil](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) no *Manual do usuário do IAM*.

Os perfis do IAM são úteis para acesso de usuário federado, permissões de usuário do IAM temporárias, acesso entre contas, acesso entre serviços e aplicações em execução no Amazon EC2. Consulte mais informações em [Acesso a recursos entre contas no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) no *Guia do usuário do IAM*.

## Gerenciar o acesso usando políticas
<a name="security_iam_access-manage"></a>

Você controla o acesso na AWS criando políticas e anexando-as a identidades ou recursos da AWS. Uma política define permissões quando associada a uma identidade ou a um recurso. A AWS avalia essas políticas quando a entidade principal faz uma solicitação. A maioria das políticas é armazenada na AWS como documentos JSON. Para ter mais informações sobre documentos de política JSON, consulte [Visão geral das políticas JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) no *Guia do usuário do IAM*.

Por meio de políticas, os administradores especificam quem tem acesso a que, definindo qual **entidade principal** pode realizar **ações** em quais **recursos** e sob quais **condições**.

Por padrão, usuários e perfis não têm permissões. Um administrador do IAM cria políticas do IAM e as adiciona aos perfis, os quais os usuários podem então assumir. As políticas do IAM definem permissões, independentemente do método usado para realizar a operação.

### Políticas baseadas em identidade
<a name="security_iam_access-manage-id-based-policies"></a>

As políticas baseadas em identidade são documentos de políticas de permissão JSON que você anexa a uma identidade (usuário, grupo ou perfil). Essas políticas controlam quais ações as identidades podem realizar, em quais recursos e sob quais condições. Para saber como criar uma política baseada em identidade, consulte [Definir permissões personalizadas do IAM com as políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do Usuário do IAM*.

As políticas baseadas em identidade podem ser políticas *em linha* (incorporadas diretamente em uma única identidade) ou *políticas gerenciadas* (políticas autônomas anexadas a várias identidades). Para saber como escolher entre uma política gerenciada e políticas em linha, consulte [Escolher entre políticas gerenciadas e políticas em linha](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) no *Guia do usuário do IAM*.

### Políticas baseadas em recursos
<a name="security_iam_access-manage-resource-based-policies"></a>

Políticas baseadas em recursos são documentos de políticas JSON que você anexa a um recurso. Entre os exemplos estão *políticas de confiança de perfil* do IAM e *políticas de bucket* do Amazon S3. Em serviços compatíveis com políticas baseadas em recursos, os administradores de serviço podem usá-las para controlar o acesso a um recurso específico. É necessário [especificar uma entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) em uma política baseada em recursos.

Políticas baseadas em recursos são políticas em linha localizadas nesse serviço. Não é possível usar as políticas gerenciadas pela AWS do IAM em uma política baseada em atributos.

### Outros tipos de política
<a name="security_iam_access-manage-other-policies"></a>

A AWS permite outros tipos de política capazes de definir o máximo de permissões concedidas por tipos de política mais comuns:
+ **Limites de permissões**: definem o número máximo de permissões que uma política baseada em identidade pode conceder a uma entidade do IAM. Para saber mais sobre limites de permissões, consulte [Limites de permissões para identidades do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) no *Guia do usuário do IAM*.
+ **Políticas de Controle de Serviços (SCPs)**: as SCPs especificam o número máximo de permissões para uma organização ou uma unidade organizacional no AWS Organizations. Para saber mais, consulte [Políticas de controle de serviço](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) no *Guia do usuário do AWS Organizations*.
+ **Políticas de controle de recursos (RCPs)**: definem o número máximo de permissões disponíveis para recursos em suas contas. Consulte mais informações em [Resource control policies (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) no *Guia do usuário do AWS Organizations*.
+ **Políticas de sessão**: políticas avançadas transmitidas como um parâmetro durante a criação de uma sessão temporária para um perfil ou um usuário federado. Para saber mais, consulte [Políticas de sessão](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) no *Guia do usuário do IAM*.

### Vários tipos de política
<a name="security_iam_access-manage-multiple-policies"></a>

Quando vários tipos de política são aplicáveis a uma solicitação, é mais complicado compreender as permissões resultantes. Para saber como a AWS determina se deve permitir ou não uma solicitação quando há vários tipos de política envolvidos, consulte [Lógica da avaliação de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) no *Guia do usuário do IAM*.

# Como o Amazon DynamoDB funciona com o IAM
<a name="security_iam_service-with-iam"></a>

Antes de usar o IAM para gerenciar o acesso ao DynamoDB, saiba quais recursos do IAM estão disponíveis para uso com o DynamoDB.






| Recurso do IAM | Suporte ao DynamoDB | 
| --- | --- | 
|  [Políticas baseadas em identidade](#security_iam_service-with-iam-id-based-policies)  |   Sim  | 
|  [Políticas baseadas em atributos](#security_iam_service-with-iam-resource-based-policies)  |   Sim  | 
|  [Ações de políticas](#security_iam_service-with-iam-id-based-policies-actions)  |   Sim  | 
|  [Recursos de políticas](#security_iam_service-with-iam-id-based-policies-resources)  |   Sim  | 
|  [Chaves de condição de políticas](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   Sim  | 
|  [ACLs](#security_iam_service-with-iam-acls)  |   Não   | 
|  [ABAC (tags em políticas)](#security_iam_service-with-iam-tags)  |   Sim  | 
|  [Credenciais temporárias](#security_iam_service-with-iam-roles-tempcreds)  |   Sim  | 
|  [Permissões de entidade principal](#security_iam_service-with-iam-principal-permissions)  |   Sim  | 
|  [Perfis de serviço](#security_iam_service-with-iam-roles-service)  |   Sim  | 
|  [Perfis vinculados a serviço](#security_iam_service-with-iam-roles-service-linked)  |   Sim  | 

Para obter uma visão geral de como o Amazon DynamoDB e outros serviços da AWS funcionam com a maioria dos recursos do IAM, consulte [Serviços da AWS que funcionam com o IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) no *Guia do usuário do IAM*.

## Políticas baseadas em identidade para o DynamoDB
<a name="security_iam_service-with-iam-id-based-policies"></a>

**Compatível com políticas baseadas em identidade:** sim

As políticas baseadas em identidade são documentos de políticas de permissões JSON que podem ser anexados a uma identidade, como usuário do IAM, grupo de usuários ou perfil. Essas políticas controlam quais ações os usuários e perfis podem realizar, em quais recursos e em que condições. Para saber como criar uma política baseada em identidade, consulte [Definir permissões personalizadas do IAM com as políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do Usuário do IAM*.

Com as políticas baseadas em identidade do IAM, é possível especificar ações e recursos permitidos ou negados, assim como as condições sob as quais as ações são permitidas ou negadas. Para saber mais sobre todos os elementos que podem ser usados em uma política JSON, consulte [Referência de elemento de política JSON do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) no *Guia do usuário do IAM*.

### Exemplos de políticas baseadas em identidade para o DynamoDB
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Para visualizar exemplos de políticas baseadas em identidade do DynamoDB, consulte [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md).

## Políticas baseadas em recursos no DynamoDB
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**Compatível com políticas baseadas em recursos:** sim

Políticas baseadas em recursos são documentos de políticas JSON que você anexa a um recurso. São exemplos de políticas baseadas em recursos as *políticas de confiança de perfil* do IAM e as *políticas de bucket* do Amazon S3. Em serviços compatíveis com políticas baseadas em recursos, os administradores de serviço podem usá-las para controlar o acesso a um recurso específico. Para o atributo ao qual a política está anexada, a política define quais ações uma entidade principal especificado pode executar nesse atributo e em que condições. É necessário [especificar uma entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) em uma política baseada em recursos. As entidades principais podem incluir contas, usuários, perfis, usuários federados ou Serviços da AWS.

Para permitir o acesso entre contas, é possível especificar uma conta inteira ou as entidades do IAM em outra conta como a entidade principal em uma política baseada em recursos. Consulte mais informações em [Acesso a recursos entre contas no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) no *Guia do usuário do IAM*.

## Ações de políticas para o DynamoDB
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**Compatível com ações de políticas:** sim

Os administradores podem usar as políticas JSON da AWS para especificar quem tem acesso a quê. Ou seja, qual **entidade principal** pode executar **ações** em quais **recursos** e em que **condições**.

O elemento `Action` de uma política JSON descreve as ações que podem ser usadas para permitir ou negar acesso em uma política. Incluem ações em uma política para conceder permissões para executar a operação associada.



Para ver uma lista das ações do DynamoDB, consulte [Ações definidas pelo Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-actions-as-permissions) na *Referência de autorização do serviço*.

As ações de políticas no DynamoDB usam o seguinte prefixo antes da ação:

```
aws
```

Para especificar várias ações em uma única declaração, separe-as com vírgulas.

```
"Action": [
      "aws:action1",
      "aws:action2"
         ]
```





Para visualizar exemplos de políticas baseadas em identidade do DynamoDB, consulte [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md).

## Recursos de políticas para o DynamoDB
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**Compatível com recursos de políticas:** sim

Os administradores podem usar as políticas JSON da AWS para especificar quem tem acesso a quê. Ou seja, qual **entidade principal** pode executar **ações** em quais **recursos** e em que **condições**.

O elemento de política JSON `Resource` especifica o objeto ou os objetos aos quais a ação se aplica. Como prática recomendada, especifique um recurso usando seu [nome do recurso da Amazon (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Para ações que não oferecem compatibilidade com permissões em nível de recurso, use um curinga (\$1) para indicar que a instrução se aplica a todos os recursos.

```
"Resource": "*"
```

Para ver uma lista dos recursos do DynamoDB e os respectivos ARNs, consulte [Tipos de recursos definidos pelo Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-resources-for-iam-policies) na *Referência de autorização do serviço*. Para saber com quais ações você pode especificar o ARN de cada recurso, consulte [Ações definidas pelo Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-actions-as-permissions).





Para visualizar exemplos de políticas baseadas em identidade do DynamoDB, consulte [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md).

## Chaves de condição de políticas para o DynamoDB
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**Compatível com chaves de condição de política específicas de serviço:** sim

Os administradores podem usar as políticas JSON da AWS para especificar quem tem acesso a quê. Ou seja, qual **entidade principal** pode executar **ações** em quais **recursos** e em que **condições**.

O elemento `Condition` especifica quando as instruções são executadas com base em critérios definidos. É possível criar expressões condicionais que usem [agentes de condição](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html), como “igual a” ou “menor que”, para fazer a condição da política corresponder aos valores na solicitação. Para ver todas as chaves de condição globais da AWS, consulte [Chaves de contexto de condição globais da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) no *Guia do usuário do IAM*.

Para ver uma lista de chaves de condição do DynamoDB, consulte [Chaves de condição do Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-policy-keys) na *Referência de autorização do serviço*. Para saber com quais ações e recursos você pode usar a chave de condição, consulte [Ações definidas pelo Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-actions-as-permissions).

Para visualizar exemplos de políticas baseadas em identidade do DynamoDB, consulte [Exemplos de políticas baseadas em identidade para o Amazon DynamoDB](security_iam_id-based-policy-examples.md).

## Listas de controle de acesso (ACLs) no DynamoDB
<a name="security_iam_service-with-iam-acls"></a>

**Compatível com ACLs:** não 

As listas de controle de acesso (ACLs) controlam quais entidades principais (membros, usuários ou perfis da conta) têm permissões para acessar um recurso. As ACLs são semelhantes às políticas baseadas em recursos, embora não usem o formato de documento de política JSON.

## Controle de acesso por atributo (ABAC) com o DynamoDB
<a name="security_iam_service-with-iam-tags"></a>

**Compatível com ABAC (tags em políticas):** sim

O controle de acesso por atributo (ABAC) é uma estratégia de autorização que define permissões com base em atributos chamados de tags. Você pode anexar tags a entidades do IAM e recursos da AWS e, em seguida, projetar políticas de ABAC para permitir operações quando a tag da entidade principal corresponder à tag no recurso.

Para controlar o acesso baseado em tags, forneça informações sobre as tags no [elemento de condição](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) de uma política usando as `aws:ResourceTag/key-name`, `aws:RequestTag/key-name` ou chaves de condição `aws:TagKeys`.

Se um serviço for compatível com as três chaves de condição para cada tipo de recurso, o valor será **Sim** para o serviço. Se um serviço for compatível com as três chaves de condição somente para alguns tipos de recursos, o valor será **Parcial**

Para saber mais sobre o ABAC, consulte [Definir permissões com autorização do ABAC](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) no *Guia do usuário do IAM*. Para visualizar um tutorial com etapas para configurar o ABAC, consulte [Usar controle de acesso por atributo (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) no *Guia do usuário do IAM*.

## Usar credenciais temporárias com o DynamoDB
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**Compatível com credenciais temporárias:** sim

As credenciais temporárias dão acesso de curto prazo aos recursos da AWS e são criadas automaticamente quando você usa a federação ou alterna os perfis. A AWS recomenda a você gerar credenciais temporárias dinamicamente, em vez de usar chaves de acesso de longo prazo. Para ter mais informações, consulte [Credenciais de segurança temporárias no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) e [Serviços da Serviços da AWS que funcionam com o IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) no *Guia do usuário do IAM*.

## Permissões de entidade principal entre serviços para o DynamoDB
<a name="security_iam_service-with-iam-principal-permissions"></a>

**Compatibilidade com o recurso de encaminhamento de sessões de acesso (FAS):** sim

 As sessões de acesso direto (FAS) usam as permissões da entidade principal chamando um AWS service (Serviço da AWS), bem como o AWS service (Serviço da AWS) solicitante, para fazer solicitações a serviços subsequentes. Para obter detalhes da política ao fazer solicitações de FAS, consulte [Sessões de acesso direto](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html). 

## Perfis de serviço para o DynamoDB
<a name="security_iam_service-with-iam-roles-service"></a>

**Compatível com perfis de serviço:** sim

 O perfil de serviço é um [perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) que um serviço assume para executar ações em seu nome. Um administrador do IAM pode criar, modificar e excluir um perfil de serviço do IAM. Para saber mais, consulte [Criar um perfil para delegar permissões a um AWS service (Serviço da AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) no *Guia do Usuário do IAM*. 

**Atenção**  
Alterar as permissões de um perfil de serviço pode prejudicar a funcionalidade do DynamoDB. Edite perfis de serviço somente quando o DynamoDB fornecer orientação para isso.

## Perfis vinculados ao serviço para o DynamoDB
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**Compatibilidade com perfis vinculados a serviços:** sim

 Um perfil vinculado a serviço é um tipo de perfil de serviço vinculado a um AWS service (Serviço da AWS). O serviço pode presumir o perfil de executar uma ação em seu nome. Perfis vinculados ao serviço aparecem em sua Conta da AWS e são de propriedade do serviço. Um administrador do IAM pode visualizar, mas não editar as permissões para perfis vinculados ao serviço. 

Para obter detalhes sobre como criar ou gerenciar perfis vinculados a serviços, consulte [Serviços da AWS que funcionam com o IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html). Encontre um serviço na tabela que inclua um `Yes` na coluna **Perfil vinculado ao serviço**. Escolha o link **Sim** para visualizar a documentação do perfil vinculado a serviço desse serviço.

### Perfis vinculados ao serviço aceitos no DynamoDB
<a name="security_iam_service-with-iam-roles-service-linked-supported-by-dynamodb"></a>

Os perfis vinculados ao serviço a seguir são aceitos no DynamoDB.
+ O DynamoDB usa o perfil vinculado ao serviço **AWSServiceRoleForDynamoDBReplication** para replicação de tabelas globais nas Regiões da AWS. Consulte [Segurança de tabelas globais do DynamoDB](globaltables-security.md) para ter mais informações sobre o perfil vinculado ao serviço **AWSServiceRoleForDynamoDBReplication**.
+ O DynamoDB Accelerator (DAX) usa o perfil vinculado ao serviço **AWSServiceRoleForDAX** para configurar e manter um cluster do DAX. Consulte [Usar funções vinculadas ao serviço do IAM para o DAX](using-service-linked-roles.md) para ter mais informações sobre o perfil vinculado ao serviço **AWSServiceRoleForDAX**.

Além desses perfis vinculados ao serviço do DynamoDB, a solução usa o serviço Application Auto Scaling para gerenciar automaticamente as configurações de throughput nas tabelas do modo de capacidade provisionada. O serviço Application Auto Scaling usa o perfil vinculado ao serviço **AWSServiceRoleForApplicationAutoScaling\$1DynamoDBTable** para gerenciar as configurações de throughput em tabelas do DynamoDB que têm o ajuste de escala automático habilitado. Para ter mais informações, consulte [Service-linked roles for Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html).

# Exemplos de políticas baseadas em identidade para o Amazon DynamoDB
<a name="security_iam_id-based-policy-examples"></a>

Por padrão, usuários e perfis não têm permissão para criar ou modificar recursos do DynamoDB. Para conceder permissão aos usuários para executar ações nos recursos que eles precisam, um administrador do IAM pode criar políticas do IAM.

Para aprender a criar uma política baseada em identidade do IAM ao usar esses documentos de política em JSON de exemplo, consulte [Criar políticas do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html) no *Guia do usuário do IAM*.

Para obter detalhes sobre ações e tipos de recurso definidos pelo DynamoDB, incluindo o formato dos ARNs para cada um dos tipos de recurso, consulte [Ações, recursos e chaves de condição do Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html) na *Referência de autorização do serviço*.

**Topics**
+ [Práticas recomendadas de política](#security_iam_service-with-iam-policy-best-practices)
+ [Como usar o console do DynamoDB](#security_iam_id-based-policy-examples-console)
+ [Permitir que os usuários visualizem suas próprias permissões](#security_iam_id-based-policy-examples-view-own-permissions)
+ [Usar políticas baseadas em identidade com o Amazon DynamoDB](using-identity-based-policies.md)

## Práticas recomendadas de política
<a name="security_iam_service-with-iam-policy-best-practices"></a>

As políticas baseadas em identidade determinam se alguém pode criar, acessar ou excluir recursos do DynamoDB em sua conta. Essas ações podem incorrer em custos para sua Conta da AWS. Ao criar ou editar políticas baseadas em identidade, siga estas diretrizes e recomendações:
+ **Comece com as políticas gerenciadas pela AWS e avance para as permissões de privilégio mínimo**: para começar a conceder permissões a seus usuários e workloads, use as *políticas gerenciadas pela AWS*, que concedem permissões para muitos casos de uso comuns. Elas estão disponíveis em seus Conta da AWS. Recomendamos que você reduza ainda mais as permissões definindo políticas gerenciadas pelo cliente da AWS que são específicas para seus casos de uso. Para saber mais, consulte [Políticas gerenciadas pela AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) ou [Políticas gerenciadas pela AWS para funções de trabalho](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) no *Guia do usuário do IAM*.
+ **Aplique permissões de privilégio mínimo**: ao definir permissões com as políticas do IAM, conceda apenas as permissões necessárias para executar uma tarefa. Você faz isso definindo as ações que podem ser executadas em recursos específicos sob condições específicas, também conhecidas como *permissões de privilégio mínimo*. Para saber mais sobre como usar o IAM para aplicar permissões, consulte [Políticas e permissões no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) no *Guia do usuário do IAM*.
+ **Use condições nas políticas do IAM para restringir ainda mais o acesso**: é possível adicionar uma condição às políticas para limitar o acesso a ações e recursos. Por exemplo, é possível escrever uma condição de política para especificar que todas as solicitações devem ser enviadas usando SSL. Também pode usar condições para conceder acesso a ações de serviço, se elas forem usadas por meio de um AWS service (Serviço da AWS) específico, como o CloudFormation. Para saber mais, consulte [Elementos da política JSON do IAM: condição](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) no *Guia do usuário do IAM*.
+ **Use o IAM Access Analyzer para validar suas políticas do IAM a fim de garantir permissões seguras e funcionais**: o IAM Access Analyzer valida as políticas novas e existentes para que elas sigam a linguagem de política do IAM (JSON) e as práticas recomendadas do IAM. O IAM Access Analyzer oferece mais de cem verificações de política e recomendações práticas para ajudar a criar políticas seguras e funcionais. Para saber mais, consulte [Validação de políticas do IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) no *Guia do Usuário do IAM*.
+ **Exigir autenticação multifator (MFA)**: se houver um cenário que exija usuários do IAM ou um usuário raiz em sua Conta da AWS, ative a MFA para obter segurança adicional. Para exigir MFA quando as operações de API forem chamadas, adicione condições de MFA às suas políticas. Para saber mais, consulte [Configuração de acesso à API protegido por MFA](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) no *Guia do Usuário do IAM*.

Para saber mais sobre as práticas recomendadas do IAM, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

## Como usar o console do DynamoDB
<a name="security_iam_id-based-policy-examples-console"></a>

Para acessar o console da Amazon DynamoDB, você deve ter um conjunto mínimo de permissões. Essas permissões devem consentir que você liste e visualize detalhes sobre os recursos do DynamoDB em sua Conta da AWS. Caso crie uma política baseada em identidade mais restritiva que as permissões mínimas necessárias, o console não funcionará como pretendido para entidades (usuários ou perfis) com essa política.

Não é necessário conceder permissões mínimas do console para usuários que fazem chamadas somente à AWS CLI ou à API do AWS. Em vez disso, permita o acesso somente a ações que correspondam à operação de API que estiverem tentando executar.

Para garantir que usuários e perfis ainda possam usar o console do DynamoDB, anexe também a política `ConsoleAccess` ou `ReadOnly` do DynamoDB gerenciada pela AWS às entidades. Para obter informações, consulte [Adicionar permissões a um usuário](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) no *Guia do usuário do IAM*.

## Permitir que os usuários visualizem suas próprias permissões
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

Este exemplo mostra como criar uma política que permita que os usuários do IAM visualizem as políticas gerenciadas e em linha anexadas a sua identidade de usuário. Essa política inclui permissões para concluir essa ação no console ou de forma programática usando a AWS CLI ou a API da AWS.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# Usar políticas baseadas em identidade com o Amazon DynamoDB
<a name="using-identity-based-policies"></a>

Este tópico aborda o uso de políticas baseadas em identidade do AWS Identity and Access Management (IAM) com o Amazon DynamoDB e fornece exemplos. Os exemplos mostram como um administrador de conta pode anexar políticas de permissões a identidades do IAM (usuários, grupos e funções) e, dessa forma, conceder permissões para executar operações em recursos do Amazon DynamoDB.

As seções neste tópico abrangem o seguinte:
+ [Permissões do IAM necessárias para usar o console do Amazon DynamoDB](#console-permissions)
+ [Políticas do IAM (predefinidas) gerenciadas pela AWS para o Amazon DynamoDB](#access-policy-examples-aws-managed)
+ [Exemplos de política gerenciada pelo cliente](#access-policy-examples-for-sdk-cli)



Veja a seguir um exemplo de política de permissões.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DescribeQueryScanBooksTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:Query",
                "dynamodb:Scan"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:111122223333:table/Books"
        }
    ]
}
```

------

 A política anterior tem uma instrução que concede permissões para três ações do DynamoDB (`dynamodb:DescribeTable`, `dynamodb:Query` e `dynamodb:Scan`) em uma tabela na região da AWS `us-west-2` que pertence à conta da AWS especificada por `account-id`. O *Nome do recurso da Amazon (ARN)* no valor `Resource` especifica a tabela à qual as permissões se aplicam.

## Permissões do IAM necessárias para usar o console do Amazon DynamoDB
<a name="console-permissions"></a>

Para trabalhar com o console do DynamoDB, os usuários precisam ter um conjunto mínimo de permissões para utilizar os recursos do DynamoDB de suas contas da AWS. Além dessas permissões do DynamoDB, o console exige permissões:
+ Permissões do Amazon CloudWatch para exibir métricas e gráficos.
+ AWS Data PipelinePermissões do para exportar e importar dados do DynamoDB. 
+  AWS Identity and Access ManagementPermissões do para acessar funções necessárias para exportações e importações.
+ Permissões do Amazon Simple Notification Service para enviar notificações sempre que um alarme do CloudWatch é acionado.
+ AWS LambdaPermissões do para processar registros do DynamoDB Streams.

Se você criar uma política do IAM que seja mais restritiva que as permissões mínimas necessárias, o console não funcionará como pretendido para os usuários com essa política do IAM. Para garantir que esses usuários ainda consigam usar o console do DynamoDB, associe também a política gerenciada pela AWS `AmazonDynamoDBReadOnlyAccess` ao usuário, conforme descrito em [Políticas do IAM (predefinidas) gerenciadas pela AWS para o Amazon DynamoDB](#access-policy-examples-aws-managed).

Não é necessário conceder permissões mínimas do console para os usuários que estão fazendo chamadas somente com a AWS CLI ou com a API do Amazon DynamoDB.

**nota**  
 Se você fizer referência a um endpoint da VPC, também precisará autorizar a chamada à API DescribeEndpoints para a(s) entidades principal(is) do IAM solicitantes com a ação do IAM (dynamodb:DescribeEndpoints). Para obter mais informações, consulte [Política necessária para endpoints](inter-network-traffic-privacy.md#inter-network-traffic-DescribeEndpoints). 

## Políticas do IAM (predefinidas) gerenciadas pela AWS para o Amazon DynamoDB
<a name="access-policy-examples-aws-managed"></a>

AWS A aborda alguns casos de uso comuns fornecendo políticas autônomas do IAM que são criadas e administradas pela AWS. Essas políticas gerenciadas pela AWS concedem as permissões necessárias para casos de uso comuns. Assim, você não precisa investigar quais permissões são necessárias. Para obter mais informações, consulte [Políticas gerenciadas da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) no *Guia do usuário do IAM*.

As seguintes políticas gerenciadas pela AWS, que você pode anexar aos usuários da sua conta, são específicas do DynamoDB e agrupadas por cenário de caso de uso:
+ **AmazonDynamoDBReadOnlyAccess**: concede acesso somente leitura aos recursos do DynamoDB via Console de gerenciamento da AWS.
+ **AmazonDynamoDBFullAccess**: concede acesso total aos recursos do DynamoDB via Console de gerenciamento da AWS.

É possível analisar essas políticas de permissões gerenciadas pela AWS fazendo login no console do IAM e pesquisando políticas específicas.

**Importante**  
A prática recomendada é criar políticas personalizadas do IAM que concedam [privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) aos usuários, perfis ou grupos que precisam dele. 

## Exemplos de política gerenciada pelo cliente
<a name="access-policy-examples-for-sdk-cli"></a>

Nesta seção, você encontrará exemplos de políticas de usuário que concedem permissões para diversas ações do DynamoDB. Essas políticas funcionam quando você está usando os AWS SDKs ou a AWS CLI. Quando você usa o console, precisa conceder permissões adicionais que são específicas do console. Para obter mais informações, consulte [Permissões do IAM necessárias para usar o console do Amazon DynamoDB](#console-permissions).

**nota**  
Todos os exemplos de política a seguir usam uma das regiões da AWS e contêm IDs de conta e nomes de tabelas fictícios.

Exemplos:
+ [Política do IAM para conceder permissões a todas as ações do DynamoDB em uma tabela](grant-permissions-to-any-action-on-table.md)
+ [Política do IAM para conceder permissões somente leitura em itens de uma tabela do DynamoDB](read-only-permissions-on-table-items.md)
+ [Política do IAM para conceder acesso a uma tabela específica do DynamoDB e seus índices](iam-policy-specific-table-indexes.md)
+ [Política do IAM para ler, gravar, atualizar e excluir o acesso em uma tabela do DynamoDB](iam-policy-example-data-crud.md)
+ [Política do IAM para separar ambientes do DynamoDB na mesma conta da AWS](iam-policy-separate-environments.md)
+ [Política do IAM para evitar a compra de capacidade reservada do DynamoDB](iam-prevent-purchase-reserved-capacity.md)
+ [Política do IAM para conceder acesso de leitura somente para um fluxo do DynamoDB (não para a tabela)](iam-policy-read-stream-only.md)
+ [Política do IAM para permitir que uma função AWS Lambda acesse registros de fluxo do DynamoDB](iam-policy-example-lamda-process-dynamodb-streams.md)
+ [Política do IAM para acesso de leitura e gravação a um cluster do DynamoDB Accelerator (DAX)](iam-policy-example-read-write-dax-access.md)

 O *Guia do usuário do IAM* inclui [três exemplos adicionais do DynamoDB](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html):
+ [Amazon DynamoDB: permite acesso a uma tabela específica](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html)
+ [Amazon DynamoDB: permite acesso a colunas específicas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_columns.html)
+ [Amazon DynamoDB: permite acesso por linha ao DynamoDB com base em um ID do Amazon Cognito](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_rows.html)

# Política do IAM para conceder permissões a todas as ações do DynamoDB em uma tabela
<a name="grant-permissions-to-any-action-on-table"></a>

A política de permissões a seguir concede permissões para *todas* as ações do DynamoDB em uma tabela chamada `Books`. O ARN do recurso especificado em `Resource` identifica uma tabela em uma região da AWS específica. Se você substituir o nome da tabela `Books` no ARN do `Resource` por um caractere curinga (\$1), permitirá *todas* as ações do DynamoDB em *todas* as tabelas da conta. Considere cuidadosamente as possíveis implicações de segurança antes de usar um caractere curinga nesta ou em qualquer política do IAM.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}
```

------

**nota**  
Este é um exemplo de uso de um caractere curinga (\$1) para permitir *todas* as ações, incluindo administração, operações de dados, monitoramento e aquisição de capacidade reservada do DynamoDB. Em vez disso, é uma prática recomendada especificar explicitamente cada ação a ser concedida e apenas o que esse usuário, função ou grupo precisa.

# Política do IAM para conceder permissões somente leitura em itens de uma tabela do DynamoDB
<a name="read-only-permissions-on-table-items"></a>

A política de permissões a seguir concede permissões somente para as ações `GetItem`, `BatchGetItem`, `Scan`, `Query` e `ConditionCheckItem` do DynamoDB e, portanto, define o acesso somente leitura à tabela `Books`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}
```

------

# Política do IAM para conceder acesso a uma tabela específica do DynamoDB e seus índices
<a name="iam-policy-specific-table-indexes"></a>

A política a seguir concede permissões para ações de modificação de dados em uma tabela do DynamoDB chamada `Books` e todos os índices dessa tabela. Para obter mais informações sobre como os índices funcionam, consulte [Melhorar o acesso aos dados com índices secundários no DynamoDB](SecondaryIndexes.md).

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessTableAllIndexesOnBooks",
            "Effect": "Allow",
            "Action": [
              "dynamodb:PutItem",
              "dynamodb:UpdateItem",
              "dynamodb:DeleteItem",
              "dynamodb:BatchWriteItem",
              "dynamodb:GetItem",
              "dynamodb:BatchGetItem",
              "dynamodb:Scan",
              "dynamodb:Query",
              "dynamodb:ConditionCheckItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*"
            ]
        }
    ]
}
```

------

# Política do IAM para ler, gravar, atualizar e excluir o acesso em uma tabela do DynamoDB
<a name="iam-policy-example-data-crud"></a>

Use essa política se precisar permitir que a aplicação crie, leia, atualize e exclua dados em tabelas, índices e streams do Amazon DynamoDB. Substitua o nome da região da AWS, ID da conta e o nome da tabela ou caractere curinga (\$1), quando apropriado.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBIndexAndStreamAccess",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetShardIterator",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:ListStreams"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/stream/*"
            ]
        },
        {
            "Sid": "DynamoDBTableAccess",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:PutItem",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        },
        {
            "Sid": "DynamoDBDescribeLimitsAccess",
            "Effect": "Allow",
            "Action": "dynamodb:DescribeLimits",
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*"
            ]
        }
    ]
}
```

------

Para expandir essa política a fim de abranger todas as tabelas do DynamoDB em todas as regiões da AWS para esta conta, use um curinga (\$1) para a região e o nome da tabela. Por exemplo:

```
"Resource":[
                "arn:aws:dynamodb:*:123456789012:table/*",
                "arn:aws:dynamodb:*:123456789012:table/*/index/*"
                ]
```

# Política do IAM para separar ambientes do DynamoDB na mesma conta da AWS
<a name="iam-policy-separate-environments"></a>

Suponha que você tenha ambientes separados, onde cada ambiente mantém sua própria versão de uma tabela chamada `ProductCatalog`. Se você criar duas tabelas `ProductCatalog` na mesma conta da AWS, o trabalho realizado em um ambiente poderá afetar o outro ambiente devido à forma como as permissões são configuradas. Por exemplo, as cotas no número de operações simultâneas de ambiente de gerenciamento (como `CreateTable`) são definidas por cada conta da AWS.

Como resultado, cada ação em um ambiente reduz o número de operações disponíveis no outro ambiente. Há também um risco do código em seu ambiente de teste poder acessar acidentalmente tabelas no ambiente de produção.

**nota**  
Se preferir separar as workloads de produção e teste para ajudar a controlar o "raio de explosão" de um evento, a prática recomendada é criar contas da AWS separadas para workloads de teste e produção. Para obter mais informações, consulte [Gerenciamento e separação de contas da AWS](https://docs.aws.amazon.com//wellarchitected/latest/security-pillar/aws-account-management-and-separation.html).

Suponha também que você tenha dois desenvolvedores, Amit e Alice, que estão testando a tabela `ProductCatalog`. Em vez de cada desenvolvedor ter uma conta da AWS os desenvolvedores podem compartilhar a mesma conta de teste da AWS. Nesta conta de teste, você pode criar uma cópia da mesma tabela para cada desenvolvedor trabalhar, como `Alice_ProductCatalog` e `Amit_ProductCatalog`. Nesse caso, é possível criar os usuários Alice e Amit na conta da AWS que você criou para o ambiente de teste. Em seguida, você pode conceder permissões para esses usuários executarem ações do DynamoDB nas tabelas que eles possuem. 

Para conceder essas permissões de usuário do IAM, você pode executar uma das seguintes ações:
+ Crie uma política separada para cada usuário e, em seguida, anexe cada política ao seu usuário separadamente. Por exemplo, você pode anexar a política a seguir ao usuário Alice para permitir que ela acesse todas as ações do DynamoDB na tabela `Alice_ProductCatalog`: 

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllAPIActionsOnAliceTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:DescribeContributorInsights",
                "dynamodb:RestoreTableToPointInTime",
                "dynamodb:ListTagsOfResource",
                "dynamodb:CreateTableReplica",
                "dynamodb:UpdateContributorInsights",
                "dynamodb:CreateBackup",
                "dynamodb:DeleteTable",
                "dynamodb:UpdateTableReplicaAutoScaling",
                "dynamodb:UpdateContinuousBackups",
                "dynamodb:TagResource",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:DescribeContinuousBackups",
                "dynamodb:BatchGetItem",
                "dynamodb:UpdateTimeToLive",
                "dynamodb:BatchWriteItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:UntagResource",
                "dynamodb:PutItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteTableReplica",
                "dynamodb:DescribeTimeToLive",
                "dynamodb:RestoreTableFromBackup",
                "dynamodb:UpdateTable",
                "dynamodb:DescribeTableReplicaAutoScaling",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:DescribeLimits",
                "dynamodb:ListStreams"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog/*"
          }
      ]
  }
  ```

------

  Em seguida, você pode criar uma política semelhante com um recurso diferente (a tabela `Amit_ProductCatalog`) para o usuário Amit. 
+ Em vez de anexar políticas a usuários individuais, você pode usar variáveis de política do IAM para gravar uma única política e anexá-la a um grupo. Você precisa criar um grupo e, no caso deste exemplo, adicionar ambos os usuários Alice e Amit ao grupo. O exemplo a seguir concede permissões para executar todas as ações do DynamoDB na tabela `${aws:username}_ProductCatalog`. A variável de política `${aws:username}` é substituída pelo nome de usuário do solicitante quando a política é avaliada. Por exemplo, se Alice envia uma solicitação para adicionar um item, a ação é permitida apenas se Alice estiver adicionando itens à tabela `Alice_ProductCatalog`. 

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "ActionsOnUserSpecificTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog"
          },
          {
              "Sid": "AdditionalPrivileges",
              "Effect": "Allow",
              "Action": [
                  "dynamodb:ListTables",
                  "dynamodb:DescribeTable",
                  "dynamodb:DescribeContributorInsights"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/*"
          }
      ]
  }
  ```

------

**nota**  
Ao usar variáveis de política do IAM, você deve especificar explicitamente a versão `2012-10-17` da linguagem da política do IAM na política. A versão padrão da linguagem da política do IAM (`2008-10-17`) não é compatível com as variáveis da política. 

Em vez de identificar uma tabela específica como um recurso, conforme normalmente faria, você pode usar um caractere curinga (\$1) para conceder permissões em todas as tabelas em que o nome da tabela tem como prefixo o usuário que está fazendo a solicitação, conforme mostrado a seguir.

```
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"
```

# Política do IAM para evitar a compra de capacidade reservada do DynamoDB
<a name="iam-prevent-purchase-reserved-capacity"></a>

Com a capacidade reservada do Amazon DynamoDB, você paga uma taxa única antecipada e se compromete a pagar por um nível mínimo de utilização, com uma economia significativa, ao longo de um período. Você pode usar o Console de gerenciamento da AWS para visualizar e comprar capacidade reservada. No entanto, talvez você não queira que todos os usuários em sua organização possam adquirir capacidade reservada. Para obter mais informações sobre capacidade reservada, consulte [Preços do Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing).

O DynamoDB fornece as seguintes operações de API para controlar o acesso ao gerenciamento de capacidade reservada:
+ `dynamodb:DescribeReservedCapacity`: retorna as compras de capacidade reservada que estão em vigor no momento.
+ `dynamodb:DescribeReservedCapacityOfferings` – retorna detalhes sobre os planos de capacidade reservada que são oferecidos no momento pela AWS.
+ `dynamodb:PurchaseReservedCapacityOfferings`: executa uma compra real de capacidade reservada.

O Console de gerenciamento da AWS usa essas ações da API para exibir as informações de capacidade reservada e para fazer compras. Você não pode chamar essas operações de um programa de aplicação, pois elas podem ser acessadas somente pelo console. No entanto, é possível permitir ou negar o acesso a essas operações em uma política de permissões do IAM.

A política a seguir permite que os usuários visualizem ofertas de capacidade reservada e ofertas atuais usando o Console de gerenciamento da AWS, mas novas compras são negadas.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowReservedCapacityDescriptions",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeReservedCapacity",
                "dynamodb:DescribeReservedCapacityOfferings"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        },
        {
            "Sid": "DenyReservedCapacityPurchases",
            "Effect": "Deny",
            "Action": "dynamodb:PurchaseReservedCapacityOfferings",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        }
    ]
}
```

------

Observe que esta política usa o caractere curinga (\$1) para permitir permissões de descrição para todos, e para negar a compra de capacidade reservada do DynamoDB para todos.

# Política do IAM para conceder acesso de leitura somente para um fluxo do DynamoDB (não para a tabela)
<a name="iam-policy-read-stream-only"></a>

Quando você ativa o DynamoDB Streams em uma tabela, informações são capturadas sobre cada modificação em itens de dados na tabela. Para obter mais informações, consulte [Capturar dados de alterações para o DynamoDB Streams](Streams.md).

Em alguns casos, talvez você queira evitar que uma aplicação leia dados de uma tabela do DynamoDB, mas ainda permitir o acesso aos fluxos dessa tabela. Por exemplo, você pode configurar o AWS Lambda para sondar um fluxo e invocar uma função do Lambda quando as atualizações de itens forem detectadas e, em seguida, executar processamento adicional.

As ações a seguir estão disponíveis para controlar o acesso a fluxos do DynamoDB:
+ `dynamodb:DescribeStream`
+ `dynamodb:GetRecords`
+ `dynamodb:GetShardIterator`
+ `dynamodb:ListStreams`

O exemplo de política a seguir concede aos usuários permissões para acessar os streams em uma tabela chamada `GameScores`. O último caractere curinga (\$1) no ARN corresponde a qualquer ID de fluxo associado a essa tabela.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessGameScoresStreamOnly",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/stream/*"
        }
    ]
}
```

------

Observe que essa política concede acesso aos fluxos da tabela `GameScores`, mas não à tabela em si.

# Política do IAM para permitir que uma função AWS Lambda acesse registros de fluxo do DynamoDB
<a name="iam-policy-example-lamda-process-dynamodb-streams"></a>

Para que determinadas ações sejam executadas com base em novos eventos em um stream do DynamoDB, é possível escrever uma função do AWS Lambda que seja acionada por esses eventos. Uma função do Lambda como essa precisa de permissões para ler dados de um fluxo do DynamoDB. Para obter mais informações sobre como usar o Lambda com DynamoDB Streams, consulte [DynamoDB Streams e acionadores do AWS Lambda](Streams.Lambda.md).

Para conceder permissões ao Lambda, use a política de permissões que está associada ao perfil do IAM do Lambda (também conhecida como função de execução). Especifique essa política ao criar a função do Lambda.

Por exemplo, você pode associar a política de permissões a seguir a uma função de execução para conceder permissões ao Lambda para realizar as ações do DynamoDB Streams listadas.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "APIAccessForDynamoDBStreams",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/stream/*"
        }
    ]
}
```

------

Para obter mais informações, consulte [Permissões do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) no *Guia do desenvolvedor do AWS Lambda*.

# Política do IAM para acesso de leitura e gravação a um cluster do DynamoDB Accelerator (DAX)
<a name="iam-policy-example-read-write-dax-access"></a>

A política a seguir permite o acesso para leitura, gravação, atualização e exclusão em um cluster do DynamoDB Accelerator (DAX), mas não na tabela do DynamoDB associada. Para usar essa política, substitua o nome da região da AWS, o ID da conta e o nome do cluster do DAX.

**nota**  
Essa política dá acesso ao cluster do DAX, mas não à tabela associada do DynamoDB. Seu cluster do DAX deve dispor da política correta para executar por você essas mesmas operações na tabela do DynamoDB. 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AmazonDynamoDBDAXDataOperations",
            "Effect": "Allow",
            "Action": [
                "dax:GetItem",
                "dax:PutItem",
                "dax:ConditionCheckItem",
                "dax:BatchGetItem",
                "dax:BatchWriteItem",
                "dax:DeleteItem",
                "dax:Query",
                "dax:UpdateItem",
                "dax:Scan"
            ],
            "Resource": "arn:aws:dax:eu-west-1:123456789012:cache/MyDAXCluster"
        }
    ]
}
```

------

Para expandir essa política de modo a dar ao DAX acesso a todas as regiões da AWS de uma conta, use um caractere curinga (\$1) para o nome da região.

```
"Resource": "arn:aws:dax:*:123456789012:cache/MyDAXCluster"
```







# Solução de problemas de identidade e acesso no Amazon DynamoDB
<a name="security_iam_troubleshoot"></a>

Use as informações a seguir para ajudar a diagnosticar e corrigir problemas comuns que podem ser encontrados ao trabalhar com o DynamoDB e o IAM.

**Topics**
+ [Não tenho autorização para executar uma ação no DynamoDB](#security_iam_troubleshoot-no-permissions)
+ [Não estou autorizado a executar iam:PassRole](#security_iam_troubleshoot-passrole)
+ [Quero permitir que as pessoas fora da minha Conta da AWS acessem meus recursos do DynamoDB](#security_iam_troubleshoot-cross-account-access)

## Não tenho autorização para executar uma ação no DynamoDB
<a name="security_iam_troubleshoot-no-permissions"></a>

Se o Console de gerenciamento da AWS informar que você não foi autorizado a executar uma ação, você deve entrar em contato com o administrador para obter assistência. O administrador é a pessoa que forneceu o seu nome de usuário e senha.

O erro do exemplo a seguir ocorre quando o usuário `mateojackson` tenta usar o console para visualizar detalhes sobre um recurso do `my-example-widget` fictício, mas não tem as permissões fictícias do `aws:GetWidget`.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: aws:GetWidget on resource: my-example-widget
```

Neste caso, Mateo pede ao administrador para atualizar suas políticas para permitir a ele o acesso ao recurso `my-example-widget` usando a ação `aws:GetWidget`.

## Não estou autorizado a executar iam:PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Se você receber uma mensagem de erro informando que não tem autorização para executar a ação `iam:PassRole`, você precisará atualizar as políticas para poder passar um perfil para o DynamoDB.

Alguns Serviços da AWS permitem que você passe um perfil existente para o serviço, em vez de criar um perfil de serviço ou perfil vinculado ao serviço. Para fazer isso, é preciso ter permissões para passar o perfil para o serviço.

O exemplo de erro a seguir ocorre quando uma usuária do IAM chamada `marymajor` tenta usar o console para executar uma ação no DynamoDB. No entanto, a ação exige que o serviço tenha permissões concedidas por um perfil de serviço. Mary não tem permissões para passar o perfil para o serviço.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

Nesse caso, as políticas de Mary devem ser atualizadas para permitir que ela realize a ação `iam:PassRole`.

Se você precisar de ajuda, entre em contato com seu administrador AWS. Seu administrador é a pessoa que forneceu suas credenciais de login.

## Quero permitir que as pessoas fora da minha Conta da AWS acessem meus recursos do DynamoDB
<a name="security_iam_troubleshoot-cross-account-access"></a>

É possível criar um perfil que os usuários de outras contas ou pessoas fora da organização podem usar para acessar seus recursos. É possível especificar quem é confiável para assumir o perfil. Para serviços que oferecem compatibilidade com políticas baseadas em recursos ou listas de controle de acesso (ACLs), é possível usar essas políticas para conceder às pessoas acesso aos seus recursos.

Para saber mais, consulte:
+ Para saber se o DynamoDB oferece compatibilidade para esses recursos, consulte [Como o Amazon DynamoDB funciona com o IAM](security_iam_service-with-iam.md).
+ Para saber como conceder acesso a seus recursos em todas as Contas da AWS pertencentes a você, consulte [Fornecimento de acesso a um usuário do IAM em outra Conta da AWS pertencente a você](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) no *Guia de usuário do IAM*.
+ Para saber como conceder acesso a seus recursos para Contas da AWS de terceiros, consulte [Fornecimento de acesso a Contas da AWS pertencentes a terceiros](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) no *Guia do usuário do IAM*.
+ Para saber como conceder acesso por meio da federação de identidades, consulte [Conceder acesso a usuários autenticados externamente (federação de identidades)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) no *Guia do usuário do IAM*.
+ Para saber a diferença entre o uso de perfis e políticas baseadas em recurso para acesso entre contas, consulte [Acesso a recursos entre contas no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) no *Guia do usuário do IAM*.

# Política do IAM para evitar a compra de capacidade reservada do DynamoDB
<a name="iam-policy-prevent-purchase-reserved-capacity"></a>

Com a capacidade reservada do Amazon DynamoDB, você paga uma taxa única antecipada e se compromete a pagar por um nível mínimo de utilização, com uma economia significativa, ao longo de um período. Você pode usar o Console de gerenciamento da AWS para visualizar e comprar capacidade reservada. No entanto, talvez você não queira que todos os usuários em sua organização possam adquirir capacidade reservada. Para obter mais informações sobre capacidade reservada, consulte [Preços do Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing).

O DynamoDB fornece as seguintes operações de API para controlar o acesso ao gerenciamento de capacidade reservada:
+ `dynamodb:DescribeReservedCapacity`: retorna as compras de capacidade reservada que estão em vigor no momento.
+ `dynamodb:DescribeReservedCapacityOfferings` – retorna detalhes sobre os planos de capacidade reservada que são oferecidos no momento pela AWS.
+ `dynamodb:PurchaseReservedCapacityOfferings`: executa uma compra real de capacidade reservada.

O Console de gerenciamento da AWS usa essas ações da API para exibir as informações de capacidade reservada e para fazer compras. Você não pode chamar essas operações de um programa de aplicação, pois elas podem ser acessadas somente pelo console. No entanto, é possível permitir ou negar o acesso a essas operações em uma política de permissões do IAM.

A política a seguir permite que os usuários visualizem ofertas de capacidade reservada e ofertas atuais usando o Console de gerenciamento da AWS, mas novas compras são negadas.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowReservedCapacityDescriptions",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeReservedCapacity",
                "dynamodb:DescribeReservedCapacityOfferings"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        },
        {
            "Sid": "DenyReservedCapacityPurchases",
            "Effect": "Deny",
            "Action": "dynamodb:PurchaseReservedCapacityOfferings",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        }
    ]
}
```

------

Observe que esta política usa o caractere curinga (\$1) para permitir permissões de descrição para todos, e para negar a compra de capacidade reservada do DynamoDB para todos.

# Uso de condições de política do IAM para controle de acesso refinado
<a name="specifying-conditions"></a>

Ao conceder permissões no DynamoDB, você pode especificar as condições que determinam como uma política de permissões entra em vigor. 

## Visão geral
<a name="FGAC_DDB.Overview"></a>

No DynamoDB, você tem a opção de especificar condições ao conceder permissões usando uma política do IAM (consulte [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md)). Por exemplo, você pode:
+ Conceder permissões a fim de permitir acesso somente leitura aos usuários para determinados itens e atributos em uma tabela ou um índice secundário.
+ Conceder permissões para permitir somente acesso de gravação aos usuários para determinados atributos em uma tabela com base na identidade desse usuário.

No DynamoDB, você pode especificar as condições em uma política do IAM usando chaves de condição, como ilustrado no caso de uso na seção a seguir.

### Caso de uso de permissões
<a name="FGAC_DDB.OverviewUseCase"></a>

Além de controlar o acesso a ações de API do DynamoDB, você também pode controlar o acesso a itens de dados e atributos individuais. Por exemplo, você pode fazer o seguinte:
+ Conceder permissões em uma tabela, mas restringir o acesso a itens específicos dessa tabela com base em determinados valores de chave primária. Um exemplo pode ser uma aplicação de rede social para jogos, onde todos os dados de jogos salvos dos usuários são armazenados em uma única tabela, mas nenhum usuário pode acessar itens de dados que não possui, como mostrado na ilustração a seguir:  
![\[Um caso de uso que concede acesso em nível de tabela a um usuário, mas restringe o acesso a itens de dados específicos.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/info-hiding-horizontal.png)
+ Oculte informações para que apenas um subconjunto de atributos fique visível para o usuário. Um exemplo pode ser uma aplicação que exibe os dados de voo para aeroportos próximos, com base na localização do usuário. Nomes de companhias aéreas e horas de partida, além de números de voo, são exibidos. No entanto, atributos como nomes de piloto ou número de passageiros são ocultos, como mostrado na ilustração a seguir:   
![\[Um caso de uso que exibe apenas um subconjunto de dados para os usuários, mas oculta determinados atributos dos dados.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/info-hiding-vertical.png)

Para implementar esse tipo de controle de acesso refinado, grave uma política de permissões do IAM que especifica condições para acessar as credenciais de segurança e as permissões associadas. Em seguida, aplique a política aos usuários, grupos ou funções do que você criar usando o console do IAM. Sua política do IAM pode restringir o acesso a cada item de uma tabela, aos atributos desses itens ou a ambos ao mesmo tempo.

Se preferir, você pode usar federação de identidades na web para controlar o acesso dos usuários que serão autenticados por meio do Login with Amazon, Facebook ou Google. Para obter mais informações, consulte [Usar federação de identidades na Web](WIF.md).

Use o elemento `Condition` do IAM para implementar uma política de controle de acesso refinada. Ao adicionar um elemento `Condition` a uma política de permissões, você pode permitir ou negar o acesso a itens e atributos em tabelas e índices do DynamoDB com base em seus requisitos comerciais específicos. 

O vídeo a seguir explica o controle de acesso refinado no DynamoDB usando condições de política do IAM.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/LbEmo_yulb0?si=VTSlNHVocAEYwhJi/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/LbEmo_yulb0?si=VTSlNHVocAEYwhJi)


## Como funciona o controle de acesso refinado no DynamoDB
<a name="FGAC_DDB.UnderstandingFineGrainedAccess"></a>

O controle de acesso refinado no DynamoDB permite criar limites de permissões precisos em vários níveis:

1. **Controle de acesso em nível de item:** permita que os usuários acessem somente itens que contenham valores de chave específicos, normalmente correspondentes à respectiva identidade ou escopo da permissão.

1. **Controle de acesso em nível de atributo:** limite quais atributos (colunas) os usuários podem visualizar ou modificar para que possa proteger informações sensíveis e, ao mesmo tempo, permitir acesso a dados não sensíveis nos mesmos itens.

1. **Controles específicos à operação:** aplique regras de permissão diferentes com base no tipo de operação que está sendo executada.

Esses controles são implementados por meio de políticas do IAM usando chaves de condição específicas do DynamoDB.

## Especificar condições: usar chaves de condição
<a name="FGAC_DDB.ConditionKeys"></a>

A AWS fornece um conjunto de chaves de condição predefinidas (chaves de condição no âmbito da AWS) para todos os serviços da AWS que oferecem suporte ao IAM para controle de acesso. Por exemplo, você pode usar a condição de chave `aws:SourceIp` para verificar o endereço IP do solicitante antes de permitir que uma ação seja executada. Para obter mais informações e uma lista das chaves no âmbito da AWS, consulte [Chaves disponíveis para condições](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys) no Guia do usuário do IAM.

A seguir são mostradas as chaves de condição específicas do serviço DynamoDB que se aplicam ao DynamoDB.

**`dynamodb:LeadingKeys`**  
Representa o primeiro atributo de chave de uma tabela – em outras palavras, a chave de partição. O nome da chave `LeadingKeys` é no plural, mesmo se ela for usada com ações de um único item. Além disso, você deve usar o modificador `ForAllValues` ao utilizar `LeadingKeys` em uma condição.

**`dynamodb:Select`**  
Representa o parâmetro `Select` de uma solicitação. `Select` pode ter qualquer um dos seguintes valores:  
+ `ALL_ATTRIBUTES`
+ `ALL_PROJECTED_ATTRIBUTES`
+ `SPECIFIC_ATTRIBUTES`
+ `COUNT`
Embora frequentemente associada a operações de consulta e verificação, essa chave de condição, que se aplica a todas as operações do DynamoDB que exibem atributos do item, é essencial para controlar o acesso a atributos em todas as ações de API. Usar StringEqualsIfExists ou restrições semelhantes nessa chave de condição aplicará restrições às operações nas quais essa chave de condição se aplica, enquanto a ignorará nas operações nas quais ela não se aplica.

**`dynamodb:Attributes`**  
Representa uma lista dos atributos de *nível superior* acessados por uma solicitação. Um atributo de nível superior será acessado por uma solicitação se ele, ou qualquer atributo aninhado que ele contenha, for especificado nos parâmetros da solicitação. Por exemplo, uma solicitação `GetItem` que especifique um `ProjectionExpression` de `"Name, Address.City"`, a lista `dynamodb:Attributes` incluiria “Nome” e “Endereço”. Se o parâmetro `Attributes` for enumerado em uma política de controle de acesso refinada, pense também em restringir os parâmetros `ReturnValues` e `Select` a fim de garantir acesso restrito a atributos especificados em várias ações de API, como `GetItem`, `Query` e `Scan`.   
Essa condição é avaliada somente nos atributos especificados na solicitação (como em uma ProjectionExpression), não nos atributos da resposta. Se nenhuma ProjectionExpression for fornecida na solicitação, todos os atributos serão exibidos independentemente de quaisquer restrições de atributo na política. Consulte a seção “Garantir que as restrições baseadas em atributos sejam aplicadas” abaixo para ver detalhes sobre como proteger adequadamente o acesso a atributos.

**`dynamodb:ReturnValues`**  
Representa o parâmetro `ReturnValues` de uma solicitação. Dependendo da ação de API, `ReturnValues` pode ser um dos seguintes valores:   
+ `ALL_OLD`
+ `UPDATED_OLD`
+ `ALL_NEW`
+ `UPDATED_NEW`
+ `NONE`

**`dynamodb:ReturnConsumedCapacity`**  
Representa o parâmetro `ReturnConsumedCapacity` de uma solicitação. `ReturnConsumedCapacity` pode ter um dos seguintes valores:  
+ `TOTAL`
+ `NONE`

**`dynamodb:FirstPartitionKeyValues`**  
Representa o primeiro atributo de chave de uma tabela, em outras palavras, a primeira chave de partição. O nome da chave `FirstPartitionKeyValues` é no plural, mesmo se ela for usada com ações de um único item. Além disso, você deve usar o modificador `ForAllValues` ao utilizar `FirstPartitionKeyValues` em uma condição. `FirstPartitionKeyValues` e `LeadingKeys` são intercambiáveis.

**`dynamodb:SecondPartitionKeyValues`**  
Similar a `dynamodb:FirstPartitionKeyValues`. Representa a segunda chave de partição dos recursos. O nome da chave `SecondPartitionKeyValues` é no plural, mesmo se ela for usada com ações de um único item.

**`dynamodb:ThirdPartitionKeyValues`**  
Similar a `dynamodb:FirstPartitionKeyValues`. Representa a terceira chave de partição dos recursos. O nome da chave `ThirdPartitionKeyValues` é no plural, mesmo se ela for usada com ações de um único item.

**`dynamodb:FourthPartitionKeyValues`**  
Similar a `dynamodb:FirstPartitionKeyValues`. Representa a quarta chave de partição dos recursos. O nome da chave `FourthPartitionKeyValues` é no plural, mesmo se ela for usada com ações de um único item.

### Garantir que as restrições baseadas em atributos sejam aplicadas
<a name="FGAC_DDB.EnsuringAttributeRestrictions"></a>

Ao usar condições baseadas em atributos para restringir o acesso a atributos específicos, é importante entender como essas condições são avaliadas:
+ **As condições dos atributos são avaliadas somente nos atributos especificados na solicitação**, não nos atributos da resposta.
+ **Para operações de leitura sem uma ProjectionExpression** (GetItem, Query, Scan etc.), todos os atributos serão exibidos independentemente das restrições de atributo em sua política. Para evitar essa possível exposição de dados sensíveis, implemente condições de atributo (`dynamodb:Attributes`) e solicite uma condição que exija atributos específicos (`dynamodb:Select`).
+ **Para operações de gravação** (PutItem, UpdateItem, DeleteItem), o parâmetro ReturnValues pode exibir itens completos, possivelmente expondo atributos restritos mesmo quando a própria operação de gravação está em conformidade com a política em questão. Para evitar essa exposição, implemente condições de atributo (`dynamodb:Attributes`) e restrições em ReturnValues (`dynamodb:ReturnValues`) em sua política.

### Limite de acesso de usuário
<a name="FGAC_DDB.LimitingAccess"></a>

Muitas políticas de permissões do IAM permitem que os usuários acessem esses itens em uma tabela, na qual o valor de chave de partição coincide com o identificador do usuário. Por exemplo, o aplicativo de jogo anterior limita o acesso dessa forma, para que os usuários possam acessar somente os dados do jogo que estão associados ao ID de usuário deles. As variáveis de substituição do IAM `${www.amazon.com:user_id}`, `${graph.facebook.com:id}` e `${accounts.google.com:sub}` contêm identificadores do usuário para o Login with Amazon, no Facebook e no Google. Para saber como um aplicativo se conecta a um desses provedores de identidade e obtém esses identificadores, consulte [Usar federação de identidades na Web](WIF.md).

**Importante**  
Não é possível usar o controle de acesso refinado para restringir a replicação de tabelas globais. A aplicação de condições de política para controle de acesso refinado a [entidades principais do serviço ou perfis vinculados ao serviço](globaltables-security.md) do DynamoDB usados para replicação de tabelas globais pode interromper a replicação em uma tabela global. 

**nota**  
Cada um dos exemplos na seção a seguir define a cláusula `Effect` como `Allow` e especifica apenas as ações, os recursos e os parâmetros permitidos. O acesso é permitido apenas para o que está listado explicitamente na política do IAM.  
Em alguns casos, é possível reescrever essas políticas para que elas sejam baseadas em negação (ou seja, definindo a cláusula `Effect` como `Deny` e invertendo toda a lógica na política). No entanto, recomendamos que você evite usar políticas baseadas em negação com o DynamoDB porque é difícil escrevê-las corretamente em comparação às políticas baseadas em permissão. Além disso, futuras alterações na API do DynamoDB (ou alterações nas entradas existentes da API) podem tornar ineficaz uma política baseada em negação.

### Políticas de exemplo: usar condições para controle de acesso refinado
<a name="FGAC_DDB.Examples"></a>

Esta seção mostra várias políticas para a implementação de um controle de acesso refinado em tabelas e índices do DynamoDB.

**nota**  
Todos os exemplos usam a Região us-west-2 e contêm IDs de conta fictícios.

#### Exemplo 1. Controle de acesso básico baseado em chave de partição com restrições de atributo
<a name="FGAC_DDB.Examples.BasicPartitionKeyAccess"></a>

Como um exemplo, considere um aplicativo de jogos móveis que permite que os jogadores selecionem e joguem uma variedade de jogos diferentes. A aplicação usa uma tabela do DynamoDB chamada `GameScores` para manter o controle das pontuações máximas e outros dados do usuário. Cada item na tabela é exclusivamente identificado por um ID de usuário e o nome do jogo que o usuário jogou. A tabela `GameScores` tem uma chave primária que consiste em uma chave de partição (`UserId`) e a chave de classificação (`GameTitle`). Os usuários só têm acesso aos dados de jogos associados ao seu ID de usuário. Um usuário que deseja jogar um jogo deve pertencer a um perfil do IAM chamada `GameRole`, a qual tem uma política de segurança anexada a ela.

Para gerenciar permissões de usuário neste aplicativo, grave uma política de permissões, como a seguinte:

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowAccessToOnlyItemsMatchingUserID",
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query",
            "dynamodb:PutItem",
            "dynamodb:UpdateItem",
            "dynamodb:DeleteItem",
            "dynamodb:BatchWriteItem"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${www.amazon.com:user_id}"
               ],
               "dynamodb:Attributes":[
                  "UserId",
                  "GameTitle",
                  "Wins",
                  "Losses",
                  "TopScore",
                  "TopScoreDateTime"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

Além de conceder permissões para ações específicas do DynamoDB (elemento `Action`) na tabela `GameScores` (elemento `Resource`), o elemento `Condition`usa as chaves de condição a seguir específicas do DynamoDB que limitam as permissões, da seguinte forma:
+ `dynamodb:LeadingKeys`: esta chave de condição permite que os usuários acessem apenas os itens nos quais o valor de chave de partição coincide com seu ID de usuário. Este ID, `${www.amazon.com:user_id}`, é uma variável de substituição. Para obter mais informações sobre variáveis de substituição, consulte [Usar federação de identidades na Web](WIF.md).
+ `dynamodb:Attributes`: esta chave de condição limita o acesso aos atributos especificados para que apenas as ações listadas na política de permissões possam retornar valores para esses atributos. Além disso, a cláusula `StringEqualsIfExists` garante que o aplicativo sempre deve fornecer uma lista de atributos específicos nos quais atuar e que o aplicativo não pode solicitar todos os atributos.

Quando uma política do IAM é avaliada, o resultado é sempre verdadeiro (o acesso é permitido) ou falso (o acesso é negado). Se qualquer parte do elemento `Condition` é falsa, toda a política é avaliada como falsa e o acesso é negado.

**Importante**  
Caso você use `dynamodb:Attributes`, deve especificar os nomes de todos os atributos de chave de índice e chave primária da tabela, além de quaisquer índices secundários que estejam listados na política. Caso contrário, o DynamoDB não poderá usar esses atributos de chave para executar a ação solicitada.

Os documentos de política do IAM podem conter apenas os seguintes caracteres Unicode: guia horizontal (U\$10009), linefeeds (U\$1000A), retorno de carro (U\$1000D) e caracteres no intervalo U\$10020 a U\$100FF.

#### Exemplo 2: conceder permissões que limitam o acesso a itens com um valor específico de chave de partição
<a name="FGAC_DDB.Examples.PartitionKeyValue"></a>

A política de permissões a seguir concede permissões que permitem um conjunto de ações do DynamoDB na tabela `GamesScore`. Ela usa a chave de condição `dynamodb:LeadingKeys` para limitar as ações do usuário apenas aos itens cujo valor da chave de partição `UserID` coincida com o ID do usuário único do Login with Amazon desse aplicativo.

**Importante**  
A lista de ações não inclui permissões para `Scan` porque `Scan` retorna todos os itens, independentemente das principais chaves.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"FullAccessToUserItems",
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query",
            "dynamodb:PutItem",
            "dynamodb:UpdateItem",
            "dynamodb:DeleteItem",
            "dynamodb:BatchWriteItem"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${www.amazon.com:user_id}"
               ]
            }
         }
      }
   ]
}
```

------

**nota**  
Ao usar variáveis de política, e necessário especificar explicitamente a versão 2012-10-17 na política. A versão padrão da linguagem da política de acesso, 2008-10-17, não oferece suporte a variáveis de política.

Para implementar o acesso somente leitura, você pode remover as ações que podem modificar os dados. Na política a seguir, somente as ações que fornecem acesso somente leitura são incluídas na condição.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"ReadOnlyAccessToUserItems",
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${www.amazon.com:user_id}"
               ]
            }
         }
      }
   ]
}
```

------

**Importante**  
Caso você use `dynamodb:Attributes`, deve especificar os nomes de todos os atributos de chave de índice e chave primária da tabela, além de quaisquer índices secundários que estejam listados na política. Caso contrário, o DynamoDB não poderá usar esses atributos de chave para executar a ação solicitada.

#### Exemplo 3: conceder permissões que limitam o acesso a determinados atributos em uma tabela
<a name="FGAC_DDB.Examples.SpecificAttributes"></a>

A política de permissões a seguir permite o acesso apenas a dois atributos em uma tabela, adicionando a chave de condição `dynamodb:Attributes`. Esses atributos podem ser lidos, gravados ou avaliados em um filtro de verificação ou gravação condicional.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"LimitAccessToSpecificAttributes",
         "Effect":"Allow",
         "Action":[
            "dynamodb:UpdateItem",
            "dynamodb:GetItem",
            "dynamodb:Query",
            "dynamodb:BatchGetItem",
            "dynamodb:Scan"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:Attributes":[
                  "UserId",
                  "TopScore"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES",
               "dynamodb:ReturnValues":[
                  "NONE",
                  "UPDATED_OLD",
                  "UPDATED_NEW"
               ]
            }
         }
      }
   ]
}
```

------

**nota**  
A política usa uma abordagem de lista de permissões, o que permite o acesso a um conjunto nomeado de atributos. Mas você pode escrever uma política equivalente que nega o acesso a outros atributos. Não recomendamos essa abordagem com lista de proibições. Os usuários podem determinar os nomes desses atributos negados seguindo o princípio do privilégio mínimo, conforme explicado na Wikipedia em http://en.wikipedia.org/wiki/Principle\$1of\$1least\$1privilege e usar uma abordagem de lista de permissões para enumerar todos os valores permitidos, em vez de especificar os atributos negados.

Essa política não permite `PutItem`, `DeleteItem` ou `BatchWriteItem`. Essas ações sempre substituem o item anterior inteiro, o que permitira aos usuários excluir os valores anteriores que eles não tem permissão para acessar.

A cláusula `StringEqualsIfExists` na política de permissões garante o seguinte:
+ Se o usuário especifica o parâmetro `Select`, seu valor deve ser `SPECIFIC_ATTRIBUTES`. Essa exigência impede que a ação da API retorne quaisquer atributos que não sejam permitidos, tal como de uma projeção do índice.
+ Se o usuário especifica o parâmetro `ReturnValues`, então seu valor deve ser `NONE`, `UPDATED_OLD` ou `UPDATED_NEW`. Isso é necessário porque a ação `UpdateItem` também executa operações de leitura implícitas para verificar se um item existe antes de substituí-lo, e de forma que os valores de atributo anteriores possam ser retornados, se solicitado. Restringir `ReturnValues` dessa forma garante que os usuários possam apenas ler ou gravar atributos permitidos.
+ A cláusula `StringEqualsIfExists` garante que apenas um desses parâmetros – `Select` ou `ReturnValues` – pode ser usado por solicitação, no contexto das ações permitidas.

Veja a seguir algumas variações desta política:
+ Para permitir apenas as ações de leitura, você pode remover `UpdateItem` da lista de ações permitidas. Como nenhuma das ações restantes aceitam `ReturnValues`, você pode remover `ReturnValues` da condição. Também é possível alterar `StringEqualsIfExists` para `StringEquals`, pois o parâmetro `Select` sempre tem um valor (`ALL_ATTRIBUTES`, a menos que especificado de outra forma).
+ Para permitir apenas as ações de gravação, você pode remover tudo menos `UpdateItem` da lista de ações permitidas. Como `UpdateItem` não usa o parâmetro `Select`, você pode remover `Select` da condição. Você também tem que alterar `StringEqualsIfExists` para `StringEquals` porque o parâmetro `ReturnValues` sempre tem um valor (`NONE`, a menos que especificado de outra forma).
+ Para permitir todos os atributos cujo nome corresponde a um padrão, use `StringLike` em vez de `StringEquals`, e use um caractere curinga de correspondência de padrão multicaractere (\$1).

#### Exemplo 4: conceder permissões para evitar atualizações em determinados atributos
<a name="FGAC_DDB.Examples.PreventUpdates"></a>

A política de permissões a seguir limita o acesso do usuário à atualização apenas dos atributos identificados pela chave de condição `dynamodb:Attributes`. A condição `StringNotLike` impede que um aplicativo atualize os atributos especificados usando a condição de chave `dynamodb:Attributes`.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"PreventUpdatesOnCertainAttributes",
         "Effect":"Allow",
         "Action":[
            "dynamodb:UpdateItem"
         ],
         "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores",
         "Condition":{
            "ForAllValues:StringNotLike":{
               "dynamodb:Attributes":[
                  "FreeGamesAvailable",
                  "BossLevelUnlocked"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES",
               "dynamodb:ReturnValues":[
                  "NONE",
                  "UPDATED_OLD",
                  "UPDATED_NEW"
               ]
            }
         }
      }
   ]
}
```

------

Observe o seguinte:
+ A ação `UpdateItem`, como outras ações de gravação, exige acesso de leitura aos itens para que possa retornar valores antes e depois da atualização. Na política, é possível limitar a ação para acessar somente os atributos que podem ser atualizados, especificando a chave de condição `dynamodb:ReturnValues`. A chave de condição restringe `ReturnValues` na solicitação para especificar apenas `NONE`, `UPDATED_OLD` ou `UPDATED_NEW` e não inclui `ALL_OLD` ou `ALL_NEW`.
+ O operador `StringEqualsIfExists` garante que, se `dynamodb:Select` ou `dynamodb:ReturnValues` estiver presente na solicitação, ambas deverão corresponder aos valores especificados. Isso impede que as operações exibam itens completos.
+ Ao restringir as atualizações de atributo, também é necessário controlar quais dados podem ser exibidos para evitar a divulgação de informações de atributos protegidos.
+ As ações `PutItem` e `DeleteItem` substituem um item inteiro e, assim, permitem que as aplicações modifiquem quaisquer atributos. Portanto, ao limitar um aplicativo para atualizar somente atributos específicos, você não deve conceder permissão para essas APIs.

#### Exemplo 5: conceder permissões para consultar somente atributos projetados em um índice
<a name="FGAC_DDB.Examples.QueryProjectedAttributes"></a>

A política de permissões a seguir possibilita consultas em um índice secundário (`TopScoreDateTimeIndex`) usando a chave de condição `dynamodb:Attributes`. A política também limita as consultas para solicitar somente atributos específicos que foram projetados no índice.

Para solicitar que a aplicação especifique uma lista de atributos na consulta, a política também especifica a chave de condição `dynamodb:Select` para exigir que o parâmetro `Select` da ação `Query` do DynamoDB seja `SPECIFIC_ATTRIBUTES`. A lista de atributos é limitada a uma lista específica que é fornecida por meio da chave de condição `dynamodb:Attributes`.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"QueryOnlyProjectedIndexAttributes",
         "Effect":"Allow",
         "Action":[
            "dynamodb:Query"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:Attributes":[
                  "TopScoreDateTime",
                  "GameTitle",
                  "Wins",
                  "Losses",
                  "Attempts"
               ]
            },
            "StringEquals":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

A política de permissões a seguir é semelhante, mas a consulta deve solicitar todos os atributos que foram projetados no índice.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"QueryAllIndexAttributes",
         "Effect":"Allow",
         "Action":[
            "dynamodb:Query"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex"
         ],
         "Condition":{
            "StringEquals":{
               "dynamodb:Select":"ALL_PROJECTED_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

#### Exemplo 6: conceder permissões para limitar o acesso a determinados atributos e valores de chave de partição
<a name="FGAC_DDB.Examples.AttributesAndKeyValues"></a>

A política de permissões a seguir permite ações específicas do DynamoDB (especificadas no elemento `Action`) em uma tabela e em um índice de tabela (especificadas no elemento `Resource`). A política usa a chave de condição `dynamodb:LeadingKeys` para restringir as permissões apenas aos itens cujo valor de chave de partição corresponde ao ID do usuário do Facebook.

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

****  

```
{
   "Version":"2012-10-17",		 	 	                    
   "Statement":[
      {
         "Sid":"LimitAccessToCertainAttributesAndKeyValues",
         "Effect":"Allow",
         "Action":[
            "dynamodb:UpdateItem",
            "dynamodb:GetItem",
            "dynamodb:Query",
            "dynamodb:BatchGetItem"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores",
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${graph.facebook.com:id}"
               ],
               "dynamodb:Attributes":[
                  "attribute-A",
                  "attribute-B"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES",
               "dynamodb:ReturnValues":[
                  "NONE",
                  "UPDATED_OLD",
                  "UPDATED_NEW"
               ]
            }
         }
      }
   ]
}
```

------

Observe o seguinte:
+ As ações de gravação permitidas pela política (`UpdateItem`) só podem modificar attribute-A ou attribute-B.
+ Como a política permite `UpdateItem`, um aplicativo pode inserir novos itens, e os atributos ocultos serão nulos em novos itens. Se esses atributos estiverem projetados em `TopScoreDateTimeIndex`, a política terá o benefício adicional de impedir consultas que causem buscas na tabela.
+ Os aplicativos não podem ler quaisquer atributos que não estejam listados em `dynamodb:Attributes`. Com essa política em vigor, uma aplicação deve definir o parâmetro `Select` como `SPECIFIC_ATTRIBUTES` em solicitações de leitura, e apenas os atributos da lista de permissões podem ser solicitados. Para solicitações de gravação, o aplicativo não pode definir `ReturnValues` como `ALL_OLD` ou `ALL_NEW` e ele não pode executar operações de gravação condicional com base em outros atributos.

#### Exemplo 7: conceder permissões para limitar o acesso a determinados atributos em uma tabela
<a name="FGAC_DDB.Examples.DenySpecificAttributes"></a>

A política a seguir nega o acesso a atributos sensíveis e garante que essa restrição não seja contornada pela omissão de uma expressão de projeção. Ela permite acesso geral à tabela `CustomerData` e, ao mesmo tempo, nega explicitamente o acesso aos atributos `SSN` e `CreditCardNumber`.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:Query",
            "dynamodb:Scan"
         ],
         "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/CustomerData"
      },
      {
         "Effect":"Deny",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:Query",
            "dynamodb:Scan"
         ],
         "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/CustomerData",
         "Condition":{
            "ForAnyValue:StringEquals":{
               "dynamodb:Attributes":[
                  "SSN",
                  "CreditCardNumber"
               ]
            }
         }
      },
      {
         "Effect":"Deny",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:Query",
            "dynamodb:Scan"
         ],
         "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/CustomerData",
         "Condition":{
            "StringNotEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

## Tópicos relacionados
<a name="w2aac39c21c15c11"></a>
+  [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md) 
+ [Permissões da API do DynamoDB: referência de ações, recursos e condições](api-permissions-reference.md)

# Usar federação de identidades na Web
<a name="WIF"></a>

Se você estiver criando um aplicativo direcionado a um grande número de usuários, você poderá, opcionalmente, usar a *federação de identidades da web* para autenticação e autorização. A federação de identidades da web exclui a necessidade de criar usuários do individuais. Em vez disso, os usuários podem fazer login em um provedor de identidades e, então, obter credenciais de segurança temporárias do AWS Security Token Service (AWS STS). A aplicação pode então usar essas credenciais para acessar serviços da AWS.

A federação de identidades na web é compatível com os seguintes provedores de identidade:
+ Login da Amazon
+ Facebook
+ Google

## Recursos adicionais para federação de identidades na Web
<a name="WIF.AdditionalResources"></a>

Os recursos a seguir podem ajudá-lo a saber mais sobre a federação de identidades na web:
+ A postagem [Web Identity Federation using the AWS SDK para .NET](https://aws.amazon.com/blogs/developer/web-identity-federation-using-the-aws-sdk-for-net) no blog de desenvolvedores da AWS ensina a usar a federação de identidades na Web com o Facebook. Isso inclui snippets de código em C\$1 que mostram como assumir um perfil do IAM com identidade da Web e usar credenciais de segurança temporárias para acessar um recurso da AWS.
+ O [AWS Mobile SDK for iOS](https://aws.amazon.com/sdkforios/) e o [AWS Mobile SDK para Android](https://aws.amazon.com/sdkforandroid/)contêm exemplos de aplicações. Eles incluem código que mostra como chamar os provedores de identidade e, depois, como usar as informações desses provedores para obter e usar credenciais de segurança temporárias.
+ O artigo [Web Identity Federation with Mobile Applications](https://aws.amazon.com/articles/4617974389850313) (Federação de identidades na Web com aplicativos móveis) discute a federação de identidades na web e mostra um exemplo de como usar a federação de identidades na web para acessar um recurso da AWS.

## Exemplo de política para federação de identidades na Web
<a name="WIF.Example"></a>

Para mostrar como você pode usar a federação de identidades na Web com o DynamoDB, revise a tabela *GameScores* que foi apresentada em [Uso de condições de política do IAM para controle de acesso refinado](specifying-conditions.md). Esta é a chave primária para *GameScores*:


****  

| Nome da tabela | Tipo de chave primária | Nome e tipo de chave de partição | Nome e tipo de chave de classificação | 
| --- | --- | --- | --- | 
| GameScores (UserId, GameTitle, ...) | Composto | Nome do atributo: UserId Tipo: string | Nome do atributo: GameTitle Tipo: string | 

Agora, suponha que um aplicativo de jogos móveis use essa tabela, e que o aplicativo precise oferecer suporte a milhares, ou até mesmo milhões, de usuários. Nesta escala, torna-se muito difícil gerenciar usuários e aplicativos individuais e garantir que cada usuário possa acessar somente seus próprios dados na tabela *GameScores*. Felizmente, muitos usuários já têm contas com um provedor de identidade de terceiros, como o Facebook, o Google ou o Login with Amazon. Então faz sentido usar um desses provedores nas tarefas de autenticação.

Para fazer isso usando a federação de identidades na web, o desenvolvedor do aplicativo deve registrar o aplicativo com um provedor de identidade (como o Login with Amazon) e obter um ID de aplicativo exclusivo. Em seguida, o desenvolvedor precisa criar um perfil do IAM. (Por exemplo, essa perfil chama *GameRole*.) O perfil deve ter um documento de política do IAM anexado a ele especificando as condições sob as quais o aplicativo pode acessar a tabela *GameScores*.

Quando um usuário deseja jogar, ele faz login em sua conta do Login with Amazon de dentro do aplicativo do jogo. A aplicação então chama o AWS Security Token Service (AWS STS) fornecendo o ID da aplicação Login with Amazon e solicitando a associação em *GameRole*. O AWS STS exibe as credenciais temporárias da AWS para a aplicação e permite que ela acesse a tabela *GameScores* de acordo com o documento de política de *GameRole*.

O diagrama a seguir mostra como essas partes se encaixam.

![\[O fluxo de trabalho de um aplicativo de jogos. O aplicativo usa o ID da Amazon ID e o AWS STS para obter credenciais temporárias para acessar uma tabela do DynamoDB.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/wif-overview.png)


**Visão geral da federação de identidades da .Web**

1. O aplicativo chama um provedor de identidade de terceiros para autenticar o usuário e o aplicativo. O provedor de identidade retorna um token de identidade da web para o aplicativo.

1. O aplicativo chama AWS STS e passa o token de identidade da web como entrada. O AWS STS autoriza o aplicativo e fornece credenciais de acesso da AWS temporárias. O aplicativo tem permissão para assumir um perfil do IAM (*GameRole*) e acessar os recursos da AWS de acordo com a política de segurança do perfil.

1. O aplicativo chama o DynamoDB para acessar a tabela *GameScores*. Como ele assumiu a *GameRole*, o aplicativo está sujeito à política de segurança associada a esse perfil. O documento de política impede o aplicativo de acessar dados que não pertencem ao usuário.

Mais uma vez, essa é a política de segurança de *GameRole* que foi mostrada em [Uso de condições de política do IAM para controle de acesso refinado](specifying-conditions.md):

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowAccessToOnlyItemsMatchingUserID",
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query",
            "dynamodb:PutItem",
            "dynamodb:UpdateItem",
            "dynamodb:DeleteItem",
            "dynamodb:BatchWriteItem"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${www.amazon.com:user_id}"
               ],
               "dynamodb:Attributes":[
                  "UserId",
                  "GameTitle",
                  "Wins",
                  "Losses",
                  "TopScore",
                  "TopScoreDateTime"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

A cláusula `Condition` determina quais itens em *GameScores* são visíveis para o aplicativo. Isso é feito ao comparar o ID do Login with Amazon com os valores de chave de partição `UserId` em `GameScores`. Somente os itens que pertencem ao usuário atual podem ser processados usando uma das ações do DynamoDB que estão listadas nessa política. Outros itens na tabela não podem ser acessados. Além disso, somente os atributos específicos listados na política podem ser acessados.

# Preparar para usar a federação de identidades na Web
<a name="WIF.PreparingForUse"></a>

Se você é um desenvolvedor de aplicativo e deseja usar a federação de identidades na web para seu aplicativo, siga estas etapas:

1. **Cadastre-se como desenvolvedor em um provedor de identidades de terceiros.** Os links externos a seguir fornecem informações sobre como se cadastrar em provedores de identidades compatíveis:
   + [Centro do desenvolvedor do Login with Amazon](http://login.amazon.com/)
   + [Registro](https://business.facebook.com/business/loginpage) no site do Facebook
   + [Uso do OAuth 2.0 para acessar APIs do Google](https://developers.google.com/accounts/docs/OAuth2) no site do Google

1. **Registre seu aplicativo com o provedor de identidades.** Ao fazer isso, o provedor fornece um ID exclusivo para o seu aplicativo. Se você deseja que o seu aplicativo funcione com vários provedores de identidade, é necessário obter um ID do aplicativo de cada fornecedor.

1. **Crie uma ou mais perfis do IAM. **Você precisa de uma função para cada provedor de identidade de cada aplicativo. Por exemplo, você pode criar um perfil que possa ser assumido por um aplicativo em que o usuário se conectou usando Login with Amazon, um segundo perfil para o mesmo aplicativo em que o usuário se conectou usando o Facebook, e um terceiro perfil para o aplicativo em que os usuários fazem login usando o Google.

   Como parte do processo de criação do perfil, você precisa anexar uma política do IAM ao perfil. Seu documento de política deve definir os recursos do DynamoDB exigidos por sua aplicação, e as permissões para acessar esses recursos.

Para obter mais informações, consulte [Sobre a federação de identidades na Web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) no *Guia do usuário do IAM*. 

**nota**  
Como alternativa ao AWS Security Token Service, você pode usar o Amazon Cognito. O Amazon Cognito é o serviço preferencial para o gerenciamento de credenciais temporárias para aplicações móveis. Para obter mais informações, consulte [Obter credenciais](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html) no *Guia do desenvolvedor do Amazon Cognito*. 

## Gerar uma política do IAM usando o console do DynamoDB
<a name="WIF.PreparingForUse.DDBConsole"></a>

O console do DynamoDB pode ajudar a criar uma política do IAM para usar com a federação de identidades na Web. Para fazer isso, você escolhe uma tabela do DynamoDB e especifica o provedor de identidade, ações e atributos a serem incluídos na política. O console do DynamoDB gera uma política que você pode anexar a um perfil do IAM.

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, selecione **Tables** (Tabelas). 

1.  Na lista de tabelas, escolha a tabela para a qual você deseja criar a política do IAM. 

1.  Selecione o botão **Ações** e escolha **Criar política de controle de acesso**. 

1.  Escolha o provedor de identidade, as ações e os atributos para a política. 

    Quando as configurações estiverem como você deseja, selecione **Gerar política**. A política gerada aparece. 

1.  Selecione **Consulte a documentação** e siga as etapas necessárias para anexar a política gerada a um perfil do IAM. 

# Criar aplicação para usar a federação de identidades na Web
<a name="WIF.RunningYourApp"></a>

Para usar a federação de identidades na Web, sua aplicação precisa assumir o perfil do IAM que você criou. A partir daí, o aplicativo honra a política de acesso que você anexou ao perfil.

No tempo de execução, se o seu aplicativo usa a federação de identidades na web, ele deverá seguir estas etapas:

1. **Autentique-se com um provedor de identidade de terceiros.** Seu aplicativo deve chamar o provedor de identidade usando uma interface fornecida por ele. A maneira exata em que você autentica o usuário depende do provedor e em que plataforma seu aplicativo está em execução. Normalmente, se o usuário ainda não estiver conectado, o provedor de identidade exibe uma página de login para esse provedor.

   Depois de autenticar o usuário, o provedor de identidade retorna um token de identidade da web para seu aplicativo. O formato desse token depende do fornecedor, mas geralmente é uma string muito longa.

1. **Obtenha credenciais de segurança temporárias da AWS.** Para fazer isso, sua aplicação envia uma solicitação `AssumeRoleWithWebIdentity` para o AWS Security Token Service (AWS STS). Essa solicitação contém o seguinte:
   + O token de identidade da web da etapa anterior
   + O ID do aplicativo do provedor de identidade
   + O nome do recurso da Amazon (ARN) do perfil do IAM que você criou junto a este provedor de identidade para esta aplicação

   O AWS STS retorna um conjunto de credenciais de segurança da AWS que expira depois de um determinado período de tempo (por padrão, 3.600 segundos).

   Veja a seguir uma solicitação e resposta de exemplo de uma ação `AssumeRoleWithWebIdentity` no AWS STS. O token de identidade da web foi obtido do provedor de identidade Login with Amazon.

   ```
   GET / HTTP/1.1
   Host: sts.amazonaws.com
   Content-Type: application/json; charset=utf-8
   URL: https://sts.amazonaws.com/?ProviderId=www.amazon.com
   &DurationSeconds=900&Action=AssumeRoleWithWebIdentity
   &Version=2011-06-15&RoleSessionName=web-identity-federation
   &RoleArn=arn:aws:iam::123456789012:role/GameRole
   &WebIdentityToken=Atza|IQEBLjAsAhQluyKqyBiYZ8-kclvGTYM81e...(remaining characters omitted)
   ```

   

   ```
   <AssumeRoleWithWebIdentityResponse
     xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
     <AssumeRoleWithWebIdentityResult>
       <SubjectFromWebIdentityToken>amzn1.account.AGJZDKHJKAUUSW6C44CHPEXAMPLE</SubjectFromWebIdentityToken>
       <Credentials>
         <SessionToken>AQoDYXdzEMf//////////wEa8AP6nNDwcSLnf+cHupC...(remaining characters omitted)</SessionToken>
         <SecretAccessKey>8Jhi60+EWUUbbUShTEsjTxqQtM8UKvsM6XAjdA==</SecretAccessKey>
         <Expiration>2013-10-01T22:14:35Z</Expiration>
         <AccessKeyId>06198791C436IEXAMPLE</AccessKeyId>
       </Credentials>
       <AssumedRoleUser>
         <Arn>arn:aws:sts::123456789012:assumed-role/GameRole/web-identity-federation</Arn>
         <AssumedRoleId>AROAJU4SA2VW5SZRF2YMG:web-identity-federation</AssumedRoleId>
       </AssumedRoleUser>
     </AssumeRoleWithWebIdentityResult>
     <ResponseMetadata>
       <RequestId>c265ac8e-2ae4-11e3-8775-6969323a932d</RequestId>
     </ResponseMetadata>
   </AssumeRoleWithWebIdentityResponse>
   ```

1. **Acesse os recursos da AWS.** A resposta do AWS STS contém informações de que seu aplicativo precisa para acessar recursos do DynamoDB:
   + Os campos `AccessKeyID`, `SecretAccessKey` e `SessionToken` contêm credenciais de segurança válidas apenas para este usuário e este aplicativo. 
   + O campo `Expiration` significa o limite de tempo dessas credenciais. Depois disso, elas não são mais válidas.
   + O campo `AssumedRoleId` contém o nome de um perfil do IAM específico da sessão que foi assumida pela aplicação. A aplicação honra os controles de acesso do documento de política do IAM durante esta sessão.
   + O campo `SubjectFromWebIdentityToken` contém o ID exclusivo que aparece em uma variável de política do IAM para esse provedor de identidade específico. Veja a seguir as variáveis de política do IAM para provedores compatíveis, e alguns valores de exemplo para elas:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/WIF.RunningYourApp.html)

Por obter políticas do IAM de exemplo nas quais essas variáveis de política são usadas, consulte [Políticas de exemplo: usar condições para controle de acesso refinado](specifying-conditions.md#FGAC_DDB.Examples).

Para obter mais informações sobre como o AWS STS gera credenciais de acesso temporárias, consulte [Solicitação de credenciais de segurança temporárias](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) no *Guia do usuário do IAM*.

# Permissões da API do DynamoDB: referência de ações, recursos e condições
<a name="api-permissions-reference"></a>

Ao configurar o [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md) e criar uma política de permissões que pode ser anexada a uma identidade do IAM (políticas baseadas em identidade), você poderá usar a lista de [Ações, recursos e chaves de condição para Amazon DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html) no *Guia do usuário do IAM* como referência. A página a seguir lista cada operação de API do DynamoDB, as ações correspondentes às quais você pode conceder permissões para executar a ação e o recurso da AWS ao qual você pode conceder as permissões. Você especifica as ações no campo `Action` da política e o valor do recurso no campo `Resource` da política.

Você pode usar as chaves de condição usadas por toda a AWS em suas políticas do DynamoDB para expressar condições. Para obter uma lista completa de chaves válidas no âmbito da AWS, consulte a [Referência de elementos de políticas JSON do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys) no *Guia do usuário do IAM*.

Além das chaves de condição no âmbito da AWS, o DynamoDB tem suas próximas chaves específicas que você pode usar nas condições. Para obter mais informações, consulte [Uso de condições de política do IAM para controle de acesso refinado](specifying-conditions.md).

## Tópicos relacionados
<a name="w2aac39c21c15c15b9"></a>
+  [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md)
+ [Uso de condições de política do IAM para controle de acesso refinado](specifying-conditions.md)

# Validação de conformidade do DynamoDB por setor
<a name="Compliance"></a>

Para saber se um AWS service (Serviço da AWS) está no escopo de programas de conformidade específicos, consulte [Serviços da AWS no escopo por programa de conformidade](https://aws.amazon.com/compliance/services-in-scope/) e escolha o programa de conformidade no qual tem interesse. Para obter informações gerais, consulte [Programas de Conformidade da AWS](https://aws.amazon.com/compliance/programs/).

É possível baixar relatórios de auditoria de terceiros usando o AWS Artifact. Para saber mais, consulte [Baixar relatórios no AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html).

Sua responsabilidade de conformidade ao usar o Serviços da AWS é determinada pela confidencialidade dos seus dados, pelos objetivos de conformidade da sua empresa e pelos regulamentos e leis aplicáveis. Para ter mais informações sobre sua responsabilidade pela conformidade ao usar Serviços da AWS, consulte a [Documentação de segurança da AWS](https://docs.aws.amazon.com/security/).

# Resiliência e recuperação de desastres no Amazon DynamoDB
<a name="disaster-recovery-resiliency"></a>

A infraestrutura global da AWS é criada com base em regiões da AWS e zonas de disponibilidade. As regiões da AWS As regiões fornecem várias zonas de disponibilidade separadas e isoladas fisicamente, as quais são conectadas com baixa latência, alto throughput e redes altamente redundantes. Com as zonas de disponibilidade, é possível projetar e operar aplicações e bancos de dados que executam o failover automaticamente entre as zonas de disponibilidade sem interrupção. As zonas de disponibilidade são mais altamente disponíveis, tolerantes a falhas e escaláveis que uma ou várias infraestruturas de datacenter tradicionais. 

Se você precisa replicar seus dados ou aplicações para distâncias geográficas maiores, use as regiões locais da AWS. Uma região local da AWS é um único data center projetado para complementar um região da AWS existente. Como todas as regiões da AWS, as regiões locais da AWS são completamente isoladas de outras regiões da AWS.

Para obter mais informações sobre AWS Regiões e Zonas de Disponibilidade, consulte [AWS global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/).

O Amazon DynamoDB replica automaticamente seus dados em três zonas de disponibilidade em uma região, oferecendo alta durabilidade integrada e um SLA de 99,99% de disponibilidade. Além disso, o DynamoDB oferece vários recursos para ajudar a atender às suas necessidades de resiliência e backup de dados.

**Backup e restauração sob demanda**  
O DynamoDB oferece o recurso de backup sob demanda. Ele permite que você crie backups completos das suas tabelas para retenção e arquivamento de longo prazo. Para obter mais informações, consulte [Backup e restauração sob demanda para o DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Backup-and-Restore.html).

**Recuperação pontual**  
A recuperação em um ponto anterior no tempo ajuda a proteger as tabelas do DynamoDB contra operações acidentais de gravação ou exclusão. Com a recuperação point-in-time, você não precisa se preocupar com a criação, a manutenção ou a programação de backups sob demanda. Para obter mais informações, consulte [Recuperação pontual para o DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Point-in-time-recovery.html).

**Tabelas globais sincronizadas entre regiões da AWS**  
O DynamoDB distribui automaticamente os dados e o tráfego para as tabelas por um número suficiente de servidores para lidar com seus requisitos de throughput e armazenamento sem deixar de manter uma performance consistente e rápida. Todos os dados são armazenados em discos de estado sólido (SSDs) e automaticamente replicados entre várias zonas de disponibilidade em uma região da AWS, o que oferece alta durabilidade de dados e disponibilidade integradas. Você pode usar tabelas globais para manter as tabelas do DynamoDB sincronizadas em regiões da AWS.

# Segurança da infraestrutura no Amazon DynamoDB
<a name="network-isolation"></a>

Como um serviço gerenciado, o Amazon DynamoDB é protegido pelos procedimentos de segurança de redes globais da AWS que são descritos na [proteção de segurança](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) localizada no AWS Well-Architected Framework.

Você usa as chamadas de API publicadas da AWS para acessar o DynamoDB via rede. Os clientes podem usar TLS (Transport Layer Security) versão 1.2 ou 1.3. Os clientes também devem ter suporte a pacotes de criptografia com sigilo de encaminhamento perfeito (PFS) como Ephemeral Diffie-Hellman (DHE) ou Elliptic Curve Diffie-Hellman Encaminhamento (ECDHE). A maioria dos sistemas modernos, como Java 7 e versões posteriores, comporta esses modos. Além disso, as solicitações devem ser assinadas usando um ID da chave de acesso e uma chave de acesso secreta associada a uma entidade principal do IAM. Ou é possível usar o [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) para gerar credenciais de segurança temporárias para assinar solicitações.

 Você também pode usar um endpoint da VPC (nuvem privada virtual) para DynamoDB para permitir que instâncias do Amazon EC2 em sua VPC usem seus endereços IP privados para acessar o DynamoDB sem se expor à Internet pública. Para obter mais informações, consulte [Usar endpoints da Amazon VPC para acessar o DynamoDB](#vpc-endpoints-dynamodb). 

## Usar endpoints da Amazon VPC para acessar o DynamoDB
<a name="vpc-endpoints-dynamodb"></a>

Por motivos de segurança, muitos clientes da AWS executam suas aplicações em um ambiente da Amazon Virtual Private Cloud (Amazon VPC). Com a Amazon VPC, você pode executar instâncias do Amazon EC2 em uma nuvem privada virtual, a qual é isolada logicamente de outras redes, incluindo a Internet pública. Com uma Amazon VPC, você tem controle sobre o intervalo de endereços IP, as sub-redes, as tabelas de roteamento, os gateways de rede e as configurações de segurança.

**nota**  
Se você criou a Conta da AWS após 4 de dezembro de 2013, você já tem uma VPC padrão em cada Região da AWS. Uma VPC padrão é fornecida pronta para ser usada. Você pode começar a usar sua VPC padrão imediatamente, sem precisar executar quaisquer etapas de configuração adicionais.  
Para obter mais informações, consulte [VPC padrão e sub-redes padrão](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) no *Guia do usuário da Amazon VPC*.

Para acessar a Internet pública, a VPC deverá ter um gateway da Internet, um roteador virtual que conecta a VPC à Internet. Isso permite que as aplicações em execução no Amazon EC2 em sua VPC acessem recursos da Internet, como o Amazon DynamoDB.

Por padrão, as comunicações de e para o DynamoDB usam o protocolo HTTPS, o qual protege o tráfego de rede usando a criptografia SSL/TLS. O diagrama a seguir mostra uma instância do Amazon EC2 em uma VPC acessando o DynamoDB ao fazer com que o DynamoDB use um gateway da internet em vez de endpoints da VPC.

![\[Diagrama de fluxo de trabalho mostrando uma instância do Amazon EC2 acessando o DynamoDB por meio de um roteador, um gateway da internet e a internet.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/ddb-no-vpc-endpoint.png)


Muitos clientes têm preocupações legítimas com a segurança e a privacidade sobre o envio e o recebimento de dados pela Internet pública. Você pode abordar essas preocupações usando uma rede privada virtual (VPN) para rotear todo o tráfego de rede do DynamoDB por meio da sua infraestrutura de rede corporativa. No entanto, essa abordagem pode introduzir desafios de largura de banda e disponibilidade.

Os endpoints da VPC para DynamoDB podem minimizar esses desafios. Um *endpoint da VPC* para DynamoDB permite que instâncias do Amazon EC2 em sua VPC usem seus endereços IP privados para acessar o DynamoDB sem se expor à Internet pública. Suas instâncias do EC2 não precisam de endereços IP públicos, e você não precisa de um gateway da Internet, um dispositivo NAT ou um gateway privado virtual em sua VPC. Use as políticas de endpoint para controlar o acesso ao DynamoDB. O tráfego entre sua VPC e o serviço da AWS não sai da rede da Amazon.

**nota**  
 Mesmo ao usar endereços IP públicos, todas as comunicações de VPC entre instâncias e serviços hospedados na AWS são mantidas privadas na rede da AWS. Os pacotes originados da rede da AWS com um destino na rede da AWS permanecem na rede global da AWS, exceto o tráfego de ou para as regiões da AWS da China. 

Quando você cria um endpoint da VPC para DynamoDB, quaisquer solicitações para um endpoint do DynamoDB dentro da região (por exemplo, *dynamodb.us-west-2.amazonaws.com*) são encaminhadas para um endpoint do DynamoDB privado dentro da rede da Amazon. Você não precisa modificar suas aplicações executadas em instâncias do EC2 em sua VPC. O nome do endpoint permanece o mesmo, mas a rota para o DynamoDB permanece inteiramente dentro da rede da Amazon, sem acesso à Internet pública. 

O diagrama a seguir mostra como uma instância do EC2 em uma VPC pode usar um endpoint da VPC para acessar o DynamoDB.

![\[Diagrama de fluxo de trabalho mostrando uma instância do EC2 acessando o DynamoDB por meio de um roteador e um endpoint da VPC.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/ddb-yes-vpc-endpoint.png)


Para obter mais informações, consulte [Tutorial: usar um endpoint da VPC para o DynamoDB](#vpc-endpoints-dynamodb-tutorial).

### Compartilhar endpoints do Amazon VPC e do DynamoDB
<a name="vpc-endpoints-dynamodb-sharing"></a>

Para permitir o acesso ao serviço DynamoDB por meio do endpoint do gateway de uma sub-rede da VPC, você deve ter permissões de conta de proprietário para essa sub-rede da VPC.

 Depois que o endpoint do gateway da sub-rede da VPC tiver acesso ao DynamoDB, qualquer conta da AWS conta com acesso a essa sub-rede poderá usar o DynamoDB. Isso significa que todos os usuários da conta na sub-rede da VPC podem usar qualquer tabela do DynamoDB à qual tenham acesso. Isso inclui tabelas do DynamoDB associadas a uma conta diferente da sub-rede da VPC. O proprietário da sub-rede da VPC ainda pode impedir que qualquer usuário específico dentro da sub-rede use o serviço DynamoDB por meio do endpoint do gateway, se assim ele decidir. 

### Tutorial: usar um endpoint da VPC para o DynamoDB
<a name="vpc-endpoints-dynamodb-tutorial"></a>

Esta seção mostra como configurar e usar um endpoint da VPC para DynamoDB.

**Topics**
+ [Etapa 1: iniciar uma instância do Amazon EC2](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance)
+ [Etapa 2: configurar a instância do Amazon EC2](#vpc-endpoints-dynamodb-tutorial.configure-ec2-instance)
+ [Etapa 3: criar um endpoint da VPC para o DynamoDB](#vpc-endpoints-dynamodb-tutorial.create-endpoint)
+ [Etapa 4: limpar (opcional)](#vpc-endpoints-dynamodb-tutorial.clean-up)

#### Etapa 1: iniciar uma instância do Amazon EC2
<a name="vpc-endpoints-dynamodb-tutorial.launch-ec2-instance"></a>

Nesta etapa, você inicia uma instância do Amazon EC2 em sua Amazon VPC padrão. Você então pode criar e usar um endpoint da VPC para DynamoDB.

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Escolha **Iniciar instância** e faça o seguinte:

   Etapa 1: Escolher uma imagem de máquina da Amazon (AMI)
   + Na parte superior da lista de AMIs, vá para **Amazon Linux AMI (AMI do Amazon Linux)** e escolha **Select (Selecionar)**.

   Etapa 2: escolher um tipo de instância
   + Na parte superior da lista de tipos de instância, escolha **t2.micro**.
   + Escolha **Next: Configure Instance Details** (Próximo: configurar detalhes da instância).

   Etapa 3: configurar detalhes da instância
   + Vá para **Network (Rede)** e escolha sua VPC padrão.

     Escolha **Next: Add Storage** (Próximo: adicionar armazenamento).

   Etapa 4: adicionar armazenamento
   + Ignore esta etapa escolhendo **Próximo: instância de tag**.

   Etapa 5: instância de tag
   + Ignore esta etapa escolhendo **Próximo: configurar o grupo de segurança**.

   Etapa 6: configurar o grupo de segurança
   + Escolha **Select an existing security group** (Selecionar um grupo de segurança existente).
   + Na lista de grupos de segurança, escolha **default** (padrão). Este é o grupo de segurança padrão para sua VPC.
   + Escolha **Próximo: revisar e executar**.

   Etapa 7: revisar a execução da instância
   + Escolha **Launch** (Executar).

1. Na janela **Select an existing key pair or create a new key pair** (Selecionar um par de chaves existente ou criar um novo par de chaves), siga um destes procedimentos:
   + Se você não tiver um par de chaves do Amazon EC2, escolha **Create a new key pair** (Criar um novo par de chaves) e siga as instruções. Você será solicitado a fazer download de um arquivo de chave privada (arquivo *.pem*), o qual será necessário no momento de fazer login na sua instância do Amazon EC2.
   + Se você já tiver um par de chaves existente do Amazon EC2, vá para **Select a key pair** (Selecionar um par de chaves) e escolha o seu par de chaves na lista. Você já deverá ter o arquivo de chave privada (arquivo *.pem*) disponível para fazer login na instância do Amazon EC2.

1. Após configurar o par de chaves, escolha **Iniciar instâncias**.

1. Retorne à página inicial do console do Amazon EC2 e escolha a instância que você iniciou. No painel inferior, na guia **Description** (Descrição), localize o **Public DNS** (DNS público) para sua instância. Por exemplo: `ec2-00-00-00-00.us-east-1.compute.amazonaws.com`.

   Anote esse nome DNS público, pois você precisará dele na próxima etapa deste tutorial ([Etapa 2: configurar a instância do Amazon EC2](#vpc-endpoints-dynamodb-tutorial.configure-ec2-instance)).

**nota**  
Serão necessários alguns minutos para que a sua instância do Amazon EC2 se torne disponível. Antes de ir para a próxima etapa, verifique se o **Estado da instância** é `running` e se todas as suas **Verificações de status** foram aprovadas.

#### Etapa 2: configurar a instância do Amazon EC2
<a name="vpc-endpoints-dynamodb-tutorial.configure-ec2-instance"></a>

Quando sua instância do Amazon EC2 estiver disponível, você poderá fazer login e prepará-la para ser usada pela primeira vez.

**nota**  
As etapas a seguir assumem que você está se conectando à sua instância do Amazon EC2 de um computador que executa o Linux. Para conferir outras maneiras de se conectar, consulte [Conecte-se à sua instância do Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) no Guia do usuário do Amazon EC2.

1. É necessário autorizar o tráfego SSH de entrada para a sua instância do Amazon EC2. Para fazer isso, crie um novo security group EC2 e, em seguida, atribua o security group à sua instância do EC2.

   1. No painel de navegação, escolha **Grupos de segurança**.

   1. Escolha **Criar grupo de segurança**. Na janela **Security group**, faça o seguinte:
      + **Nome do security group**: digite um nome para seu grupo de segurança. Por exemplo, .: `my-ssh-access`
      + **Descrição** – digite uma breve descrição para o security group.
      + **VPC** – escolha a VPC padrão.
      + Na seção **Regras do security group**, escolha **Adicionar regra** e faça o seguinte:
        + **Tipo** – escolha SSH.
        + **Origem** – escolha My IP.

      Quando estiver satisfeito com as configurações, escolha **Create** (Criar).

   1. No painel de navegação, escolha **Instâncias**.

   1. Escolha a instância do Amazon EC2 que você iniciou em [Etapa 1: iniciar uma instância do Amazon EC2](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance).

   1. Escolha **Ações** --> **Rede** --> **Alterar security groups**.

   1. Em **Change Security Groups** (Alterar grupos de segurança), selecione o grupo de segurança que você criou anteriormente neste procedimento (por exemplo, `my-ssh-access`). O grupo de segurança `default` existente também deve ser selecionado. Quando estiver satisfeito com as configurações, escolha **Atribuir security group**.

1. Use o comando `ssh` para fazer login na sua instância do Amazon EC2 conforme o exemplo a seguir.

   ```
   ssh -i my-keypair.pem ec2-user@public-dns-name
   ```

   Você precisará especificar seu arquivo de chave privada (arquivo *.pem*) e o nome DNS público da sua instância. (Consulte [Etapa 1: iniciar uma instância do Amazon EC2](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance).) 

   O ID de login é `ec2-user`. Nenhuma senha é necessária.

1. Configure as credenciais da AWS, conforme mostrado no exemplo a seguir. Insira o ID da chave de acesso da AWS, chave secreta e nome de região padrão quando solicitado.

   ```
   aws configure
   ```

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-east-1
   Default output format [None]:
   ```

Agora, você está pronto para criar um endpoint da VPC para DynamoDB.

#### Etapa 3: criar um endpoint da VPC para o DynamoDB
<a name="vpc-endpoints-dynamodb-tutorial.create-endpoint"></a>

Nesta etapa, você criará um endpoint da VPC para DynamoDB e o testará para garantir que ele funcione.

1. Antes de começar, verifique se você pode se comunicar com o DynamoDB usando seu endpoint público:

   ```
   aws dynamodb list-tables
   ```

   A saída mostrará uma lista de tabelas do DynamoDB que você possui no momento. (Se você não tiver tabelas, a lista estará vazia).

1. Verifique se o DynamoDB é um serviço disponível para a criação de endpoints da VPC na região da AWS atual. (O comando é mostrada em negrito, seguido pelo exemplo de saída).

   ```
   aws ec2 describe-vpc-endpoint-services
   ```

   ```
   {
       "ServiceNames": [
           "com.amazonaws.us-east-1.s3",
           "com.amazonaws.us-east-1.dynamodb"
       ]
   }
   ```

   No exemplo de saída, o DynamoDB é um dos serviços disponíveis, portanto, você pode prosseguir com a criação de um endpoint da VPC para ele.

1. Determine o identificador da VPC.

   ```
   aws ec2 describe-vpcs
   ```

   ```
   {
       "Vpcs": [
           {
               "VpcId": "vpc-0bbc736e", 
               "InstanceTenancy": "default", 
               "State": "available", 
               "DhcpOptionsId": "dopt-8454b7e1", 
               "CidrBlock": "172.31.0.0/16", 
               "IsDefault": true
           }
       ]
   }
   ```

   No exemplo de saída, o ID da VPC é `vpc-0bbc736e`.

1. Crie o endpoint da VPC. Para o parâmetro `--vpc-id`, especifique o ID da VPC da etapa anterior. Use o parâmetro `--route-table-ids` para associar o endpoint às tabelas de rotas.

   ```
   aws ec2 create-vpc-endpoint --vpc-id vpc-0bbc736e --service-name com.amazonaws.us-east-1.dynamodb --route-table-ids rtb-11aa22bb
   ```

   ```
   {
       "VpcEndpoint": {
           "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", 
           "VpcId": "vpc-0bbc736e", 
           "State": "available", 
           "ServiceName": "com.amazonaws.us-east-1.dynamodb", 
           "RouteTableIds": [
               "rtb-11aa22bb"
           ],
           "VpcEndpointId": "vpce-9b15e2f2", 
           "CreationTimestamp": "2017-07-26T22:00:14Z"
       }
   }
   ```

1. Verifique se você consegue acessar o DynamoDB por meio do endpoint da VPC.

   ```
   aws dynamodb list-tables
   ```

   Se desejar, experimente alguns outros comandos da AWS CLI para o DynamoDB. Para obter mais informações, consulte a [Referência de comandos da AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/).

#### Etapa 4: limpar (opcional)
<a name="vpc-endpoints-dynamodb-tutorial.clean-up"></a>

Para excluir os recursos que você criou neste tutorial, siga estes procedimentos:

**Para remover seu endpoint da VPC para DynamoDB**

1. Faça login em sua instância do Amazon EC2.

1. Determine o ID do endpoint da VPC.

   ```
   aws ec2 describe-vpc-endpoints
   ```

   ```
   {
       "VpcEndpoint": {
           "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", 
           "VpcId": "vpc-0bbc736e", 
           "State": "available", 
           "ServiceName": "com.amazonaws.us-east-1.dynamodb", 
           "RouteTableIds": [], 
           "VpcEndpointId": "vpce-9b15e2f2", 
           "CreationTimestamp": "2017-07-26T22:00:14Z"
       }
   }
   ```

   No exemplo de saída, o ID do VPC endpoint é `vpce-9b15e2f2`.

1. Exclua o endpoint da VPC.

   ```
   aws ec2 delete-vpc-endpoints --vpc-endpoint-ids vpce-9b15e2f2
   ```

   ```
   {
       "Unsuccessful": []
   }
   ```

   A matriz vazia `[]` indica o sucesso (não há solicitações malsucedidas).

**Para terminar sua instância do Amazon EC2**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, escolha **Instances (Instâncias)**.

1. Escolha a instância do Amazon EC2.

1. Escolha **Actions (Ações)**, **Instance State (Estado da instância)**, **Terminate (Encerrar)**.

1. Na janela de confirmação, clique em **Sim, encerrar**.

# AWS PrivateLink para DynamoDB
<a name="privatelink-interface-endpoints"></a>

Com o AWS PrivateLink para o DynamoDB, é possível provisionar *endpoints da Amazon VPC de interface* (endpoints de interface) em sua nuvem privada virtual (Amazon VPC). Esses endpoints podem ser acessados diretamente por meio da VPN e do Direct Connect pelas aplicações que estão no ambiente on-premises ou por [emparelhamento da Amazon VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) pelas aplicações que estão em uma Região da AWS diferente. Usando endpoints de interface e o AWS PrivateLink, é possível simplificar a conectividade de rede privada das aplicações com o DynamoDB.

As aplicações na VPC não necessitam que endereços IP públicos se comuniquem com o DynamoDB usando endpoints de interface da VPC para operações do DynamoDB. Os endpoints de interface são representados por uma ou mais interfaces de rede elástica (ENIs) que recebem endereços IP privados de sub-redes na Amazon VPC. As solicitações para o DynamoDB por meio de endpoints de interface permanecem na rede da Amazon. Também é possível acessar endpoints de interface na Amazon VPC via aplicações on-premises por meio do AWS Direct Connect ou do AWS Virtual Private Network (Site-to-Site VPN). Para ter mais informações sobre como conectar a Amazon VPC à rede on-premises, consulte o [Guia do usuário do Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) e o [Guia do usuário do AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html).

Para acessar informações gerais sobre endpoints de interface, consulte [Endpoints da VPC de interface (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) no *Guia do AWS PrivateLink*. O AWS PrivateLink também comporta endpoints do Amazon DynamoDB Streams. Para obter mais informações, consulte [AWS PrivateLink para DynamoDB Streams](privatelink-streams.md).

**Topics**
+ [Tipos de endpoint da Amazon VPC para o Amazon DynamoDB](#types-of-vpc-endpoints-for-ddb)
+ [Considerações ao usar o AWS PrivateLink para Amazon DynamoDB](#privatelink-considerations)
+ [Criar um Amazon VPC endpoint](#ddb-creating-vpc)
+ [Acessar os endpoints de interface do Amazon DynamoDB](#accessing-ddb-interface-endpoints)
+ [Acessar tabelas do DynamoDB e operações de API de controle por meio dos endpoints da interface do DynamoDB](#accessing-tables-apis-from-interface-endpoints)
+ [Atualizar uma configuração de DNS on-premises](#updating-on-premises-dns-config)
+ [Criar uma política de endpoint da Amazon VPC para o DynamoDB](#creating-vpc-endpoint-policy)
+ [Usar endpoints do DynamoDB com acesso privado ao Console de gerenciamento da AWS](#ddb-endpoints-private-access)
+ [AWS PrivateLink para DynamoDB Streams](privatelink-streams.md)
+ [Usar o AWS PrivateLink DynamoDB Accelerator (DAX)](dax-private-link.md)

## Tipos de endpoint da Amazon VPC para o Amazon DynamoDB
<a name="types-of-vpc-endpoints-for-ddb"></a>

É possível usar dois tipos de endpoints da VPC para acessar o Amazon DynamoDB: *endpoints de gateway* e *endpoints de interface* (usando o AWS PrivateLink). *Endpoint de gateway* é um gateway especificado na tabela de rotas para acessar o DynamoDB por meio da Amazon VPC pela rede da AWS. Os *endpoints de interface* estendem a funcionalidade dos endpoints de gateway usando endereços IP privados para rotear solicitações para o DynamoDB de dentro da Amazon VPC, do ambiente on-premises ou de uma Amazon VPC em outra Região da AWS usando emparelhamento da VPC ou o AWS Transit Gateway. Para ter mais informações, consulte [What is Amazon VPC peering?](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) em [Transit Gateway vs Amazon VPC peering](https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/transit-gateway-vs-vpc-peering.html).

Os endpoints de interface são compatíveis com os endpoints de gateway. Se você tiver um endpoint de gateway na Amazon VPC, poderá usar os dois tipos de endpoint na mesma Amazon VPC.


|  Endpoints de gateway para o DynamoDB  |  Endpoints de interface para o DynamoDB  | 
| --- | --- | 
|  Em ambos os casos, o tráfego de rede permanece na rede AWS.  | 
|  Usar endereços IP públicos do Amazon DynamoDB  |  Usar endereços IP privados da Amazon VPC para acessar o Amazon DynamoDB  | 
|  Não permita o acesso pelo ambiente on-premises  |  Permitir acesso desde on-premises  | 
|  Não permita o acesso por outra Região da AWS  |  Permitir acesso de um endpoint da Amazon VPC em outra Região da AWS usando emparelhamento da Amazon VPC ou o AWS Transit Gateway  | 
|  Não faturado  |  Faturado  | 

Para ter mais informações sobre endpoints de gateway, consulte [Gateway Amazon VPC endpoints](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-gateway.html) no *Guia do AWS PrivateLink*.

## Considerações ao usar o AWS PrivateLink para Amazon DynamoDB
<a name="privatelink-considerations"></a>

As considerações sobre a Amazon VPC se aplicam ao AWS PrivateLink para Amazon DynamoDB. Para obter mais informações, consulte [Considerações sobre o endpoint de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations) e [Cotas do AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html) no *Guia do usuário do AWS PrivateLink*. Além disso, aplicam-se as restrições a seguir.

O AWS PrivateLink para Amazon DynamoDB não é compatível com:
+ Transport Layer Security (TLS) 1.1
+ Serviços de Sistema de Nomes de Domínio (DNS) privados e híbridos

**Importante**  
Não crie zonas hospedadas privadas para substituir os nomes de DNS dos endpoints do DynamoDB (como `dynamodb.region.amazonaws.com` ou `*.region.amazonaws.com`) para rotear o tráfego para os endpoints da interface. As configurações de DNS do DynamoDB podem mudar ao longo do tempo.   
 As substituições personalizadas de DNS não são compatíveis com essas alterações e podem fazer com que as solicitações sejam roteadas inesperadamente por endereços IP públicos em vez de seus endpoints de interface.   
 Para acessar o DynamoDB por meio do AWS PrivateLink, configure seus clientes para usar diretamente a URL do endpoint da VPC da Amazon (por exemplo `https://vpce-1a2b3c4d-5e6f.dynamodb.region.vpce.amazonaws.com`).

É possível enviar até 50 mil solicitações por segundo para cada endpoint do AWS PrivateLink habilitado.

**nota**  
Os tempos limite de conectividade de rede com os endpoints do AWS PrivateLink não estão dentro do escopo das respostas de erro do DynamoDB e precisam ser tratados adequadamente pelas aplicações que se conectam aos endpoints do PrivateLink.

## Criar um Amazon VPC endpoint
<a name="ddb-creating-vpc"></a>

Para criar um endpoint de interface da Amazon VPC, consulte [Create an Amazon VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) no *Guia do AWS PrivateLink*.

## Acessar os endpoints de interface do Amazon DynamoDB
<a name="accessing-ddb-interface-endpoints"></a>

Quando você cria um endpoint de interface, o DynamoDB gera dois tipos de nome de DNS do DynamoDB específicos do endpoint: *regional* e *zonal*. 
+ Os nomes de DNS *regionais* incluem um ID de endpoint da Amazon VPC exclusivo, um identificador de serviço, a Região da AWS e `vpce.amazonaws.com` no respectivo nome. Por exemplo, para o ID de endpoint da Amazon VPC `vpce-1a2b3c4d`, o nome de DNS gerado pode ser semelhante a `vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com`.
+ Os nomes DNS *zonais* incluem a zona de disponibilidade. Por exemplo, `vpce-1a2b3c4d-5e6f-us-east-1a.dynamodb.us-east-1.vpce.amazonaws.com`. Você pode usar essa opção se sua arquitetura isola zonas de disponibilidade. Por exemplo, você pode usar para contenção de falhas ou para reduzir os custos regionais de transferência de dados.

**nota**  
Para ter a confiabilidade ideal, recomendamos implantar o serviço em três zonas de disponibilidade, no mínimo.

## Acessar tabelas do DynamoDB e operações de API de controle por meio dos endpoints da interface do DynamoDB
<a name="accessing-tables-apis-from-interface-endpoints"></a>

É possível usar a AWS CLI ou os SDKs da AWS para acessar as tabelas do DynamoDB e controlar as operações da API por meio dos endpoints de interface do DynamoDB.

### Exemplos da AWS CLI
<a name="privatelink-ddb-aws-cli-examples"></a>

Para acessar as tabelas do DynamoDB ou as operações da API de controle do DynamoDB por meio dos endpoints de interface do DynamoDB em comandos da AWS CLI, use os parâmetros `--region` e `--endpoint-url`.

**Exemplo: Criar um endpoint da VPC**

```
aws ec2 create-vpc-endpoint \
--region us-east-1 \
--service-name com.amazonaws.us-east-1.dynamodb \
--vpc-id client-vpc-id \
--subnet-ids client-subnet-id \
--vpc-endpoint-type Interface \
--security-group-ids client-sg-id
```

**Exemplo: Modificar um endpoint da VPC**

```
aws ec2 modify-vpc-endpoint \
--region us-east-1 \
--vpc-endpoint-id client-vpc-endpoint-id \
--policy-document policy-document \ #example optional parameter
--add-security-group-ids security-group-ids \ #example optional parameter 
# any additional parameters needed, see Privatelink documentation for more details
```

**Exemplo: Listar tabelas usando um URL de endpoint**

No exemplo a seguir, substitua a região `us-east-1` e o nome de DNS do ID de endpoint da VPC `vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
aws dynamodb --region us-east-1 --endpoint https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com list-tables
```

### AWSExemplos de SDK
<a name="privatelink-ddb-aws-sdk-examples"></a>

Para acessar tabelas do DynamoDB ou operações de API de controle do DynamoDB por meio de endpoints de interface do DynamoDB ao usar os SDKs da AWS, atualize os SDKs para a versão mais recente. Depois, configure os clientes para usar um URL de endpoint para acessar uma tabela ou uma operação de API de controle do DynamoDB por meio de endpoints de interface do DynamoDB.

------
#### [ SDK for Python (Boto3) ]

**Exemplo: Usar um URL de endpoint para acessar uma tabela do DynamoDB**  
No exemplo a seguir, substitua a região `us-east-1` e o ID de endpoint da VPC `https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
ddb_client = session.client(
service_name='dynamodb',
region_name='us-east-1',
endpoint_url='https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com'
)
```

------
#### [ SDK for Java 1.x ]

**Exemplo: Usar um URL de endpoint para acessar uma tabela do DynamoDB**  
No exemplo a seguir, substitua a região `us-east-1` e o ID de endpoint da VPC `https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
//client build with endpoint config  
final AmazonDynamoDB dynamodb = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
        new AwsClientBuilder.EndpointConfiguration(
                "https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com",
                Regions.DEFAULT_REGION.getName()
        )
).build();
```

------
#### [ SDK for Java 2.x ]

**Exemplo: Usar um URL de endpoint para acessar uma tabela do DynamoDB**  
No exemplo a seguir, substitua a região us-east-1 e o ID de endpoint da VPC https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com por suas próprias informações.

```
Region region = Region.US_EAST_1;
dynamoDbClient = DynamoDbClient.builder().region(region)
.endpointOverride(URI.create("https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com"))
.build()
```

------

## Atualizar uma configuração de DNS on-premises
<a name="updating-on-premises-dns-config"></a>

 Ao usar nomes de DNS específicos do endpoint para acessar os endpoints de interface do DynamoDB, não é necessário atualizar seu resolvedor de DNS on-premises. É possível resolver o nome de DNS específico do endpoint com o endereço IP privado do endpoint de interface pelo domínio de DNS público do DynamoDB. 

### Usar endpoints de interface para acessar o DynamoDB sem um endpoint de gateway ou um gateway da internet na Amazon VPC
<a name="using-interface-endpoints"></a>

Os endpoints de interface na Amazon VPC podem rotear aplicações na Amazon VPC e aplicações on-premises para o DynamoDB pela rede da Amazon, conforme ilustrado no diagrama a seguir.

![\[O diagrama de fluxo de dados mostra o acesso de aplicações on-premises e na Amazon VPC para o DynamoDB usando um endpoint de interface e o AWS PrivateLink.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/PrivateLink-interfaceEndpoints.png)


O diagrama ilustra o seguinte: 
+ Sua rede on-premises usa o Direct Connect ou o Site-to-Site VPN para se conectar à Amazon VPC A.
+ Suas aplicações on-premises e na Amazon VPC A usam nomes de DNS específicos do endpoint para acessar o DynamoDB por meio do endpoint de interface do DynamoDB.
+ As aplicações on-premises enviam dados ao endpoint de interface na Amazon VPC por meio do Direct Connect (ou do Site-to-Site VPN). O AWS PrivateLink move os dados do endpoint de interface para o DynamoDB por meio da rede da AWS.
+ As aplicações na Amazon VPC também enviam o tráfego ao endpoint de interface. O AWS PrivateLink move os dados do endpoint de interface para o DynamoDB por meio da rede da AWS.

### Usar endpoints de gateway e de interface juntos na mesma Amazon VPC para acessar o DynamoDB
<a name="using-gateway-and-interface-endpoints"></a>

É possível criar endpoints de interface e reter o endpoint de gateway existente na mesma Amazon VPC, como mostra o diagrama a seguir. Ao adotar essa abordagem, você permite que as aplicações na Amazon VPC continuem acessando o DynamoDB por meio do endpoint de gateway, que não é cobrado. Depois, apenas as aplicações on-premises usariam endpoints de interface para acessar o DynamoDB. Para acessar o DynamoDB dessa maneira, é necessário atualizar as aplicações on-premises para usar nomes de DNS específicos do endpoint para DynamoDB.

![\[Diagrama de fluxo de dados mostrando o acesso ao DynamoDB por meio de endpoints de gateway e de interface juntos.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/PL-Image2-InterfaceAndGatewayEP.png)


O diagrama ilustra o seguinte: 
+ As aplicações on-premises usam nomes de DNS específicos do endpoint para enviar dados ao endpoint de interface dentro da Amazon VPC por meio do Direct Connect (ou do Site-to-Site VPN). O AWS PrivateLink move os dados do endpoint de interface para o DynamoDB por meio da rede da AWS.
+ Usando nomes regionais padrão do DynamoDB, as aplicações na Amazon VPC enviam dados ao endpoint de gateway que se conecta ao DynamoDB pela rede da AWS.

Para ter mais informações sobre endpoints de gateway, consulte [Gateway Amazon VPC endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html) no *Guia do usuário da Amazon VPC*. 

## Criar uma política de endpoint da Amazon VPC para o DynamoDB
<a name="creating-vpc-endpoint-policy"></a>

É possível vincular uma política de endpoint ao endpoint da Amazon VPC que controla o acesso ao DynamoDB. Essa política especifica as seguintes informações: 
+ A entidade principal do AWS Identity and Access Management (IAM) que pode executar ações 
+ As ações que podem ser executadas 
+ Os recursos nos quais as ações podem ser executadas 

**Topics**
+ [Exemplo: Restringir o acesso a uma tabela específica por meio de um endpoint da Amazon VPC](#privatelink-example-restrict-access-to-bucket)

### Exemplo: Restringir o acesso a uma tabela específica por meio de um endpoint da Amazon VPC
<a name="privatelink-example-restrict-access-to-bucket"></a>

É possível criar uma política de endpoint que restrinja o acesso somente a tabelas específicas do DynamoDB. Esse tipo de política será útil se houver outros Serviços da AWS na Amazon VPC que usem tabelas. A política de tabela a seguir restringe o acesso somente a `DOC-EXAMPLE-TABLE`. Para usar essa política de endpoint, substitua `DOC-EXAMPLE-TABLE` pelo nome da tabela.

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Id": "Policy1216114807515",
  "Statement": [
    { "Sid": "Access-to-specific-table-only",
      "Principal": "*",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:dynamodb:us-east-1:111122223333:table/DOC-EXAMPLE-TABLE",
                   "arn:aws:dynamodb:us-east-1:111122223333:table/DOC-EXAMPLE-TABLE/*"]
    }
  ]
}
```

------

## Usar endpoints do DynamoDB com acesso privado ao Console de gerenciamento da AWS
<a name="ddb-endpoints-private-access"></a>

Você deve definir a configuração do DNS para o DynamoDB e o DynamoDB Streams ao usar endpoints da VPC com o [console do DynamoDB](https://console.aws.amazon.com/dynamodb) no [Acesso privado ao Console de gerenciamento da AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/console-private-access.html).

Para configurar o DynamoDB para poder ser acessado no Acesso privado ao Console de gerenciamento da AWS, você deve criar os dois endpoints da VPC abaixo:
+ `com.amazonaws.<region>.dynamodb`
+ `com.amazonaws.<region>.dynamodb-streams`

Ao criar os endpoints da VPC, navegue até o console do Route53 e crie uma zona hospedada privada para o DynamoDB usando o endpoint regional `dynamodb.us-east-1.amazonaws.com`.

Crie os dois registros de alias abaixo na zona hospedada privada:
+ `dynamodb.<region>.amazonaws.com` que direciona o tráfego para o endpoint da VPC `com.amazonaws.<region>.dynamodb`.
+ `streams.dynamodb.<region>.amazonaws.com` que direciona o tráfego para o endpoint da VPC `com.amazonaws.<region>.dynamodb-streams`.

# AWS PrivateLink para DynamoDB Streams
<a name="privatelink-streams"></a>

Com o AWS PrivateLink para Amazon DynamoDB Streams, é possível provisionar endpoints de interface da Amazon VPC (endpoints de interface) em sua nuvem privada virtual (Amazon VPC). Esses endpoints podem ser acessados diretamente por meio da VPN e do Direct Connect pelas aplicações que estão no ambiente on-premises ou por emparelhamento da Amazon VPC pelas aplicações que estão em uma Região da AWS diferente. Usando o AWS PrivateLink e endpoints de interface, é possível simplificar a conectividade de rede privada das aplicações com o DynamoDB Streams.

As aplicações na Amazon VPC não necessitam que endereços IP públicos se comuniquem com o DynamoDB Streams usando endpoints da interface da Amazon VPC para operações do DynamoDB Streams. Os endpoints de interface são representados por uma ou mais interfaces de rede elástica (ENIs) que recebem endereços IP privados de sub-redes na Amazon VPC. As solicitações ao DynamoDB Streams por meio de endpoints de interface permanecem na rede da Amazon. Também é possível acessar endpoints de interface na Amazon VPC via aplicações on-premises por meio do Direct Connect ou do AWS Virtual Private Network (AWS VPN). Para ter mais informações sobre como conectar sua AWS Virtual Private Network à rede on-premises, consulte o [https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) e o [https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html). 

Para ter informações gerais sobre endpoints de interface, consulte [Interface Amazon VPC endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) (AWS PrivateLink).

**nota**  
Somente endpoints de interface são aceitos no DynamoDB Streams. Endpoints de gateway não são aceitos.

**Topics**
+ [Considerações ao usar o AWS PrivateLink para Amazon DynamoDB Streams](#privatelink-streams-considerations)
+ [Criar um Amazon VPC endpoint](#privatelink-streams-vpc-endpoint)
+ [Acessar os endpoints de interface do Amazon DynamoDB Streams](#privatelink-streams-accessing-ddb-interface-endpoints)
+ [Acessar operações de API do DynamoDB Streams por meio de endpoints da interface do DynamoDB Streams](#privatelink-streams-accessing-api-operations-from-interface-endpoints)
+ [AWSExemplos de SDK](#privatelink-streams-aws-sdk-examples)
+ [Criar uma política de endpoint da Amazon VPC para o DynamoDB Streams](#privatelink-streams-creating-vpc-endpoint-policy)
+ [Usar endpoints do DynamoDB com acesso privado ao Console de gerenciamento da AWS](#ddb-streams-endpoints-private-access)

## Considerações ao usar o AWS PrivateLink para Amazon DynamoDB Streams
<a name="privatelink-streams-considerations"></a>

As considerações sobre a Amazon VPC se aplicam ao AWS PrivateLink para Amazon DynamoDB Streams. Para ter mais informações, consulte [Interface endpoint considerations](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) e [AWS PrivateLink quotas](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html). As restrições a seguir são aplicáveis.

O AWS PrivateLink para Amazon DynamoDB Streams não é compatível com o seguinte: 
+ Transport Layer Security (TLS) 1.1
+ Serviços de Sistema de Nomes de Domínio (DNS) privados e híbridos

**Importante**  
Não crie zonas hospedadas privadas para substituir os nomes de DNS dos endpoints do DynamoDB Streams para rotear o tráfego para os endpoints da interface. As configurações de DNS do DynamoDB podem mudar com o tempo, e substituições personalizadas de DNS podem fazer com que as solicitações sejam roteadas inesperadamente por endereços IP públicos em vez de seus endpoints de interface.   
 Para acessar o DynamoDB Streams por meio do AWS PrivateLink, configure seus clientes para usar diretamente a URL do endpoint da VPC da Amazon (por exemplo `https://vpce-1a2b3c4d-5e6f.streams.dynamodb.region.vpce.amazonaws.com`).

**nota**  
Os tempos limite de conectividade de rede com os endpoints do AWS PrivateLink não estão dentro do escopo das respostas de erro do DynamoDB e precisam ser tratados adequadamente pelas aplicações que se conectam aos endpoints do AWS PrivateLink.

## Criar um Amazon VPC endpoint
<a name="privatelink-streams-vpc-endpoint"></a>

Para criar um endpoint de interface da Amazon VPC, consulte [Create an Amazon VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) no *Guia do AWS PrivateLink*.

## Acessar os endpoints de interface do Amazon DynamoDB Streams
<a name="privatelink-streams-accessing-ddb-interface-endpoints"></a>

Ao criar um endpoint de interface, o DynamoDB gera dois tipos de nome de DNS do DynamoDB Streams específicos do endpoint: *regional* e *zonal*. 
+ Os nomes de DNS *regionais* incluem um ID de endpoint da Amazon VPC exclusivo, um identificador de serviço, a Região da AWS e `vpce.amazonaws.com` no respectivo nome. Por exemplo, para o ID de endpoint da Amazon VPC `vpce-1a2b3c4d`, o nome de DNS gerado pode ser semelhante a `vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com`.
+ Os nomes DNS *zonais* incluem a zona de disponibilidade. Por exemplo, `vpce-1a2b3c4d-5e6f-us-east-1a.streams.dynamodb.us-east-1.vpce.amazonaws.com`. Você pode usar essa opção se sua arquitetura isola zonas de disponibilidade. Por exemplo, você pode usar para contenção de falhas ou para reduzir os custos regionais de transferência de dados.

## Acessar operações de API do DynamoDB Streams por meio de endpoints da interface do DynamoDB Streams
<a name="privatelink-streams-accessing-api-operations-from-interface-endpoints"></a>

É possível usar a AWS CLI ou os SDKs da AWS para acessar as operações de API do DynamoDB Streams por meio dos endpoints de interface do DynamoDB Streams.

### Exemplos da AWS CLI
<a name="privatelink-streams-aws-cli-examples"></a>

Para acessar as operações de API ou do DynamoDB Streams por meio dos endpoints de interface do DynamoDB Streams em comandos da AWS CLI, use os parâmetros `--region` e `--endpoint-url`.

**Exemplo: Criar um endpoint da VPC**

```
aws ec2 create-vpc-endpoint \
--region us-east-1 \
--service-name com.amazonaws.us-east-1.dynamodb-streams \
--vpc-id client-vpc-id \
--subnet-ids client-subnet-id \
--vpc-endpoint-type Interface \
--security-group-ids client-sg-id
```

**Exemplo: Modificar um endpoint da VPC**

```
aws ec2 modify-vpc-endpoint \
--region us-east-1 \
--vpc-endpoint-id client-vpc-endpoint-id \
--policy-document policy-document \ #example optional parameter
--add-security-group-ids security-group-ids \ #example optional parameter 
# any additional parameters needed, see Privatelink documentation for more details
```

**Exemplo: listar tabelas usando um URL de endpoint**

No exemplo a seguir, substitua a região `us-east-1` e o nome de DNS do ID de endpoint da VPC `vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
aws dynamodbstreams --region us-east-1 —endpoint https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com list-streams
```

## AWSExemplos de SDK
<a name="privatelink-streams-aws-sdk-examples"></a>

Para acessar operações de API do Amazon DynamoDB Streams por meio de endpoints de interface do DynamoDB Streams ao usar os SDKs da AWS, atualize os SDKs para a versão mais recente. Depois, configure os clientes para usar um URL de endpoint para uma operação de API do DynamoDB Streams por meio de endpoints de interface do DynamoDB Streams.

------
#### [ SDK for Python (Boto3) ]

**Exemplo: usar um URL de endpoint para acessar um fluxo do DynamoDB**  
No exemplo a seguir, substitua a região `us-east-1` e o ID de endpoint da VPC `https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
ddb_streams_client = session.client(
service_name='dynamodbstreams',
region_name='us-east-1',
endpoint_url='https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com'
)
```

------
#### [ SDK for Java 1.x ]

**Exemplo: usar um URL de endpoint para acessar um fluxo do DynamoDB**  
No exemplo a seguir, substitua a região `us-east-1` e o ID de endpoint da VPC `https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
//client build with endpoint config  
final AmazonDynamoDBStreams dynamodbstreams = AmazonDynamoDBStreamsClientBuilder.standard().withEndpointConfiguration(
        new AwsClientBuilder.EndpointConfiguration(
                "https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com",
                Regions.DEFAULT_REGION.getName()
        )
).build();
```

------
#### [ SDK for Java 2.x ]

**Exemplo: usar um URL de endpoint para acessar um fluxo do DynamoDB**  
No exemplo a seguir, substitua a região `us-east-1` e o ID de endpoint da VPC `https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com` por suas próprias informações.

```
Region region = Region.US_EAST_1;
dynamoDbStreamsClient = DynamoDbStreamsClient.builder().region(region)
.endpointOverride(URI.create("https://vpce-1a2b3c4d-5e6f.streams.dynamodb.us-east-1.vpce.amazonaws.com"))
.build()
```

------

## Criar uma política de endpoint da Amazon VPC para o DynamoDB Streams
<a name="privatelink-streams-creating-vpc-endpoint-policy"></a>

É possível anexar uma política de endpoint ao endpoint da Amazon VPC que controle o acesso ao DynamoDB Streams. Essa política especifica as seguintes informações: 
+ A entidade principal do AWS Identity and Access Management (IAM) que pode executar ações 
+ As ações que podem ser executadas 
+ Os recursos nos quais as ações podem ser executadas 

**Topics**
+ [Exemplo: restringir o acesso a um fluxo específico por meio de um endpoint da Amazon VPC](#privatelink-streams-example-restrict-access-to-bucket)

### Exemplo: restringir o acesso a um fluxo específico por meio de um endpoint da Amazon VPC
<a name="privatelink-streams-example-restrict-access-to-bucket"></a>

É possível criar uma política de endpoint que restrinja o acesso somente a tabelas específicas do DynamoDB Streams. Esse tipo de política será útil se houver outros Serviços da AWS na Amazon VPC que usem o DynamoDB Streams. A política de fluxos a seguir restringe o acesso somente ao fluxo `2025-02-20T11:22:33.444` anexado a `DOC-EXAMPLE-TABLE`. Para usar essa política de endpoint, substitua `DOC-EXAMPLE-TABLE` pelo nome da tabela e `2025-02-20T11:22:33.444` pelo rótulo do fluxo.

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Id": "Policy1216114807515",
  "Statement": [
    { "Sid": "Access-to-specific-stream-only",
      "Principal": "*",
      "Action": [
        "dynamodb:DescribeStream",
        "dynamodb:GetRecords"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:dynamodb:us-east-1:111122223333:table/table-name/stream/2025-02-20T11:22:33.444"]
    }
  ]
}
```

------

**nota**  
Endpoints de gateway não são aceitos no DynamoDB Streams.

## Usar endpoints do DynamoDB com acesso privado ao Console de gerenciamento da AWS
<a name="ddb-streams-endpoints-private-access"></a>

Você deve definir a configuração do DNS para o DynamoDB e o DynamoDB Streams ao usar endpoints da VPC com o [console do DynamoDB](https://console.aws.amazon.com/dynamodb) no [Acesso privado ao Console de gerenciamento da AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/console-private-access.html).

Para configurar o DynamoDB para poder ser acessado no Acesso privado ao Console de gerenciamento da AWS, você deve criar os dois endpoints da VPC abaixo:
+ `com.amazonaws.<region>.dynamodb`
+ `com.amazonaws.<region>.dynamodb-streams`

Ao criar os endpoints da VPC, navegue até o console do Route53 e crie uma zona hospedada privada para o DynamoDB usando o endpoint regional `dynamodb.us-east-1.amazonaws.com`.

Crie os dois registros de alias abaixo na zona hospedada privada:
+ `dynamodb.<region>.amazonaws.com` que direciona o tráfego para o endpoint da VPC `com.amazonaws.<region>.dynamodb`.
+ `streams.dynamodb.<region>.amazonaws.com` que direciona o tráfego para o endpoint da VPC `com.amazonaws.<region>.dynamodb-streams`.

# Usar o AWS PrivateLink DynamoDB Accelerator (DAX)
<a name="dax-private-link"></a>

O AWS PrivateLink para o DynamoDB Accelerator (DAX) permite que você acesse com segurança as APIs de gerenciamento do DAX, como `CreateCluster`, `DescribeClusters` e `DeleteCluster` por meio de endereços IP privados em sua nuvem privada virtual (VPC). Esse recurso permite que você acesse serviços do DAX de forma privada por meio de suas aplicações sem expor o tráfego à Internet pública.

O DAX PrivateLink comporta endpoints de pilha dupla (`dax.{region}.api.aws`), permitindo conectividade IPv4 e IPv6. Com o AWS PrivateLink para DAX, os clientes podem acessar o serviço usando nomes do DNS privados. O suporte a endpoint de pilha dupla garante conectividade transparente e, ao mesmo tempo, mantém a privacidade da rede. Isso permite que você acesse o DAX por meio da Internet pública e de endpoints da VPC sem fazer nenhuma alteração na configuração do SDK.

## Considerações sobre o uso do AWS PrivateLink para DynamoDB Accelerator (DAX)
<a name="dax-privatelink-considerations"></a>

Quando você implementa o AWS PrivateLink para DynamoDB Accelerator (DAX), várias considerações importantes devem ser levadas em consideração.

Antes de configurar um endpoint de interface para o DAX, pense no seguinte:
+ Os endpoints da interface do DAX só aceitam acesso às APIs de gerenciamento do DAX na mesma Região da AWS. Você não pode usar um endpoint de interface para acessar as APIs de gerenciamento do DAX em outras regiões.
+ Para acessar o Console de gerenciamento da AWS de modo privado para gerenciamento do DAX, talvez seja necessário criar endpoints da VPC adicionais para serviços, como o `com.amazonaws.region.console` e serviços relacionados.
+ Você é cobrado pela criação e pelo uso de um endpoint de interface para DAX. Para obter informações sobre preços, consulte [AWS PrivateLink preços](https://aws.amazon.com/vpc/pricing/).

## Como o AWS PrivateLink funciona com o DAX
<a name="dax-privatelink-how-it-works"></a>

Quando você cria um endpoint de interface para o DAX:

1. A AWS cria uma interface de rede de endpoint em cada sub-rede que você habilitar para o endpoint de interface.

1. Estas são interfaces de rede gerenciadas pelo solicitante que servem como ponto de entrada para o tráfego destinado ao DAX.

1. Depois, você pode acessar o DAX por meio de endereços IP privados em sua VPC.

1. Essa arquitetura permite que você use grupos de segurança da VPC para gerenciar o acesso aos endpoints.

1. As aplicações podem acessar o DynamoDB e o DAX por meio de seus respectivos endpoints de interface em uma VPC, além de permitir que aplicações on-premises se conectem via Direct Connect ou VPN.

1. Isso fornece um modelo de conectividade consistente em ambos os serviços, simplifica a arquitetura e melhora a segurança ao manter o tráfego na rede da AWS.

## Criar endpoints da interface para DAX
<a name="dax-privatelink-creating-endpoints"></a>

É possível criar um endpoint de interface para se conectar ao DAX usando o Console de gerenciamento da AWS, o AWS SDK, o CloudFormation ou a API da AWS.

**Como criar um endpoint de interface para DAX usando o console**

1. Acesse o console da Amazon VPC em [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. No painel de navegação, escolha **Endpoints**.

1. Escolha **Create Endpoint** (Criar endpoint).

1. Em **Categoria de serviço**, escolha **Serviços da AWS**e, em **Nome do serviço**, pesquise e selecione `com.amazonaws.region.dax`.

1. Em **VPC**, selecione a VPC a partir da qual você deseja acessar o DAX e, em **Sub-redes**, selecione as sub-redes nas quais a AWS criará as interfaces de rede de endpoint.

1. Em **Grupos de segurança**, selecione ou crie os grupos de segurança para associar às interfaces de rede do endpoint.

1. Em **Política**, mantenha o **acesso total** padrão ou personalize conforme necessário.

1. Selecione **Habilitar nome de DNS** para habilitar o DNS privado para o endpoint. Mantenha o nome de DNS privado habilitado para evitar alterações na configuração do SDK. Quando habilitado, suas aplicações podem continuar usando o nome DNS do serviço padrão (exemplo: `dax.region.amazonaws.com`). A AWS cria uma zona hospedada privada em sua VPC que resolve esse nome para o endereço IP privado do seu endpoint.
**nota**  
Use nomes de DNS regionais, se necessário. Não é recomendado usar nomes de DNS por zona. Além disso, selecione sub-redes de três ou mais AZs para garantir a máxima disponibilidade por meio do PrivateLink.

1. Escolha **Criar endpoint**.

**Como criar um endpoint de interface para o DAX usando a AWS CLI**  
Use o comando `create-vpc-endpoint` com o parâmetro `vpc-endpoint-type` definido como `Interface` e o parâmetro `service-name` como `com.amazonaws.region.dax`.

```
aws ec2 create-vpc-endpoint \
    --vpc-id vpc-ec43eb89 \
    --vpc-endpoint-type Interface \
    --service-name com.amazonaws.us-east-1.dax \
    --subnet-ids subnet-abcd1234 subnet-1a2b3c4d \
    --security-group-ids sg-1a2b3c4d \
    --private-dns-enabled
```

## Recursos adicionais
<a name="dax-privatelink-resources"></a>

Para acessar mais informações sobre AWS PrivateLink e endpoints da VPC, consulte os seguintes recursos:
+ [AWS PrivateLink para DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/privatelink-interface-endpoints.html)
+ [AWS PrivateLink para DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/privatelink-streams.html)
+ [Conectar sua VPC a outro serviços usando o AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)
+ [Simplifique a conectividade privada com o DynamoDB com AWS PrivateLink](https://aws.amazon.com/blogs//database/simplify-private-connectivity-to-amazon-dynamodb-with-aws-privatelink)
+ [AWS PrivateLink Whitepaper da](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-privatelink.html)

# Análise de configuração e vulnerabilidade no Amazon DynamoDB
<a name="configuration-vulnerability"></a>

AWSA se encarrega das tarefas básicas de segurança, como aplicação de patches a bancos de dados e sistemas operacionais (SOs) convidados, configuração de firewalls e recuperação de desastres. Esses procedimentos foram revisados e certificados por terceiros certificados. Para obter mais detalhes, consulte os recursos a seguir:
+ [Validação de conformidade para o Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Compliance.html)
+ [Modelo de responsabilidade compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/)
+ [Amazon Web Services: Overview of security processes](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf) (Amazon Web Services: visão geral do processo de segurança) (whitepaper)

As seguintes práticas recomendadas de segurança também abordam a análise de configuração e vulnerabilidade no Amazon DynamoDB:
+ [Monitorar a compatibilidade do DynamoDB com o Regras do AWS Config](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices-security-detective.html#rules)
+ [Monitorar a configuração do DynamoDB com o AWS Config](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices-security-detective.html#config)

# Práticas recomendadas de segurança para o Amazon DynamoDB
<a name="best-practices-security"></a>

O Amazon DynamoDB fornece uma série de recursos de segurança a serem considerados no desenvolvimento e na implementação das suas próprias políticas de segurança. As práticas recomendadas a seguir são diretrizes gerais e não representam uma solução completa de segurança. Como essas práticas recomendadas podem não ser adequadas ou suficientes para o seu ambiente, trate-as como considerações úteis em vez de prescrições.

**Topics**
+ [Práticas recomendadas de segurança preventiva do DynamoDB](best-practices-security-preventative.md)
+ [Práticas recomendadas de segurança de detecção do DynamoDB](best-practices-security-detective.md)

# Práticas recomendadas de segurança preventiva do DynamoDB
<a name="best-practices-security-preventative"></a>

As seguintes práticas recomendadas podem ajudar a antecipar e evitar incidentes de segurança no Amazon DynamoDB.

**Criptografia em repouso**  
O DynamoDB criptografa em repouso todos os dados de usuário gravados em tabelas, índices, streams e backups, usando chaves de criptografia armazenadas no [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/). Isso oferece uma camada de proteção de dados adicional ao proteger seus dados contra acesso não autorizado ao armazenamento subjacente.  
Você pode especificar se o DynamoDB deve usar um Chave pertencente à AWS (tipo de criptografia padrão), um Chave gerenciada pela AWS ou uma chave gerenciada pelo cliente para criptografar os dados do usuário. Para obter mais informações, consulte [Criptografia em repouso do Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html).

**Usar perfis do IAM para autenticar o acesso ao DynamoDB**  
Para que usuários, aplicações e outros serviços da AWS possam acessar o DynamoDB, eles devem incluir credenciais da AWS válidas em suas solicitações à AWS API. Você não deve armazenar credenciais da AWS diretamente na aplicação ou na instância do EC2. Essas são credenciais de longo prazo que não são automaticamente alternadas e, portanto, podem ter impacto comercial significativo se forem comprometidas. Um perfil do IAM permite obter chaves de acesso temporárias que podem ser usadas para acessar os serviços e recursos da AWS.  
Para obter mais informações, consulte [Gerenciamento de identidade e acesso no Amazon DynamoDB](security-iam.md).

**Usar políticas o IAM para autorizações de base do DynamoDB**  
Ao conceder permissões, você decide quem as recebe, a quais APIs do DynamoDB as permissões se referem e as ações específicas que deseja permitir nesses recursos. A implementação do privilégio mínimo é fundamental para reduzir o risco de segurança e o impacto que pode resultar de erros ou usuários mal-intencionados.  
Anexe políticas de permissões para identidades do IAM (ou seja, usuários, grupos e perfis) e, assim, dê permissões para eles executarem operações nos recursos do DynamoDB.  
Para isso, você pode usar o seguinte:  
+ [AWS Políticas gerenciadas (predefinidas) do](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html#access-policy-examples-aws-managed)
+ [Políticas gerenciadas pelo cliente](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html#access-policy-examples-for-sdk-cli)

**Uso de condições de política do IAM para controle de acesso refinado**  
Ao conceder permissões no DynamoDB, você pode especificar as condições que determinam como uma política de permissões entra em vigor. A implementação do privilégio mínimo é fundamental para reduzir o risco de segurança e o impacto que pode resultar de erros ou usuários mal-intencionados.  
É possível especificar as condições ao conceder permissões usando uma política do IAM. Por exemplo, você pode fazer o seguinte:  
+ Conceder permissões a fim de permitir acesso somente leitura aos usuários para determinados itens e atributos em uma tabela ou um índice secundário.
+ Conceder permissões para permitir somente acesso de gravação aos usuários para determinados atributos em uma tabela com base na identidade desse usuário.
 Para obter mais informações, consulte [Como usar condições de política do IAM para um controle de acesso refinado](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html).

**Usar um endpoint da VPC e políticas para acessar o DynamoDB**  
Se você só precisa de acesso ao DynamoDB a partir de uma nuvem privada virtual (VPC), use um endpoint da VPC para limitar o acesso somente a partir da VPC requerida. Fazendo isso, você evita que o tráfego atravesse para a Internet pública e esteja sujeito a esse ambiente.  
Com um endpoint da VPC para o DynamoDB, você tem controle e limita o acesso usando o seguinte:  
+ Políticas de endpoint da VPC: essas políticas são aplicadas ao endpoint da VPC do DynamoDB. Elas permitem controle e limite de acesso da API à tabela do DynamoDB.
+ Politicas do IAM: ao usar a condição `aws:sourceVpce` nas políticas associadas a usuários, grupos ou perfis, você pode reforçar que todo o acesso à tabela do DynamoDB é feito por meio do endpoint da VPC especificado.
 Para obter mais informações, consulte [Endpoints para o Amazon DynamoDB](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-ddb.html).

**Considere utilizar a criptografia do lado do cliente**  
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. A criptografia dos seus dados confidenciais em trânsito e em repouso ajuda você a garantir que os dados em texto simples não estejam disponíveis a terceiros.   
 O [SDK de criptografia de banco de dados da AWS para o DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html) é uma biblioteca de software que ajuda a proteger os dados de tabela antes que eles sejam enviados ao DynamoDB. Ele criptografa, assina, verifica e descriptografa os itens da tabela do DynamoDB. Você controla quais atributos são criptografados e assinados.

**Considerações sobre chave primária**  
Não use nomes confidenciais nem dados confidenciais em texto simples na [chave primária](HowItWorks.Partitions.md) para a tabela e os índices secundários globais. Os nomes das chaves aparecerão na definição da tabela. Por exemplo, os nomes de chave primária podem ser acessados por qualquer pessoa com permissão para chamar [DescribeTable](WorkingWithTables.Basics.md#WorkingWithTables.Basics.DescribeTable). Os valores das chaves podem aparecer no [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) e em outros logs. Além disso, o DynamoDB usa os valores das chaves para distribuir dados e direcionar solicitações, e os administradores da AWS podem observar os valores para manter a integridade do serviço.  
Se você precisar usar dados confidenciais na tabela ou valores de chave de GSI, recomendamos usar criptografia de cliente de ponta a ponta. Isso permite que você faça referências de chave-valor aos dados e garanta que eles nunca apareçam sem criptografia nos logs relacionados do DynamoDB. Uma forma de fazer isso é usar o [SDK de criptografia de banco de dados da AWS para DynamoDB](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/client-server-side.html), mas isso não é obrigatório. Se você usa sua própria solução, sempre é necessário utilizar um algoritmo de criptografia suficientemente seguro. Você não deve usar opções não criptográficas, como um hash, pois, na maioria das situações, elas não são consideradas suficientemente seguras.  
Se os nomes de chave primária forem confidenciais, recomendamos usar ``pk`` e ``sk`` em vez disso. Essa é uma prática recomendada geral que flexibiliza o design da chave de partição.   
Sempre consulte especialistas em segurança ou a equipe de contas da AWS se não souber ao certo qual seria a escolha certa. 

# Práticas recomendadas de segurança de detecção do DynamoDB
<a name="best-practices-security-detective"></a>

As práticas recomendadas a seguir para o Amazon DynamoDB podem ajudar a detectar pontos fracos e incidentes potenciais de segurança.

**Usar o AWS CloudTrail para monitorar o uso de chaves do KMS gerenciadas pela AWS**  
Se você estiver usando uma [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para criptografia em repouso, o uso dessa chave é registrado em log no AWS CloudTrail. O CloudTrail fornece visibilidade da atividade do usuário ao registrar ações realizadas em sua conta. O CloudTrail registra informações importantes sobre cada ação, incluindo quem fez a solicitação, os serviços usados, as ações realizadas, os parâmetros das ações e os elementos de resposta retornados pelo serviço da AWS. Essas informações ajudam você a rastrear as alterações feitas em seus recursos da AWS e solucionar problemas operacionais. O CloudTrail facilita garantir a conformidade com as políticas internas e os padrões regulatórios.  
Use o CloudTrail para auditar o uso de chaves. O CloudTrail cria arquivos de log que contêm um histórico de chamadas da AWS API e eventos relacionados da sua conta. Esses arquivos de log incluem todas as solicitações da API do AWS KMS feitas com o Console de gerenciamento da AWS, AWS SDKs e ferramentas da linha de comando, como também pelos serviços integrados da AWS. Você pode usar esses arquivos de log para obter informações sobre quando a chave do KMS foi usada, a operação solicitada, a identidade do solicitante, o endereço IP de origem da solicitação e assim por diante. Para obter mais informações, consulte [Como registrar chamadas de API do AWS KMS com o AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html) no [Guia do usuário do AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/).

**Monitorar operações do DynamoDB usando o CloudTrail**  
O CloudTrail pode monitorar eventos de ambiente de gerenciamento e eventos de plano de dados. As operações do ambiente de gerenciamento permitem criar e gerenciar tabelas do DynamoDB. Elas também permitem que você trabalhe com índices, fluxos e outros objetos que são dependentes de tabelas. As operações do plano de dados permitem criar, ler, atualizar e excluir (também chamadas de *CRUD*) nos dados de uma tabela. Algumas das operações de plano de dados também permitem que você leia dados de um índice secundário. Para ativar o registro de eventos de plano de dados no CloudTrail, você precisará ativar o registro da atividade da API do plano de dados no CloudTrail. Para obter mais informações, consulte [Log de eventos de dados para trilhas](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html).  
Quando uma atividade ocorre no DynamoDB, essa atividade é registrada em um evento do CloudTrail com outros eventos de serviços da AWS no histórico de eventos. Para obter mais informações, consulte [Log de operações do DynamoDB usando o AWS CloudTrail](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/logging-using-cloudtrail.html). É possível visualizar, pesquisar e baixar eventos recentes em sua conta da AWS. Para obter mais informações, consulte [Visualizar eventos com o histórico de eventos CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html) no *Guia do usuário do AWS CloudTrail*.  
Para obter um registro contínuo de eventos na sua conta da AWS, incluindo eventos do DynamoDB, crie uma [trilha](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html). Uma trilha permite que o CloudTrail entregue arquivos de log a um bucket do Amazon Simple Storage Service (Amazon S3). Por padrão, quando você cria uma trilha no console, ela é aplicada a todas as regiões do AWS. A trilha registra eventos de todas as regiões na partição da AWS e fornece os arquivos de log ao bucket do S3 que você especificar. Além disso, é possível configurar outros serviços da AWS para analisar e agir melhor com base nos dados de eventos coletados nos logs do CloudTrail.

**Use o DynamoDB Streams para monitorar operações de plano de dados**  
O DynamoDB é integrado ao AWS Lambda para que você possa criar acionadores (pedaços de código que respondem automaticamente a eventos no DynamoDB Streams). Com os acionadores, você pode criar aplicações que reagem às modificações de dados em tabelas do DynamoDB.  
Se você habilitar o DynamoDB Streams em uma tabela, poderá associar o nome do recurso da Amazon (ARN) do fluxo a uma função do Lambda escrita por você. Imediatamente após um item da tabela ser modificado, um novo registro aparece no fluxo da tabela. O AWS Lambda pesquisa o fluxo e invoca a função do Lambda de forma síncrona ao detectar novos registros de fluxo. A função do Lambda pode realizar qualquer ação que você especificar, como enviar uma notificação ou iniciar um fluxo de trabalho.  
Para ver um exemplo, consulte [Tutorial: Como usar o AWS Lambda com o Amazon DynamoDB Streams](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb-example.html). Esse exemplo recebe uma entrada de evento do DynamoDB, processa as mensagens que ele contém e grava alguns dados de evento de entrada no Amazon CloudWatch Logs.

**Monitorar a configuração do DynamoDB com o AWS Config**  
Usando o [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html), você pode monitorar e gravar alterações de configuração de forma contínua dos seus recursos da AWS. Você também pode usar o AWS Config para fazer o inventário dos seus recursos da AWS. Quando uma alteração em um estado anterior é detectada, uma notificação do Amazon Simple Notification Service (Amazon SNS) pode ser entregue para que você revise e adote as medidas necessárias. Siga as orientações em [Configurar uma AWS Config com o console](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html), garantindo que os tipos de recursos do DynamoDB estejam incluídos.  
Você pode configurar o AWS Config para transmitir as alterações de configuração e notificações para um tópico do Amazon SNS. Por exemplo, quando um recurso é atualizado, você pode receber uma notificação em seu e-mail, para que possa visualizar as alterações. Você também pode ser notificado quando o AWS Config avaliar suas regras gerenciadas ou personalizadas em relação aos seus recursos.  
Para ver um exemplo, consulte [Notificações enviadas pelo AWS Config para um tópico do Amazon SNS](https://docs.aws.amazon.com/config/latest/developerguide/notifications-for-AWS-Config.html) no *Guia do desenvolvedor do AWS Config*.

**Monitorar a compatibilidade do DynamoDB com regras do AWS Config**  
AWS ConfigO rastreia continuamente as alterações de configuração que ocorrem entre seus recursos. Ele verifica se as mudanças violam qualquer condição nas regras. Se um recurso viola uma regra, o AWS Config sinaliza o recurso e a regra como não compatíveis.  
Ao usar o AWS Config para avaliar suas configurações de recurso, é possível avaliar se suas configurações de recurso atendem adequadamente a práticas internas e a diretrizes e regulamentações do setor. O AWS Config oferece [regras gerenciadas pela AWS](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html), que são regras predefinidas e personalizáveis que o AWS Config usa para avaliar se seus recursos da AWS estão em conformidade com as práticas recomendadas mais comuns.

**Marcar seus recursos do DynamoDB para identificação e automação**  
Você pode atribuir metadados aos seus recursos da AWS na forma de tags. Cada tag é um rótulo simples que consiste em uma chave definida pelo cliente e um valor opcional que pode facilitar o gerenciamento, a pesquisa e a filtragem de recursos.   
A atribuição de tags (tagging) permite a implementação de controles agrupados. Embora não haja tipos de tags inerentes, elas permitem categorizar recursos por finalidade, proprietário, ambiente ou outros critérios. Veja os seguintes exemplos:  
+ Segurança: usada para determinar requisitos como criptografia.
+ Confidencialidade: um identificador do nível de confidencialidade de dados específico permitido por um recurso.
+ Ambiente: usado para distinguir entre as infraestruturas de desenvolvimento, teste e produção.
Para obter mais informações, consulte [Estratégias de marcação da AWS](https://aws.amazon.com/answers/account-management/aws-tagging-strategies/) e [Marcação no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html).

**Monitore seu uso do Amazon DynamoDB em relação às práticas recomendadas de segurança usando o AWS Security Hub CSPM.**  
O CSPM do Security Hub usa controles de segurança para avaliar configurações de recursos e padrões de segurança que ajudam você a atender a vários frameworks de conformidade.  
Para acessar mais informações sobre como usar o Security Hub CSPM para avaliar os recursos do DynamoDB, consulte [Controles do Amazon DynamoDB](https://docs.aws.amazon.com/securityhub/latest/userguide/dynamodb-controls.html) no *Guia do usuário do AWS Security Hub CSPM*.