

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

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

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

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

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

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

****  

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

------

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

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

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

****  

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

------

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

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

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

****  

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

------

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

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

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

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

****  

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

------

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

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

****  

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

------

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

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

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

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

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

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

****  

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

------

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

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

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

****  

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

------

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

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

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

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

****  

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

------