

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