Cenários comuns - AWS Identity and Access Management

Cenários comuns

nota

Recomendamos exigir que seus usuários humanos usem credenciais temporárias ao acessar a AWS. Você já pensou em usar o AWS IAM Identity Center? O IAM Identity Center pode ser usado para gerenciar centralmente o acesso a várias Contas da AWS e fornecer aos usuários acesso de logon único protegido por MFA a todas as contas atribuídas em um só lugar. Com o IAM Identity Center, é possível criar e gerenciar identidades de usuários no IAM Identity Center ou conectar facilmente ao provedor de identidades compatível com SAML 2.0 existente. Para obter mais informações, consulte O que é o IAM Identity Center? no Guia do usuário do AWS IAM Identity Center.

É possível usar um provedor de identidades (IdP) externo para gerenciar identidades de usuários fora da AWS. Um IdP externo pode fornecer informações de identidade à AWS usando OpenID Connect (OIDC) ou Security Assertion Markup Language (SAML). O OIDC é comumente usado quando uma aplicação que não é executada na AWS precisa de acesso a recursos da AWS.

Quando você desejar configurar uma federação com um IdP externo, crie um provedor de identidades do IAM para informar a AWS sobre o IdP externo e sua configuração. Isso estabelece confiança entre sua Conta da AWS e o IdP externo. Os tópicos a seguir fornecem cenários comuns para uso de provedores de identidade do IAM.

Amazon Cognito para aplicativos móveis

A maneira preferencial de usar a federação OIDC é usar o Amazon Cognito. Por exemplo, a desenvolvedora Adele está criando um jogo para um dispositivo móvel no qual os dados do usuário, como pontuações e perfis, são armazenados no Amazon S3 e no Amazon DynamoDB. Adele também pode armazenar esses dados localmente no dispositivo e usar o Amazon Cognito para mantê-los sincronizados entre os dispositivos. Ela sabe que por motivos de segurança e manutenção, as credenciais de segurança da AWS de longo prazo não devem ser distribuídas com o jogo. Ela também sabe que o jogo pode ter um grande número de usuários. Por todos esses motivos, ela não quer criar novas identidades de usuários no IAM para cada jogador. Em vez disso, ela constrói o jogo para que os usuários possam fazer login usando uma identidade que eles já estabeleceram com um provedor de identidade (IdP) externo conhecido, como Login with Amazon, Facebook, Google ou qualquer IdP compatível com OpenID Connect (OIDC). O jogo dela pode aproveitar o mecanismo de autenticação de um desses provedores para validar a identidade do usuário.

Para permitir que o aplicativo móvel acesse seus recursos da AWS, Adele primeiro se registra para um ID de desenvolvedor com seus IdPs escolhidos. Ela também configura o aplicativo com cada um desses provedores. Na sua Conta da AWS que contém o bucket do Amazon S3 e a tabela do DynamoDB para o jogo, Adele usa o Amazon Cognito para criar perfis do IAM que definem com precisão as permissões necessárias para o jogo. Se ela estiver usando um IdP de OIDC, ela também criará uma entidade de provedor de identidades OIDC do IAM para estabelecer a confiança entre um grupo de identidades do Amazon Cognito na Conta da AWS e o IdP.

No código do aplicativo, a Adele chama a interface de login para o IdP que ela configurou anteriormente. O IdP lida com todos os detalhes para permitir que o usuário faça login, e o aplicativo obtenha um token de acesso OAuth ou um token de ID do OIDC do provedor. O aplicativo da Adele pode trocar essas informações de autenticação para um conjunto de credenciais de segurança temporárias que consiste em um ID de chave de acesso da AWS, uma chave de acesso secreta e um token de sessão. O aplicativo pode então usar essas credenciais para acessar serviços da web oferecidos pela AWS. O aplicativo é limitado às permissões que são definidas na função que ele assume.

A figura a seguir mostra um fluxo simplificado de como isso funciona usando o Login with Amazon como IdP. Para a etapa 2, o aplicativo também pode usar o Facebook, Google ou qualquer IdP compatível com o OIDC, mas isto não é mostrado aqui.

