

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Políticas do Amazon Verified Permissions
<a name="policies"></a>

Uma *política* é uma declaração que permite ou proíbe uma *entidade principal* de realizar uma ou mais *ações* em um *recurso*. Cada política é avaliada independentemente de todas as outras políticas. Para obter mais informações sobre como as políticas do Cedar são estruturadas e avaliadas, consulte [Validação da política do Cedar com base no esquema](https://docs.cedarpolicy.com/policies/validation.html) no Guia de referência da linguagem de política Cedar.

Opcionalmente, você pode atribuir um nome de política a uma política. Os nomes das políticas devem ser exclusivos para todas as políticas no repositório de políticas e prefixados com`name/`. Você pode usar um nome de política no lugar do ID da política em operações do plano de controle que aceitam um `policyId` parâmetro. O exemplo a seguir usa um nome de política para recuperar uma política com`GetPolicy`.

```
$ aws verifiedpermissions get-policy \
    --policy-id name/example-policy \
    --policy-store-id PSEXAMPLEabcdefg111111
```

**Importante**  
Ao escrever políticas do Cedar que fazem referência a entidades principais, recursos e ações, você pode definir os identificadores exclusivos usados para cada um desses elementos. Convém seguir estas práticas recomendadas:  
**Use identificadores universalmente exclusivos (UUIDs) para todos os identificadores principais e de recursos.**  
Por exemplo, se o usuário `jane` for desligado da empresa e você permitir que outra pessoa use o nome `jane`, esse novo usuário terá acesso automaticamente a tudo o que é concedido pelas políticas que ainda fazem referência a `User::"jane"`. O Cedar não consegue fazer a distinção entre o novo usuário e o antigo. Essa orientação se aplica tanto aos identificadores de entidades principais quanto aos identificadores de recursos. Sempre use identificadores que sejam comprovadamente exclusivos e nunca sejam reutilizados para garantir que você não conceda acesso involuntariamente devido à presença de um identificador antigo em uma política.  
Quando você usa um UUID para uma entidade, recomendamos que você o siga com o especificador de comentário // e o nome “amigável” da sua entidade. Isso torna as políticas mais fáceis de entender. Por exemplo: principal == Role: :"a1b2c3d4-e5f6-a1b2-c3d4- “,//administradores EXAMPLE11111
**Não inclua informações pessoais, confidenciais ou sigilosas como parte do identificador exclusivo de suas entidades principais ou recursos.** Esses identificadores são incluídos nas entradas de registro compartilhadas nas AWS CloudTrail trilhas.

**Topics**
+ [Criação de políticas estáticas do Amazon Verified Permissions](policies-create.md)
+ [Edição de políticas estáticas do Amazon Verified Permissions](policies-edit.md)
+ [Adicionando contexto](context.md)
+ [Usando a bancada de testes de permissões verificadas da Amazon](test-bench.md)
+ [Exemplos de políticas do Amazon Verified Permissions](policies-examples.md)

# Criação de políticas estáticas do Amazon Verified Permissions
<a name="policies-create"></a>

Você pode criar uma política estática para os diretores para permitir ou proibir que eles executem ações específicas em recursos específicos para seu aplicativo. Uma política estática tem valores específicos incluídos para `principal` e `resource` e está pronta para ser usada em decisões de autorização. 

------
#### [ Console de gerenciamento da AWS ]

**Para criar uma política estática**

1. Abra o [console de Permissões verificadas](https://console.aws.amazon.com/verifiedpermissions/). Escolha seu repositório de políticas.

1. No painel de navegação à esquerda, escolha **Políticas**.

1. Selecione **Criar política** e escolha **Criar política estática**.
**nota**  
Se você tiver uma declaração de política que gostaria de usar, vá para a **Etapa 8** e cole a política na seção **Política** na próxima página.

1. Na seção **Efeito da política**, escolha se a política **permitirá** ou **proibirá** quando uma solicitação corresponder à política. Se você escolher **Permitir**, a política permitirá que os diretores executem as ações nos recursos. Por outro lado, se você escolher **Proibir**, a política não permitirá que os diretores executem as ações nos recursos.

1. No campo **Escopo das entidades principais**, escolha o escopo das entidades principais aos quais a política se aplicará.
   + Escolha **Entidade principal específica** para aplicar a política a uma entidade principal específica. Especifique o tipo de entidade e o identificador do principal que terá permissão ou proibição de realizar as ações especificadas na política.
   + Escolha **Grupo de entidades principais** para aplicar a política a um grupo de entidades principais. Digite o nome do grupo de entidades principais no campo **Grupo de entidades principais**.
   + Escolha **Todas as entidades principais** para aplicar a política a todas as entidades principais do armazenamento de políticas.

1. No campo **Escopo dos recursos**, escolha o escopo dos recursos aos quais a política será aplicada.
   + Escolha **Recursos específicos** para aplicar a política a um recurso específico. Especifique o tipo de entidade e o identificador do recurso ao qual a política será aplicada.
   + Escolha **Grupo de recursos** para aplicar a política a um grupo de recursos. Digite o nome do grupo de recursos no campo **Grupo de recursos**.
   + Escolha **Todos os recursos** para aplicar a política a todos os recursos do armazenamento de políticas.

1. Na seção **Escopo das ações**, escolha o escopo dos recursos aos quais a política será aplicada.
   + Escolha **Conjunto específico de ações** para aplicar a política a um conjunto de ações. Marque as caixas de seleção ao lado das ações às quais a política será aplicada.
   + Escolha **Todas as ações** para aplicar a política a todas as ações do armazenamento de políticas.

1. Escolha **Próximo**.

1. Na seção **Política**, revise a política do Cedar. Você pode escolher **Formatar** para formatar a sintaxe da política com o espaçamento e o recuo recomendados. Para obter mais informações, consulte [Construção de políticas básicas no Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) no Guia de referência da linguagem de política Cedar.

1. Na seção **Detalhes**, digite uma descrição opcional para a política.

1. Selecione **Criar política**.

------
#### [ AWS CLI ]

**Para criar uma política estática**  
Você pode criar uma política estática usando a [CreatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicy.html)operação. O exemplo a seguir cria uma política estática simples.

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Description\": \"MyTestPolicy\", \"Statement\": \"permit(principal,action,resource) when {principal.owner == resource.owner};\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111
{
"Arn": "arn:aws:verifiedpermissions::123456789012:policy/PSEXAMPLEabcdefg111111/SPEXAMPLEabcdefg111111",
    "createdDate": "2023-05-16T20:33:01.730817+00:00",
    "lastUpdatedDate": "2023-05-16T20:33:01.730817+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC"
}
```

**Para criar uma política com um nome de política**  
Opcionalmente, você pode especificar um nome de política ao criar uma política. O nome deve ser exclusivo para todas as políticas no repositório de políticas e prefixado com`name/`. Você pode usar o nome no lugar do ID da política.

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Statement\": \"permit(principal, action, resource in Album::\\\"public_folder\\\");\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "resource": {
        "entityId": "public_folder",
        "entityType": "Album"
    }
}
```

**nota**  
Se você especificar um nome que já esteja associado a outra política no repositório de políticas, receberá um `ConflictException` erro.

------

# Edição de políticas estáticas do Amazon Verified Permissions
<a name="policies-edit"></a>

Você pode editar uma política estática existente no seu repositório de políticas. Você só pode atualizar diretamente as políticas estáticas. Para alterar uma política vinculada a um modelo, você deve atualizar o modelo de política. Para obter mais informações, consulte [Editando modelos de política de permissões verificadas da Amazon](policy-templates-edit.md).

Você pode alterar os seguintes elementos de uma política estática:
+ O `action` referenciada pela política.
+ Uma cláusula de condição, como `when` e `unless`.

Você não pode alterar os seguintes elementos de uma política estática. Para alterar qualquer um desses elementos, você precisará excluir e recriar a política.
+ Uma política de uma política estática para uma política vinculada a um modelo.
+ O efeito de uma política estática de `permit` ou`forbid`.
+ O `principal` referenciado por uma política estática.
+ O `resource` referenciado por uma política estática.

------
#### [ Console de gerenciamento da AWS ]

**Para editar uma política estática**

1. Abra o [console de Permissões verificadas](https://console.aws.amazon.com/verifiedpermissions/). Escolha seu repositório de políticas.

1. No painel de navegação à esquerda, escolha **Políticas**.

1. Escolha o botão de opção ao lado da política estática a ser editada e, em seguida, escolha **Editar**.

1. Na seção **Corpo da política**, atualize a `action` ou a cláusula de condição da política estática. Você não pode atualizar o efeito da política, a `principal` ou o `resource` da política.

1. Escolha **Atualizar política**.
**nota**  
Se a [validação da política](policy-validation-mode.md) estiver habilitada no armazenamento de políticas, a atualização de uma política estática fará com que o Verified Permissions valide a política com base no esquema no armazenamento de políticas. Se a política estática atualizada não passar pela validação, a operação falhará e a atualização não será salva.

------
#### [ AWS CLI ]

**Para editar uma política estática**  
Você pode editar uma política estática usando a [UpdatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdatePolicy.html)operação. O exemplo a seguir edita uma política estática simples. 

O exemplo usa o arquivo `definition.txt` para conter a definição da política.

```
{
    "static": {
        "description":  "Grant everyone of janeFriends UserGroup access to the vacationFolder Album",
        "statement": "permit(principal in UserGroup::\"janeFriends\", action, resource in Album::\"vacationFolder\" );"
    }
}
```

O comando a seguir faz referência a esse arquivo.

```
$ aws verifiedpermissions create-policy \
    --definition file://definition.txt \
    --policy-store-id PSEXAMPLEabcdefg111111

{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

**Para atualizar o nome de uma política**  
Você pode definir ou atualizar o nome de uma política ao atualizar uma política. O nome deve ser exclusivo para todas as políticas no repositório de políticas e prefixado com`name/`. Se você não incluir o campo de nome na solicitação de atualização, o nome existente permanecerá inalterado. Para remover um nome, defina-o como uma string vazia.

```
$ aws verifiedpermissions update-policy \
    --policy-id SPEXAMPLEabcdefg111111 \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --definition file://definition.txt \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:47:42.804511+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

------

# Adicionando contexto
<a name="context"></a>

O *contexto* é a informação relevante para as decisões políticas, mas não faz parte da identidade de seu diretor, ação ou recurso. A reivindicação do token de acesso é contextual. Talvez você queira permitir uma ação somente de um conjunto de endereços IP de origem ou somente se o usuário tiver feito login com o MFA. Seu aplicativo tem acesso a esses dados contextuais da sessão e deve preenchê-los para solicitações de autorização. Os dados de contexto em uma solicitação de autorização de permissões verificadas devem ser formatados em JSON em um elemento. `contextMap`

Os exemplos que ilustram esse conteúdo vêm de um [exemplo de armazenamento de políticas](policy-stores-create.md). Para acompanhar, crie o repositório **DigitalPetStore**de políticas de amostra em seu ambiente de teste.

O objeto de contexto a seguir declara um de cada tipo de dados do Cedar para um aplicativo com base no exemplo de armazenamento de **DigitalPetStore**políticas.

```
"context": {
  "contextMap": {
    "AccountCodes": {
      "set": [
        {
          "long": 111122223333
        },
        {
          "long": 444455556666
        },
        {
          "long": 123456789012
        }
      ]
    },
    "approvedBy": {
    "entityIdentifier": {
      "entityId": "Bob",
      "entityType": "DigitalPetStore::User"
    }
    },
    "MfaAuthorized": {
      "boolean": true
    },
    "NetworkInfo": {
      "record": {
        "IPAddress": {
          "string": "192.0.2.178"
        },
        "Country": {
          "string": "United States of America"
        },
        "SSL": {
          "boolean": true
        }
    }
    },
    "RequestedOrderCount": {
      "long": 4
    },
    "UserAgent": {
      "string": "My UserAgent 1.12"
    }
  }
}
```Tipos de dados no contexto de autorização

**Booleano**  
Um binário `true` ou `false` valor. No exemplo, o valor booleano de `true` for `MfaAuthenticated` indica que o cliente realizou a autenticação multifatorial antes de solicitar a visualização do pedido.

**Defina**  
Uma coleção de elementos de contexto. Os membros do conjunto podem ser todos do mesmo tipo, como neste exemplo, ou de tipos diferentes, incluindo um conjunto aninhado. No exemplo, o cliente está associado a três contas diferentes.

**String**  
Uma sequência de letras, números ou símbolos, entre `"` caracteres. No exemplo, a `UserAgent` string representa o navegador que o cliente usou para solicitar a visualização do pedido.

**Longo**  
Um valor inteiro. No exemplo, `RequestedOrderCount` indica que essa solicitação faz parte de um lote que resultou da solicitação do cliente para visualizar quatro de seus pedidos anteriores.

**Registro**  
Uma coleção de atributos. Você deve declarar esses atributos no contexto da solicitação. Um repositório de políticas com um esquema deve incluir essa entidade e os atributos da entidade no esquema. No exemplo, o `NetworkInfo` registro contém informações sobre o IP de origem do usuário, a geolocalização desse IP conforme determinado pelo cliente e a criptografia em trânsito.

**EntityIdentifier**  
Uma referência a uma entidade e atributos declarados no `entities` elemento da solicitação. No exemplo, o pedido do usuário foi aprovado pelo funcionário`Bob`.

Para testar esse contexto de exemplo no **DigitalPetStore**aplicativo de exemplo, você deve atualizar sua solicitação`entities`, seu esquema de armazenamento de políticas e a política estática com a descrição **Customer Role - Get Order**.

## Modificando DigitalPetStore para aceitar o contexto de autorização
<a name="authorization-context-example"></a>

Inicialmente, não **DigitalPetStore**é um repositório de políticas muito complexo. Ele não inclui nenhuma política ou atributo de contexto pré-configurado para dar suporte ao contexto que apresentamos. Para avaliar um exemplo de solicitação de autorização com essas informações de contexto, faça as seguintes modificações em seu repositório de políticas e em sua solicitação de autorização. Para exemplos de contexto com informações de token de acesso como contexto, consulte [Mapeamento de tokens de Amazon Cognito acesso e Mapeamento de tokens](cognito-map-token-to-schema.md#cognito-map-access-token) [de acesso OIDC](oidc-map-token-to-schema.md#oidc-map-access-token).

------
#### [ Schema ]

Aplique as seguintes atualizações ao esquema do repositório de políticas para oferecer suporte aos novos atributos de contexto. Atualize `GetOrder` da `actions` seguinte forma.

```
"GetOrder": {
  "memberOf": [],
  "appliesTo": {
    "resourceTypes": [
      "Order"
    ],
    "context": {
      "type": "Record",
      "attributes": {
        "AccountCodes": {
          "type": "Set",
          "required": true,
          "element": {
            "type": "Long"
          }
        },
        "approvedBy": {
          "name": "User",
          "required": true,
          "type": "Entity"
        },
        "MfaAuthorized": {
          "type": "Boolean",
          "required": true
        },
        "NetworkInfo": {
          "type": "NetworkInfo",
          "required": true
        },
        "RequestedOrderCount": {
          "type": "Long",
          "required": true
        },
        "UserAgent": {
          "required": true,
          "type": "String"
        }
      }
    },
    "principalTypes": [
      "User"
    ]
  }
}
```

Para referenciar o tipo de `record` dados nomeado `NetworkInfo` em seu contexto de solicitação, crie uma construção [CommonType](https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes) em seu esquema adicionando o seguinte ao seu esquema anterior. `actions` Uma `commonType` construção é um conjunto compartilhado de atributos que você pode aplicar a diferentes entidades.

```
"commonTypes": {
  "NetworkInfo": {
    "attributes": {
      "IPAddress": {
        "type": "String",
        "required": true
      },
      "SSL": {
        "required": true,
        "type": "Boolean"
      },
      "Country": {
        "required": true,
        "type": "String"
      }
    },
    "type": "Record"
  }
},
```

------
#### [ Policy ]

A política a seguir configura condições que devem ser atendidas por cada um dos elementos de contexto fornecidos. Ele se baseia na política estática existente com a descrição **Customer Role - Get Order**. Inicialmente, essa política exige apenas que o principal que faz uma solicitação seja o proprietário do recurso.

```
permit (
    principal in DigitalPetStore::Role::"Customer",
    action in [DigitalPetStore::Action::"GetOrder"],
    resource
) when {
    principal == resource.owner &&
    context.AccountCodes.contains(111122223333) &&
    context.approvedBy in DigitalPetStore::Role::"Employee" &&
    context.MfaAuthorized == true &&
    context.NetworkInfo.Country like "*United States*" &&
    context.NetworkInfo.IPAddress like "192.0.2.*" &&
    context.NetworkInfo.SSL == true &&
    context.RequestedOrderCount <= 4 &&
    context.UserAgent like "*My UserAgent*"
};
```

Agora exigimos que a solicitação para recuperar um pedido atenda às condições de contexto adicionais que adicionamos à solicitação.

1. O usuário deve ter feito login com o MFA.

1. O navegador da web do usuário `User-Agent` deve conter a string`My UserAgent`.

1. O usuário deve ter solicitado a visualização de 4 ou menos pedidos.

1. Um dos códigos de conta do usuário deve ser`111122223333`.

1. O endereço IP do usuário deve ser originário dos Estados Unidos da América, ele deve estar em uma sessão criptografada e seu endereço IP deve começar com. `192.0.2.`

1. Um funcionário deve ter aprovado seu pedido. No `entities` elemento da solicitação de autorização, declararemos um usuário `Bob` que tem a função de`Employee`.

------
#### [ Request body ]

Depois de configurar seu repositório de políticas com o esquema e a política apropriados, você pode apresentar essa solicitação de autorização à operação [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html)da API de permissões verificadas. Observe que o `entities` segmento contém uma definição de`Bob`, um usuário com uma função de`Employee`.

```
{
  "principal": {
    "entityType": "DigitalPetStore::User",
    "entityId": "Alice"
  },
  "action": {
    "actionType": "DigitalPetStore::Action",
    "actionId": "GetOrder"
  },
  "resource": {
    "entityType": "DigitalPetStore::Order",
    "entityId": "1234"
  },
  "context": {
    "contextMap": {
      "AccountCodes": {
        "set": [
          {"long": 111122223333},
          {"long": 444455556666},
          {"long": 123456789012}
        ]
      },
      "approvedBy": {
        "entityIdentifier": {
          "entityId": "Bob",
          "entityType": "DigitalPetStore::User"
        }
      },
      "MfaAuthorized": {
        "boolean": true
      },
      "NetworkInfo": {
        "record": {
          "Country": {"string": "United States of America"},
          "IPAddress": {"string": "192.0.2.178"},
          "SSL": {"boolean": true}
        }
      },
      "RequestedOrderCount":{
        "long": 4
      },
      "UserAgent": {
        "string": "My UserAgent 1.12"
      }
    }
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Alice"
        },
        "attributes": {
          "memberId": {
            "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Customer"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Bob"
        },
        "attributes": {
          "memberId": {
            "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Employee"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::Order",
          "entityId": "1234"
        },
        "attributes": {
          "owner": {
            "entityIdentifier": {
              "entityType": "DigitalPetStore::User",
              "entityId": "Alice"
            }
          }
        },
        "parents": []
      }
     ]
   },
   "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------

# Usando a bancada de testes de permissões verificadas da Amazon
<a name="test-bench"></a>

Use a bancada de testes de Permissões Verificadas para testar e solucionar problemas de políticas de Permissões Verificadas executando [solicitações de autorização](terminology.md#term-authorization-request) em relação a elas. O banco de testes usa os parâmetros que você especifica para determinar se as políticas do Cedar em seu armazenamento de políticas autorizariam a solicitação. Você pode alternar entre o **Modo Visual** e o **Modo JSON** enquanto testa as solicitações de autorização. Para obter mais informações sobre como as políticas do Cedar são estruturadas e avaliadas, consulte [Construção de políticas básicas no Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) no Guia de referência da linguagem de política Cedar.

**nota**  
Ao fazer uma solicitação de autorização usando o Verified Permissions, você pode fornecer a lista de entidades principais e recursos como parte da solicitação na seção **Entidades adicionais**. No entanto, não é possível incluir os detalhes sobre as ações. Eles devem ser especificados no esquema ou inferidos a partir da solicitação. Você não pode colocar uma ação na seção **Entidades adicionais**.

Para uma visão geral visual e uma demonstração da bancada de testes, consulte [Amazon Verified Permissions - Policy Creation and Testing (Primer Series \$13)](https://www.youtube.com/watch?v=Gi3joEySMPQ) no AWS YouTube canal.

------
#### [ Visual mode ]

**nota**  
Você deve ter um esquema definido em seu armazenamento de políticas para usar o **Modo Visual** do banco de testes.

**Para testar políticas no modo Visual**

1. Abra o [console de Permissões verificadas](https://console.aws.amazon.com/verifiedpermissions/). Escolha seu repositório de políticas.

1. No painel de navegação à esquerda, escolha **Banco de testes**.

1. Escolha **Modo visual**.

1. Na seção **Entidade principal**, escolha a **Entidade principal agindo** entre os tipos de entidade principal do esquema. Digite um identificador para a entidade principal na caixa de texto.

1. (Opcional) Escolha **Adicionar um pai** para adicionar entidades pai para a entidade principal especificada. Para remover um pai adicionado à entidade principal, escolha **Remover** ao lado do nome do pai.

1. Especifique o **Valor do atributo** para cada atributo da entidade principal especificada. O banco de testes usa os valores de atributo especificados na solicitação de autorização simulada.

1. Na seção **Recurso**, escolha o **Recurso no qual a entidade principal está executando uma ação**. Digite um identificador para o recurso na caixa de texto.

1. (Opcional) Escolha **Adicionar um pai** para adicionar entidades pai para o recurso especificado. Para remover um pai adicionado ao recurso, escolha **Remover** ao lado do nome do pai.

1. Especifique o **Valor do atributo** para cada atributo do recurso especificado. O banco de testes usa os valores de atributo especificados na solicitação de autorização simulada.

1. Na seção **Ação**, escolha a **Ação que a entidade principal está executando** na lista de ações válidas para a entidade principal e o recurso especificados.

1. Especifique o **Valor do atributo** para cada atributo da ação especificada. O banco de testes usa os valores de atributo especificados na solicitação de autorização simulada.

1. (Opcional) Na seção **Entidades adicionais**, escolha **Adicionar entidade** para adicionar entidades a serem avaliadas na decisão de autorização.

1. Escolha o **Identificador de entidade** na lista suspensa e digite o identificador da entidade.

1. (Opcional) Escolha **Adicionar um pai** para adicionar entidades pai para a entidade especificada. Para remover um pai adicionado à entidade, escolha **Remover** ao lado do nome do pai.

1. Especifique o **Valor do atributo** para cada atributo da entidade especificada. O banco de testes usa os valores de atributo especificados na solicitação de autorização simulada.

1. Escolha **Confirmar** para adicionar a entidade ao banco de testes.

1. Escolha **Executar solicitação de autorização** para simular a solicitação de autorização para as políticas do Cedar no armazenamento de políticas. O banco de testes exibe a decisão de permitir ou negar a solicitação juntamente com informações sobre as políticas atendidas ou os erros encontrados durante a avaliação.

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

**Para testar políticas no modo JSON**

1. Abra o [console de Permissões verificadas](https://console.aws.amazon.com/verifiedpermissions/). Escolha seu repositório de políticas.

1. No painel de navegação à esquerda, escolha **Banco de testes**.

1. Escolha **Modo JSON.**

1. Na seção **Detalhes da solicitação**, se você tiver um esquema definido, escolha a **Entidade principal agindo** entre os tipos de entidade principal do esquema. Digite um identificador para a entidade principal na caixa de texto.

   Se você não tiver um esquema definido, digite a entidade principal na caixa de texto **Entidade principal agindo**.

1. Se você tiver um esquema definido, escolha o **Recurso** entre os tipos de recurso do esquema. Digite um identificador para o recurso na caixa de texto.

   Se você não tiver um esquema definido, digite o recurso na caixa de texto **Recurso**.

1. Se você tiver um esquema definido, escolha a **Ação** na lista de ações válidas para a entidade principal e o recurso especificados.

   Se você não tiver um esquema definido, digite a ação na caixa de texto **Ação**.

1. Insira o contexto da solicitação a ser simulada no campo **Contexto**. O contexto da solicitação é uma informação adicional que pode ser usada nas decisões de autorização.

1. No campo **Entidades**, insira a hierarquia das entidades e respectivos atributos a serem avaliados na decisão de autorização.

1. Escolha **Executar solicitação de autorização** para simular a solicitação de autorização para as políticas do Cedar no armazenamento de políticas. O banco de testes exibe a decisão de permitir ou negar a solicitação juntamente com informações sobre as políticas atendidas ou os erros encontrados durante a avaliação.

------

# Exemplos de políticas do Amazon Verified Permissions
<a name="policies-examples"></a>

Alguns dos exemplos de políticas incluídos aqui são exemplos básicos de políticas da Cedar e alguns são específicos de permissões verificadas. Os básicos estão vinculados ao Guia de referência da linguagem política do Cedar e estão incluídos nele. Para obter mais informações sobre a sintaxe de política do Cedar, consulte [Construção de políticas básicas no Cedar](https://docs.cedarpolicy.com/policies/syntax-policy.html) no Guia de referência da linguagem de política Cedar.

**Exemplos de políticas**
+ [Permite acesso a entidades individuais](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-indivuals)
+ [Permite acesso a grupos de entidades](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-groups)
+ [Permite o acesso de qualquer entidade](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-any)
+ [Permite acesso aos atributos de uma entidade (ABAC)](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-abac)
+ [Nega acesso](https://docs.cedarpolicy.com/policies/policy-examples.html#deny-access)
+ [Usa notação de colchetes para referenciar atributos de token](#policies-examples-brackets)
+ [Usa notação de pontos para referenciar atributos](#policies-examples-dot)
+ [Reflete os atributos Amazon Cognito do token de ID](#policies-examples-cognito-id)
+ [Reflete os atributos do token de ID OIDC](#policies-examples-oidc-id)
+ [Reflete os atributos do token de Amazon Cognito acesso](#policies-examples-cognito-access)
+ [Reflete os atributos do token de acesso OIDC](#policies-examples-oidc-access)

## Usa notação de colchetes para referenciar atributos de token
<a name="policies-examples-brackets"></a>

O exemplo a seguir mostra como você pode criar uma política que usa a notação de colchetes para referenciar atributos de token.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal has email && principal.email == "alice@example.com" &&
    context["ip-address"] like "192.0.2.*"
};
```

## Usa notação de pontos para referenciar atributos
<a name="policies-examples-dot"></a>

O exemplo a seguir mostra como você pode criar uma política que usa notação de pontos para referenciar atributos.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit(principal, action, resource)
when {
    principal.cognito.username == "alice" &&
    principal.custom.employmentStoreCode == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## Reflete os atributos Amazon Cognito do token de ID
<a name="policies-examples-cognito-id"></a>

O exemplo a seguir mostra como você pode criar uma política que faça referência aos atributos do token de ID Amazon Cognito.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## Reflete os atributos do token de ID OIDC
<a name="policies-examples-oidc-id"></a>

O exemplo a seguir mostra como você pode criar uma política que faça referência aos atributos do token de ID de um provedor OIDC.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit (
    principal in MyCorp::UserGroup::"MyOIDCProvider|MyUserGroup",
    action,
    resource
) when {
    principal.email_verified == true && principal.email == "alice@example.com" &&
    principal.phone_number_verified == true && principal.phone_number like "+1206*"
};
```

## Reflete os atributos do token de Amazon Cognito acesso
<a name="policies-examples-cognito-access"></a>

O exemplo a seguir mostra como você pode criar uma política que faça referência aos atributos do token de acesso a partir de Amazon Cognito.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit(principal, action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"], resource)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI/mydata.write")
};
```

## Reflete os atributos do token de acesso OIDC
<a name="policies-examples-oidc-access"></a>

O exemplo a seguir mostra como você pode criar uma política que faça referência aos atributos do token de acesso de um provedor OIDC.

Para obter mais informações sobre o uso de atributos de token em políticas em Permissões verificadas, consulte [Mapeamento de Amazon Cognito tokens para o esquema](cognito-map-token-to-schema.md) e [Mapeamento de tokens do OIDC](oidc-map-token-to-schema.md) para o esquema.

```
permit(
    principal, 
    action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"],
    resource
)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI-read")
};
```