

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

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

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

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

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

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

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

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

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

****  

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

------

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

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

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

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

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

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