Criar uma função para uma federação do OpenID Connect (console) - AWS Identity and Access Management

Criar uma função para uma federação do OpenID Connect (console)

É possível usar os provedores de identidades federadas do OpenID Connect (OIDC) em vez de criar usuários do AWS Identity and Access Management em sua 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 o OIDC

Para criar uma função para a federação OIDC, você primeiro deve concluir as etapas obrigatórias a seguir.

Para se preparar para uma função para a federação do OIDC
  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.) É possível configurar várias aplicações 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 ter mais informações, consulte Criar um provedor de identidade OpenID Connect (OIDC) no IAM.

    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 novas funções 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 do OIDC, 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 é um 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 OIDC, use nome do recurso da Amazon (ARN) do IdP 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.

      nota

      Os perfis do IAM para bancos de identidades do Amazon Cognito confiam na entidade principal do serviço cognito-identity.amazonaws.com para assumir o perfil. Perfis desse tipo devem conter pelo menos uma chave de condição para limitar as entidades principais que podem assumir o perfil.

      Considerações adicionais se aplicam aos bancos de identidades do Amazon Cognito que assumem perfis do IAM entre contas. As políticas de confiança desses perfis devem aceitar a entidade principal do serviço cognito-identity.amazonaws.com e conter a chave de condição aud para restringir a suposição de perfis aos usuários dos bancos de identidades pretendidos. Uma política que confia nos bancos de identidades do Amazon Cognito sem essa condição cria o risco de que um usuário de um banco de identidades não intencional possa assumir o perfil. Para obter mais informações, consulte Políticas de confiança para perfis do IAM na autenticação básica (clássica) no Guia do Desenvolvedor do Amazon Cognito.

      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 o URL totalmente qualificado 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 a função são específicos a um IdP. Um perfil pode especificar apenas 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 uma função separada 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"}} }] }

Como criar um perfil para o 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 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 um perfil 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 as funções. Caso contrário, use o console do IAM para criar uma função para federação OIDC.

Criar um perfil do IAM para a federação OIDC
  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 Funções e Criar função.

  3. Escolha a identidade da Web como o tipo de entidade confiável e selecione Avançar.

  4. Em Identity provider (Provedor de identidades), escolha o IdP para a função:

    • Se você desejar criar uma função para um IdP da Web individual, selecione Login with Amazon, Facebook ou Google.

      nota

      Você deve criar uma função separada para cada IdP que quiser utilizar.

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

      nota

      Você só precisa criar manualmente uma função 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 Provedores externos de identidade de grupos de identidades (identidades federadas) no Guia do desenvolvedor do Amazon Cognito.

    • Para criar uma função para o GitHub Actions, é necessário adicionar o provedor OIDC do GitHub ao IAM. Depois de adicionar o provedor OIDC do GitHub ao IAM, escolha token.actions.githubusercontent.com.

      nota

      Para obter informações sobre como configurar a AWS para confiar no provedor de OIDC do GitHub como uma identidade federada, consulte Documentos do GitHub – Configuração do OpenID Connect na Amazon Web Services. Para obter informações sobre as práticas recomendadas para limitar o acesso às funções associadas ao IAM IdP para GitHub, consulte Configurar uma função para o provedor de identidades OIDC GitHub nesta página.

    • Se você desejar criar um perfil para a HashiCorp Cloud Platform (HCP) Terraform, comece adicionando o provedor de OIDC do Terraform ao IAM. Depois de adicionar o provedor de OIDC Terraform ao IAM, escolha app.terraform.io.

      Importante

      Os perfis do IAM para o provedor de OIDC Terraform da HashiCorp Cloud Platform (HCP) devem avaliar a chave de condição do IAM, app.terraform.io:sub, na política de confiança do perfil. Essa chave de condição limita quais organizações, projetos, espaços de trabalho ou fases de execução do HCP Terraform são capazes de assumir o perfil. Sem essa chave de condição, sua política de confiança concede acesso ao seu perfil e a recursos da AWS por meio de identidades fora da sua organização, o que não se alinha ao princípio de privilégio mínimo.

      Se você definir ou modificar uma política de confiança de um perfil para um perfil associado ao provedor de OIDC Terraform da HCP em sua conta da AWS, mas não avaliar a chave de condição do IAM app.terraform.io:sub, você receberá um erro. Além disso, o AWS STS negará solicitações de autorização se sua política de confiança de perfil não avaliar essa chave de condição.

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

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

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

    • Se você desejar criar uma função para o Google, digite o nome do público na caixa Audience (Público).

    • Se você desejar criar uma função 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).

    • Para criar uma função para GitHub Actions, insira os seguintes detalhes:

      • Para Audience (Público), escolha sts.amazonaws.com.

      • Em Organização do GitHub, insira o nome da organização no GitHub. O nome da organização do GitHub é obrigatório e deve ser alfanumérico, incluindo traços (-). Não é permitido usar caracteres curinga (* e ?) no nome da organização do GitHub.

      • (Opcional) Em Repositório do GitHub, insira o URL do seu repositório do GitHub. Se você não especificar um valor, o padrão será um coringa (*).

      • (Opcional) em Filial do GitHub, insira o nome da filial do GitHub. Se você não especificar um valor, o padrão será um coringa (*).

    • Se você desejar criar um perfil para a HashiCorp Cloud Platform (HCP) Terraform, insira os detalhes a seguir:

      • Para Audience (Público), escolha aws.workload.identity.

      • Em Organização, insira o nome da organização. É possível especificar um caractere curinga (*) para todas as organizações.

      • Em Projeto, insira o nome do projeto. É possível especificar um caractere curinga (*) para todos os projetos.

      • Em Workspace, insira o nome do workspace. É possível especificar um caractere curinga (*) para todos os workspaces.

      • Em Fase de execução, insira o nome da fase de execução. É possível especificar um caractere curinga (*) para todas as fases de execução.

  6. (Opcional) em Condição (opcional), escolha Adicionar condição para criar condições adicionais que devem ser atendidas para que os usuários da aplicação possam usar as permissões concedidas pela função. 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. Você também pode adicionar condições à política de confiança após a criação da função. Para ter mais informações, consulte Atualizar a política de confiança de um perfil .

  7. Revise suas informações de OIDC e escolha Próximo.

  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 ter 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 do OIDC 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 função). Selecione a política a ser usada para o limite de permissões.

  10. Escolha Próximo.

  11. Em Role name (Nome da função), 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 duas funções denominadas PRODROLE e prodrole. Como outros recursos da AWS podem referenciar a função, não é possível editar o nome da função depois que ele é criado.

  12. (Opcional) Em Description (Descrição), insira uma descrição para a nova função.

  13. Para editar os casos de uso e as permissões da função, 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 tags no IAM, consulte Tags para recursos do AWS Identity and Access Management.

  15. Revise o perfil e escolha Criar perfil.

