Criar um perfil para identidades da Web ou federação do OpenID Connect (console) - AWS Identity and Access Management

Criar um perfil para identidades da Web ou federação do OpenID Connect (console)

Você pode usar os provedores de identidades federadas Web Identity ou OpenID Connect (OIDC) em vez de criar usuários do AWS Identity and Access Management em sua conta da Conta da AWS. Com um provedor de identidade (IdP), você pode gerenciar as identidades de usuários fora da AWS e fornecer a essas identidades de usuários externos permissões para acessar recursos da AWS na sua conta. Para obter mais informações sobre federação e IdPs, consulte Provedores de identidade e federação.

Pré-requisitos para a criação de uma função para identidades da Web ou o OIDC

Para poder criar uma função para a federação de identidades da Web, você deve primeiro concluir as seguintes etapas obrigatórias.

Para se preparar para criar uma função para a federação de identidades da Web

  1. Inscreva-se em um ou mais serviços que oferecem identidades federadas OIDC. Se estiver criando um aplicativo que precisa de acesso a seus recursos da AWS, você também poderá configurar seu aplicativo com as informações do provedor. Quando você faz isso, o provedor fornece a você um ID de aplicação ou público que é exclusivo da aplicação. (Diferentes provedores usam diferentes terminologias para este processo. Este guia usa o termo configurar para o processo de identificação de sua aplicação com o provedor.) Você pode configurar vários aplicativos com cada provedor ou vários provedores com um único aplicativo. Visualize as informações sobre o uso de provedores de identidades:

  2. Depois de receber as informações necessárias do IdP, crie um IdP no IAM. Para mais informações, consulte Criar provedores de identidade OpenID Connect (OIDC).

    Importante

    Se você estiver usando um IdP OIDC do Google, Facebook ou Amazon Cognito, não crie um IdP do IAM separado no AWS Management Console. Esses provedores de identidades OIDC já estão integrados à AWS e estão disponíveis para uso. Ignore esta etapa e a criação de novos perfis usando seu IdP na etapa a seguir.

  3. Prepare as políticas para a função que os usuários autenticados pelo IdP assumirão. Assim como com qualquer função, uma função para um aplicativo móvel inclui duas políticas. Uma é a política de confiança que especifica quem pode assumir a função. A outra é a política de permissões que especifica as ações e os recursos reais da AWS aos quais o aplicativo móvel tem ou não permissão para acessar.

    Para idPs da Web, recomendamos que você use o Amazon Cognito para gerenciar identidades. Nesse caso, use uma política de confiança semelhante a este exemplo.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-2:12345678-abcd-abcd-abcd-123456"}, "ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"} } } }

    Substitua us-east-2:12345678-abcd-abcd-abcd-123456 pelo ID do grupo de identidades que o Amazon Cognito atribuir a você.

    Se você configurar manualmente um IdP de identidades da web, ao criar a política de confiança, você deve usar três valores que garantem que apenas seu aplicativo possa assumir a função:

    • No elemento Action, use a ação sts:AssumeRoleWithWebIdentity.

    • No elemento Principal, use a string {"Federated":providerUrl/providerArn}.

      • Para alguns IdPs OIDC comuns, a providerUrl é uma URL. Os exemplos a seguir incluem métodos para especificar a entidade principal para alguns IdPs comuns:

        "Principal":{"Federated":"cognito-identity.amazonaws.com"}

        "Principal":{"Federated":"www.amazon.com"}

        "Principal":{"Federated":"graph.facebook.com"}

        "Principal":{"Federated":"accounts.google.com"}

      • Para outros provedores de OIDC, use nome do recurso da Amazon (ARN) do IdP de OIDC que você criou em Passo 2, como o exemplo a seguir:

        "Principal":{"Federated":"arn:aws:iam::123456789012:oidc-provider/server.example.com"}

    • No elemento Condition, use uma condição StringEquals para limitar as permissões. Teste o ID do grupo de identidades para o Amazon Cognito ou o ID da aplicação para outros provedores. O ID do grupo de identidades deve corresponder ao ID da aplicação que você recebeu quando configurou a aplicação com o IdP. Essa correspondência entre os IDs garante que a solicitação seja proveniente da aplicação. Crie um elemento de condição semelhante aos exemplos a seguir, dependendo do IdP que você está usando:

      "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}}

      "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}}

      "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}}

      "Condition": {"StringEquals": {"accounts.google.com:aud": "66677788899900pro0"}}

      Para provedores OIDC, use a URL totalmente qualificada do IdP OIDC com a chave de contexto aud, como o exemplo a seguir:

      "Condition": {"StringEquals": {"server.example.com:aud": "appid_from_oidc_idp"}}

    nota

    Observe que os valores para a entidade principal na política de confiança para o perfil são específicos a um IdP. Um perfil para identidades da Web ou OIDC só pode especificar uma entidade principal. Portanto, se a aplicação móvel permitir que os usuários se registrem em mais de um IdP, você deverá criar um perfil separado para cada IdP que utilizar. Portanto, você deve criar políticas de confiança separadas para cada IdP.

    Se um usuário usar uma aplicação móvel para fazer login estando no Login with Amazon, a política de confiança do exemplo a seguir será aplicada. No exemplo, amzn1.application-oa2-123456 representa o ID da aplicação que a Amazon atribuiu quando você configurou a aplicação usando o Login with Amazon.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForLoginWithAmazon", "Effect": "Allow", "Principal": {"Federated": "www.amazon.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"www.amazon.com:app_id": "amzn1.application-oa2-123456"}} }] }

    Se um usuário usar uma aplicação móvel para fazer login estando no Facebook, a política de confiança do exemplo a seguir será aplicada. Neste exemplo, 111222333444555 representa o ID da aplicação atribuído pelo Facebook.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForFacebook", "Effect": "Allow", "Principal": {"Federated": "graph.facebook.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"graph.facebook.com:app_id": "111222333444555"}} }] }

    Se um usuário usar uma aplicação móvel para fazer login estando no Goggle, a política de confiança do exemplo a seguir será aplicada. Nesse exemplo, 666777888999000 representa o ID da aplicação atribuído pelo Google.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForGoogle", "Effect": "Allow", "Principal": {"Federated": "accounts.google.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"accounts.google.com:aud": "666777888999000"}} }] }

    Se um usuário usar uma aplicação móvel para fazer login estando no Amazon Cognito, a política de confiança do exemplo a seguir será aplicada. Neste exemplo, us-east:12345678-ffff-ffff-ffff-123456 representa o ID do grupo de identidades atribuído pelo Amazon Cognito.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "RoleForCognito", "Effect": "Allow", "Principal": {"Federated": "cognito-identity.amazonaws.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east:12345678-ffff-ffff-ffff-123456"}} }] }