Fluxo de trabalho de exemplo usando o Amazon Cognito para federar usuários para um aplicativo móvel

  1. Um cliente inicia o aplicativo em um dispositivo móvel. O aplicativo solicita que o usuário faça login.

  2. A aplicação usa os recursos do Login with Amazon para aceitar as credenciais do usuário

  3. A aplicação usa operações de API do Amazon Cognito GetId e GetCredentialsForIdentity para trocar o token de ID do login com a Amazon por um token do Amazon Cognito. O Amazon Cognito, que foi configurado para confiar no seu projeto de login com a Amazon, gera um token que ele troca por credenciais de sessão temporárias com o AWS STS.

  4. A aplicação recebe credenciais de segurança temporárias do Amazon Cognito. A aplicação também pode usar o fluxo de trabalho básico (clássico) no Amazon Cognito para recuperar tokens do AWS STS usando AssumeRoleWithWebIdentity. Para obter mais informações consulte Identity pools (federated identities) authentication flow (Fluxo de autenticação de grupos de identidades [identidades federadas] do Amazon Cognito) no Amazon Cognito Developer Guide (Guia do desenvolvedor do Amazon Cognito).

  5. As credenciais de segurança temporárias podem ser usadas pelo aplicativo para acessar qualquer recurso da AWS exigido pelo aplicativo para operar. A função associada às credenciais de segurança temporárias e às políticas atribuídas determina o que pode ser acessado.

Use o processo a seguir para configurar sua aplicação para usar o Amazon Cognito para autenticar usuários e fornecer à aplicação acesso aos recursos da AWS. Para obter etapas específicas para realizar esse cenário, consulte a documentação do Amazon Cognito.

  1. (Opcional) Cadastre-se como um desenvolvedor com Login with Amazon, Facebook, Google ou qualquer outro IdP compatível com OpenID Connect (OIDC) e configure uma ou mais aplicações com o provedor. Esta etapa é opcional, pois o Amazon Cognito também oferece suporte ao acesso não autenticado (de convidado) para seus usuários.

  2. Acesse Amazon Cognito no AWS Management Console. Use o assistente do Amazon Cognito para criar um grupo de identidades, que é um contêiner que o Amazon Cognito usa para manter as identidades dos usuários finais organizadas para suas aplicações. Você pode compartilhar grupos de identidades entre aplicativos. Ao configurar um grupo de identidades, o Amazon Cognito cria uma ou duas funções do IAM (uma para identidades autenticadas e outra para identidades de “convidados” não autenticados) que definem permissões para os usuários do Amazon Cognito.

  3. Integre o AWSAmplify com a aplicação e importe os arquivos necessários para usar o Amazon Cognito.

  4. Crie uma instância do provedor de credenciais do Amazon Cognito, passando o ID do grupo de identidades, o número da sua Conta da AWS e o nome do recurso da Amazon (ARN) dos perfis que você associou ao grupo de identidades. O assistente do Amazon Cognito no AWS Management Console fornece o código de exemplo para ajudar você a começar.

  5. Quando o seu aplicativo acessa um recurso da AWS, transmite as instâncias do provedor de credenciais para o objeto do cliente, que, por sua vez, transmite as credenciais de segurança temporárias ao cliente. As permissões para as credenciais são baseadas na função ou funções que você definiu anteriormente.

Para obter mais informações, consulte as informações a seguir.

federação OIDC para aplicativos móveis

Para obter os melhores resultados, use o Amazon Cognito como intermediador de identidades para quase todos os cenários de federação OIDC. O Amazon Cognito é fácil de usar e fornece recursos adicionais como acesso anônimo (não autenticado) e sincronização de dados do usuário entre dispositivos e provedores. No entanto, se você já criou uma aplicação que usa federação OIDC e chama manualmente a API AssumeRoleWithWebIdentity, continue a usá-la, pois a aplicação continuará funcionando corretamente.

