

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á.

# Controle de acesso com base em perfil
<a name="role-based-access-control"></a>

Os grupos de identidade do Amazon Cognito atribuem aos usuários autenticados um conjunto de credenciais temporárias com privilégios limitados para acessar seus recursos. AWS As permissões para cada usuário são controladas por meio das [funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) que você cria. É possível definir regras para escolher a função de cada usuário com base em reivindicações no token de ID do usuário. Você pode definir uma função padrão para usuários autenticados. Você também pode definir uma função do IAM separada com permissões limitadas para usuários convidados que não são autenticados.

## Como criar funções para mapeamento de função
<a name="creating-roles-for-role-mapping"></a>

É importante adicionar a política de confiança apropriada para cada função para que ela só possa ser assumida pelo Amazon Cognito para os usuários autenticados no grupo de identidades. Aqui está um exemplo dessa política de confiança:

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

Essa política permite que os usuários federados do `cognito-identity.amazonaws.com` (o emissor do token do OpenID Connect) assumam essa função. Além disso, a política restringe o `aud` do token, neste caso o ID do banco de identidades, de acordo com o banco de identidades. Por fim, a política especifica que um dos membros da matriz do da declaração `amr` de múltiplo valor do token emitido pela ação da API `GetOpenIdToken` do Amazon Cognito tem o valor `authenticated`.

## Conceder permissão para perfil de transmissão
<a name="granting-pass-role-permission"></a>