Criação de uma função para identidade da Web ou OIDC

Depois de concluir as etapas obrigatórias, você pode criar a função no IAM. O procedimento a seguir descreve como criar o perfil para identidades da web ou federação OIDC no AWS Management Console. Para criar uma função na AWS CLI ou na API da AWS, consulte os procedimentos em Criar uma função para um provedor de identidade de terceiros (federação).

Importante

Se você estiver usando o Amazon Cognito, use o console do Amazon Cognito para configurar os perfis. Caso contrário, use o console do IAM para criar uma função para federação de identidades da Web.

Para criar uma função do IAM para federação de identidades da Web

  1. Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, escolha Roles e Create role.

  3. Escolha o tipo de perfil Web Identity.

  4. Em Identity provider (Provedor de identidades), escolha o IdP para o perfil:

    • Se você desejar criar um perfil para um IdP da Web individual, selecione Login with Amazon, Facebook ou Google.

      nota

      Você deve criar um perfil separado para cada IdP que quiser utilizar.

    • Se você desejar criar um perfil de cenário avançado para o Amazon Cognito, escolha Amazon Cognito.

      nota

      Você só precisa criar manualmente um perfil para usar com o Amazon Cognito quando está trabalhando em um cenário avançado. Caso contrário, o Amazon Cognito pode criar funções para você. Para obter mais informações sobre o Amazon Cognito, consulte Identidade do Amazon Cognito no Guia do desenvolvedor do AWS Mobile SDK for iOS e Identidade do Amazon Cognito no Guia do desenvolvedor do AWS Mobile SDK for Android.

  5. Insira o identificador para a aplicação. O rótulo do identificador é alterado de acordo com o provedor escolhido:

    • Se você desejar criar um perfil para o Login with Amazon, insira o ID da aplicação na caixa Application ID (ID da aplicação).

    • Se você desejar criar um perfil para o Facebook, digite o ID da aplicação na caixa Application ID (ID da aplicação).

    • Se você desejar criar um perfil para o Google, digite o nome do público na caixa Audience (Público).

    • Se você desejar criar um perfil para o Amazon Cognito, digite o ID do grupo de identidades que você criou para as aplicações do Amazon Cognito na caixa Identity Pool ID (ID do grupo de identidades).

  6. (Opcional) Clique em Condition (optional) [Adicionar condição(opcional)] para criar condições adicionais que devem ser atendidas para que os usuários da aplicação possam usar as permissões concedidas pelo perfil. Por exemplo, você pode adicionar uma condição que conceda acesso a recursos da AWS apenas para um determinado ID de usuário do IAM.

  7. Verifique suas informações de identidade da web e escolha Next(Avançar).

  8. O IAM inclui uma lista das políticas gerenciadas pela AWS e pelo cliente em sua conta. Selecione a política a ser usada para a política de permissões ou escolha Create policy (Criar política) para abrir uma nova guia no navegador e criar uma nova política a partir do zero. Para mais informações, consulte Criação de políticas do IAM. Depois de criar a política, feche essa guia e retorne à guia original. Marque a caixa de seleção ao lado das políticas de permissões que você deseja que os usuários de identidades da web tenham. Se preferir, você pode optar por não selecionar nenhuma política neste momento e anexar as políticas à função mais tarde. Por padrão, uma função não tem nenhuma permissões.

  9. (Opcional) Defina um limite de permissões. Este é um recurso avançado.

    Abra a seção Set permissions boundary (Definir limite de permissões) e escolha Use a permissions boundary to control the maximum role permissions (Usar um limite de permissões para controlar o número máximo de permissões de perfil). Selecione a política a ser usada para o limite de permissões.

  10. Escolha Next (Próximo).

  11. Em Role name (Nome do perfil), insira um nome. Os nomes de função devem ser exclusivos em sua Conta da AWS. Eles não diferenciam maiúsculas e minúsculas. Por exemplo, não é possível criar dois perfis denominados PRODROLE e prodrole. Como outros recursos da AWS podem referenciar o perfil, não é possível editar o nome do perfil depois que ele é criado.

  12. (Opcional) Em Description (Descrição), insira uma descrição para o novo perfil.

  13. Para editar os casos de uso e as permissões do perfil, escolha Edit (Editar) nas seções Etapa 1: selecionar entidades confiáveis ou na Etapa 2: adicionar permissões.

  14. (Opcional) Para adicionar metadados à função, anexe tags como pares de chave-valor. Para obter mais informações sobre como usar etiquetas no IAM, consulte Recursos de etiquetas do IAM.

  15. Revise a função e escolha Create role.