Configurar uma função para o provedor de identidades OIDC GitHub

Se você usar o GitHub como um provedor de identidades (IdP) Open ID Connect (OIDC), a prática recomendada será 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 a função a uma organização, repositório ou ramificação específica do GitHub. É possível usar a chave de condição token.actions.githubusercontent.com:sub com operadores de condição de string para limitar o acesso. Recomendamos limitar a condição a um conjunto específico de repositórios ou ramificações em sua organização do GitHub. 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").

Se você usar ambientes do GitHub em fluxos de trabalho de ação ou em políticas de OIDC, é extremamente recomendável adicionar regras de proteção ao ambiente para aumentar a segurança. Use ramificações e tags de implantação para restringir quais ramificações e tags podem ser implantadas no ambiente. Para obter mais informações sobre a configuração de ambientes com regras de proteção, consulte Ramificações de implantação e marcas no artigo Usando ambientes para implantação do GitHub.

Quando o IdP OIDC do GitHub é a entidade principal confiável para seu perfil, o IAM verifica a condição da política de confiança do perfil para verificar se a chave de condição token.actions.githubusercontent.com:sub está presente e se seu valor não é apenas um caractere curinga (* e ?) ou nulo. O IAM realiza essa verificação quando a política de confiança é criada ou atualizada. Se a chave de condição token.actions.githubusercontent.com:sub não estiver presente ou o valor da chave não satisfizer os critérios de valor mencionados, a solicitação falhará e retornará um erro.

Importante

Se você não limitar a chave de condição token.actions.githubusercontent.com:sub a uma organização ou um repositório específico, as ações do GitHub 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.

O exemplo de política de confiança a seguir limita o acesso à organização, repositório e ramificação definidos do GitHub. O valor da chave de condição token.actions.githubusercontent.com:sub no exemplo a seguir é o formato padrão do valor do assunto documentado pelo 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": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" }, "StringLike": { "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 limitar a chave de condição token.actions.githubusercontent.com:sub a um valor específico que limita o acesso ao GitHub Actions de dentro da sua organização do GitHub.

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

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