Para permitir que um usuário configure perfis com permissões além das já existentes para o usuário em um grupo de identidades, conceda a ele a permissão `iam:PassRole` para transmitir o perfil à API `set-identity-pool-roles`. Por exemplo, se o usuário não pode gravar no Amazon S3, mas a função do IAM que o usuário configurou no grupo de identidades concede permissão de gravação no Amazon S3, o usuário só pode configurar essa função se a permissão `iam:PassRole` for concedida para a função. O exemplo a seguir mostra como conceder a permissão `iam:PassRole`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myS3WriteAccessRole"
            ]
        }
    ]
}
```

------

Neste exemplo de política, a permissão `iam:PassRole` é concedida para a função `myS3WriteAccessRole`. A função é especificada usando o nome do recurso da Amazon (ARN) da função. Também é necessário anexar essa política ao usuário. Para obter mais informações, consulte [Como trabalhar com políticas gerenciadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**nota**  
As funções Lambda usam política baseada em recursos, em que a política é anexada diretamente à própria função do Lambda. Ao criar uma regra que invoca uma função do Lambda, você não transmite uma função. Assim, o usuário que está criando a regra não precisa da permissão do `iam:PassRole`. Para obter mais informações sobre a autorização de funções Lambda, consulte [Gerenciar permissões: Usar uma política da função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy).

## Como usar tokens para atribuir funções a usuários
<a name="using-tokens-to-assign-roles-to-users"></a>

Para os usuários que fazem login por meio de grupos de usuários do Amazon Cognito, as funções podem ser passadas no token de ID que foi atribuído pelo grupo de usuários. As funções são exibidas nas seguintes solicitações no token de ID:
+ A solicitação `cognito:preferred_role` é o nome de região da Amazon (ARN) da função.
+ A `cognito:roles` afirmação é uma string separada por vírgula contendo um conjunto de funções permitidas. ARNs

As solicitações são configuradas da seguinte forma:
+ A solicitação `cognito:preferred_role` é configurada como a função do grupo com o melhor (menor) valor `Precedence`. Se há somente uma função permitida, `cognito:preferred_role` é configurado para essa função. Se há várias funções e nenhuma função única tem a melhor precedência, essa solicitação não é configurada.
+ A solicitação `cognito:roles` é configurada se há pelo menos uma função.

Ao usar tokens para atribuir funções, se houver várias funções que podem ser atribuídas ao usuário, os grupos de identidades do Amazon Cognito (identidades federadas) escolherão a função da seguinte forma:
+ Use o [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleArn`parâmetro se ele estiver definido e corresponder a uma função na `cognito:roles` declaração. Se esse parâmetro não corresponde a uma função em `cognito:roles`, negue o acesso.
+ Se a solicitação `cognito:preferred_role` está configurada, use-a.
+ Se a `cognito:preferred_role` declaração não estiver definida, a `cognito:roles` declaração será definida e `CustomRoleArn` não especificada na chamada para`GetCredentialsForIdentity`, a configuração de **resolução de função** no console ou no `AmbiguousRoleResolution` campo (no `RoleMappings` parâmetro da [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API) será usada para determinar a função a ser atribuída.

## Como usar mapeamento baseado em regras para atribuir funções a usuários
<a name="using-rules-to-assign-roles-to-users"></a>

As regras permitem que você mapeie solicitações de um token de provedor de identidades para perfis do IAM.

Cada regra especifica uma solicitação de token (como um atributo de usuário no token de ID de um grupo de usuários do Amazon Cognito), o tipo de correspondência, um valor e uma função do IAM. O tipo de correspondência pode ser `Equals`, `NotEqual`, `StartsWith` ou `Contains`. Se um usuário tem um valor correspondente para a solicitação, pode assumir essa função quando recebe credenciais. Por exemplo, é possível criar uma regra que atribui uma função do IAM específica para usuários com um valor de atributo personalizado `custom:dept` de `Sales`. 

**nota**  
Nas configurações da regra, os atributos personalizados exigem o prefixo `custom:` para diferenciá-los dos atributos padrão.

As regras são avaliadas em ordem, e a função do IAM para a primeira regra de correspondência é usada, a menos que `CustomRoleArn` seja especificado para substituir a ordem. Para obter mais informações sobre atributos de usuário em grupos de usuários do Amazon Cognito, consulte [Trabalhar com atributos do usuário](user-pool-settings-attributes.md).

Você pode definir várias regras para um provedor de autenticação no console do grupo de identidades (identidades federadas). As regras são aplicadas em ordem. É possível arrastar as regras para alterar a ordem. A primeira regra de correspondência tem precedência. Se o tipo de correspondência é `NotEqual` e a solicitação não existe, a regra não é avaliada. Se não houver correspondência com nenhuma regra, a configuração **Resolução de perfil** será aplicada a **Usar perfil autenticado padrão** ou **Negar solicitação**.

Na API e na CLI, você pode especificar a função a ser atribuída quando nenhuma regra coincide no `AmbiguousRoleResolution` campo do [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipo, que é especificado no `RoleMappings` parâmetro da [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

Para adicionar mapeamento baseado em regras a um provedor de identidades no console do Amazon Cognito, adicione ou atualize um IdP e selecione **Escolher função com regras** em **Seleção de perfil**. A partir daí, você pode adicionar regras que mapeiam as declarações do provedor aos perfis do IAM.

Você pode configurar o mapeamento baseado em regras para provedores de identidade na API AWS CLI ou com o `RulesConfiguration` campo do [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipo. Você pode especificar esse campo no `RoleMappings` parâmetro da [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

Por exemplo, o AWS CLI comando a seguir adiciona uma regra que atribui a função `arn:aws:iam::123456789012:role/Sacramento_team_S3_admin` aos usuários em sua localização em Sacramento que foram autenticados pelo OIDC IdP: `arn:aws:iam::123456789012:oidc-provider/myOIDCIdP`

```
aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json file://role-mapping.json
```

**Conteúdo de `role-mapping.json`**:

```
{
    "IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab",
    "Roles": {
        "authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole",
        "unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole"
    },
    "RoleMappings": {
        "arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": {
            "Type": "Rules",
            "AmbiguousRoleResolution": "AuthenticatedRole",
            "RulesConfiguration": {
                "Rules": [
                    {
                        "Claim": "locale",
                        "MatchType": "Equals",
                        "Value": "Sacramento",
                        "RoleARN": "arn:aws:iam::123456789012:role/Sacramento_team_S3_admin"
                    }
                ]
            }
        }
    }
}
```

Para cada grupo de usuários ou outro provedor de autenticação configurado para um grupo de identidades, é possível criar até 25 regras. Este limite não é ajustável. Para obter mais informações, consulte [Cotas no Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html).

## Declarações de token para uso em mapeamento baseado em regras
<a name="token-claims-for-role-based-access-control"></a>

**Amazon Cognito**

Um token de ID do Amazon Cognito é representado como um token web JSON (JWT). O token contém solicitações sobre a identidade do usuário autenticado, como `name`, `family_name` e `phone_number`. Para obter mais informações sobre solicitações padrão, consulte a especificação [OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Além das solicitações padrão, os itens a seguir são as solicitações adicionais específicas para o Amazon Cognito:
+ `cognito:groups`
+ `cognito:roles`
+ `cognito:preferred_role`

**Amazon**

As solicitações a seguir, juntamente com valores possíveis para essas solicitações, podem ser usadas com o Login with Amazon:
+ `iss`: www.amazon.com
+ `aud`: ID da aplicação
+ `sub`: `sub` do token do Login with Amazon

**Facebook**

As solicitações a seguir, juntamente com valores possíveis para essas solicitações, podem ser usadas com o Facebook:
+ `iss`: graph.facebook.com
+ `aud`: ID da aplicação
+ `sub`: `sub` do token do Facebook

**Google**

Um token do Google contém solicitações padrão da [especificação do OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Todas as solicitações no token do OpenID estão disponíveis para mapeamento com base em regras. Consulte o site do [OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) do Google para saber mais sobre as solicitações disponíveis no token do Google.

**Apple**

Um token da Apple contém solicitações padrão da [especificação do OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Consulte [Authenticating Users with Sign in with Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple) na documentação da Apple para saber mais sobre a solicitação disponível no token da Apple. O token da Apple nem sempre contém `email`.

**OpenID**

Todas as solicitações no token do OpenID estão disponíveis para mapeamento com base em regras. Para obter mais informações sobre solicitações padrão, consulte a especificação [OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Consulte a documentação do provedor do OpenID para saber mais sobre as solicitações adicionais disponíveis.

**SAML**

As solicitações são analisadas a partir da declaração do SAML recebida. Todas as solicitações disponíveis na declaração do SAML podem ser usadas no mapeamento com base em regras.

## Práticas recomendadas para controle de acesso baseado em função
<a name="best-practices-for-role-based-access-control"></a>

**Importante**  
Se a solicitação que você está mapeando para uma função pode ser modificada pelo usuário final, qualquer usuário final pode assumir a função e definir a política de acordo com a necessidade. Somente mapeie as solicitações que não podem ser configuradas diretamente pelo usuário final para funções com permissões elevadas. Em um grupo de usuários do Amazon Cognito, é possível configurar permissões de leitura e gravação por aplicação para cada atributo de usuário.

**Importante**  
Se você configura funções para grupos em um grupo de usuários do Amazon Cognito, essas funções são transmitidas por meio do token de ID do usuário. Para usar essas funções, também é necessário configurar **Choose role from token** para a seleção de função autenticada para o grupo de identidades.  
Você pode usar a configuração de **resolução de função** no console e o `RoleMappings` parâmetro da [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API para especificar qual é o comportamento padrão quando a função correta não pode ser determinada a partir do token.