Configurar um perfil para o provedor de identidades OIDC GitHub

Se você usar o GitHub como um IdP do OIDC, a prática recomendada é limitar as entidades que podem assumir o perfil associado ao IdP do IAM. Ao incluir uma instrução de condição na política de confiança, você pode limitar o perfil a uma organização, repositório ou ramificação específica do GitHub. Você pode usar a chave de condição token.actions.githubusercontent.com:sub para limitar o acesso. Recomendamos que você limite a condição a um conjunto específico de repositórios ou ramificações. Se você não incluir essa condição, o GitHub Actions de organizações ou repositórios fora do seu controle poderão assumir perfis associados ao IdP do IAM do GitHub na sua Conta da AWS. Para obter informações sobre como configurar a AWS para confiar no OIDC do GitHub como uma identidade federada, consulte GitHub Docs - Configuring OpenID Connect in Amazon Web Services ("Documentos do GitHub - Configurar o OpenID Connect na Amazon Web Services").

O exemplo de política de confiança a seguir limita o acesso à organização, repositório e ramificação definidos do GitHub.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::012345678910:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:ref:refs/heads/GitHubBranch" } } } ] }

O exemplo de condição a seguir limita o acesso à organização e ao repositório definidos do GitHub, mas concede acesso a qualquer ramificação dentro do repositório.

"Condition": { "StringLike": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:*" } }

O exemplo de condição a seguir limita o acesso a qualquer repositório ou ramificação dentro da organização do GitHub definida. Recomendamos isso como uma condição mínima da política de confiança para perfis que usam o GitHub como um IdP OIDC.

"Condition": { "StringLike": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/*" } }

Para obter mais informações sobre chaves de federação de identidades da web disponíveis para verificação de condições nas políticas, consulte Chaves disponíveis para federação de identidades da web da AWS.