O processo de uso de federação OIDC sem o Amazon Cognito segue esta visão geral:

  1. Cadastre-se como desenvolvedor com o provedor de identidade externa (IdP) e configure seu aplicativo com o IdP, que fornece a você um ID exclusivo para seu aplicativo. (IdPs diferentes usam terminologia diferente para este processo. Esta descrição usa o termo configurar para o processo de identificação de sua aplicação com o IdP.) Cada IdP fornece a você um ID de aplicativo exclusivo para esse IdP, portanto, se você configurar o mesmo aplicativo com vários IdPs, seu aplicativo terá vários IDs. Você pode configurar vários aplicativos com cada fornecedor.

    Os links externos a seguir fornecem informações sobre como usar alguns dos provedores de identidade (IdPs) mais usados:

    Importante

    Se você usar um provedor de identidade OIDC do Google, Facebook ou Amazon Cognito, não crie um provedor de identidade do IAM separado noAWS Management Console. A AWS tem esses provedores de identidade OIDC incorporados e disponíveis para seu uso. Ignore a etapa a seguir e vá diretamente para a criação de novas funções usando seu provedor de identidade.

  2. Se você usar um IdP diferente do Google, Facebook ou Amazon Cognito compatível com OIDC, crie uma entidade de provedor de identidade do IAM para ele.

  3. No IAM, crie uma ou mais funções. Para cada função, defina quem pode assumir a função (a política de confiança) e quais permissões os usuários da aplicação têm (a política de permissões). Geralmente, você cria uma função para cada IdP ao qual um aplicativo dá suporte. Por exemplo, você pode criar uma função assumida por uma aplicação se o usuário fizer login por meio do Login with Amazon, uma segunda função para a mesma aplicação se o usuário fizer login por meio do Facebook e uma terceira função para a aplicação se o usuário fizer login por meio do Google. Para o relacionamento de confiança, especifique o IdP (como a Amazon.com) como o Principal (a entidade confiável) e inclua uma Condition que corresponda ao ID do aplicativo atribuído ao IdP. Exemplos de funções para diferentes provedores são descritos em Criar um perfil para um provedor de identidade de terceiros (federação).

  4. Em seu aplicativo, autentique seus usuários com o IdP. As especificações de como fazer isso variam de acordo com qual IdP você usa (Login with Amazon, Facebook ou Google) e em qual plataforma sua aplicação é executada. Por exemplo, o método de autenticação de um aplicativo Android pode ser diferente do de um aplicativo iOS ou de um aplicativo da web baseado em JavaScript.

    Normalmente, se o usuário ainda não estiver conectado, o IdP exibirá uma página de login. Depois que o IdP autentica o usuário, ele retorna um token de autenticação com informações sobre o usuário para o seu aplicativo. As informações incluídas dependem do que o IdP expõe e as informações que o usuário está disposto a compartilhar. Você pode usar essas informações em seu aplicativo.

  5. Em seu aplicativo, faça uma chamada não assinada para a ação AssumeRoleWithWebIdentity para solicitar credenciais de segurança temporárias. Na solicitação, você passa o token de autenticação do IdP e especifica o nome do recurso da Amazon (ARN) para a função do IAM que você criou para esse IdP. A AWS verifica se o token é confiável e válido e, em caso afirmativo, retorna credenciais de segurança temporárias para sua aplicação com as permissões para a função que você indicou na solicitação. A resposta também inclui metadados sobre o usuário do IdP, como o ID de usuário exclusivo que o IdP associa ao usuário.

  6. Usando as credenciais de segurança temporárias da resposta AssumeRoleWithWebIdentity, seu aplicativo faz solicitações assinadas às operações de API da AWS. As informações de ID do usuário do IdP podem diferenciar os usuários em sua aplicação. Por exemplo, você pode colocar objetos em pastas do Amazon S3 que incluam o ID do usuário como prefixos ou sufixos. Isso permite que você crie políticas de controle de acesso que bloqueiem a pasta para que somente o usuário com esse ID possa acessá-lo. Para obter mais informações, consulte Entidades principais de sessão de usuário federado do AWS STS.

  7. Seu aplicativo deve armazenar em cache as credenciais de segurança temporárias para que você não precise obter novas credenciais sempre que o aplicativo precisar fazer uma solicitação à AWS. Por padrão, as credenciais são válidas por uma hora. Quando as credenciais expiram (ou antes disso), você deve fazer outra chamada para AssumeRoleWithWebIdentity a fim de obter um novo conjunto de credenciais de segurança temporárias. Dependendo do IdP e como eles gerenciam seus tokens, talvez você precise atualizar o token do IdP antes de fazer uma nova chamada para AssumeRoleWithWebIdentity, pois os tokens do IdP geralmente também expiram após um período fixo. Se você usar o AWS SDK for iOS ou o AWS SDK for Android, poderá usar a ação AmazonSTSCredentialsProvider, que gerencia as credenciais temporárias do IAM, incluindo a atualização delas conforme necessário.