Solicitar credenciais de segurança temporárias - AWS Identity and Access Management

Solicitar credenciais de segurança temporárias

Para solicitar credenciais de segurança temporárias, você pode usar as operações do AWS Security Token Service (AWS STS) na API da AWS. É possível usar operações para criar e fornecer aos usuários confiáveis credenciais de segurança temporárias que podem controlar o acesso aos seus recursos da AWS. Para obter mais informações sobre o AWS STS, consulte Credenciais de segurança temporárias no IAM. Para saber mais sobre os diferentes métodos que você pode usar para solicitar credenciais de segurança temporárias ao assumir uma função, consulte Métodos para assumir um perfil.

Para chamar as operações de API, você pode usar um dos AWS SDKs. Os SDKs estão disponíveis para uma grande variedade de ambientes e linguagens de programação, incluindo Java, .NET, Python, Ruby, Android e iOS. Os SDKs processam tarefas como a assinatura criptográfica de suas solicitações, a solicitação de novas tentativas (se necessário) e o tratamento das respostas de erro. Você também pode usar a API de consulta do AWS STS, descrita na Referência de API do AWS Security Token Service. Por fim, duas ferramentas de linha de comando são suporte aos comandos do AWS STS: a AWS Command Line Interface e o AWS Tools for Windows PowerShell.

As operações da API do AWS STS criam uma nova sessão com credenciais de segurança temporárias que incluem um par de chaves de acesso e um token de sessão. O par de chaves de acesso consiste em um ID de chave de acesso e uma chave secreta. Os usuários (ou um aplicativo que o usuário executa) pode usar essas credenciais para acessar seus recursos. Você pode criar uma sessão de função e aprovar políticas e tags de sessão programaticamente usando operações de API do AWS STS. As permissões de sessão resultante são a interseção das políticas baseadas em identidade da função e das políticas de sessão. Para obter mais informações sobre políticas de sessão, consulte Políticas de sessão. Para obter mais informações sobre tags de sessão, consulte Passar tags de sessão no AWS STS.

nota

O tamanho do token de sessão que as operações de API do AWS STS retornam não é fixo. É altamente recomendável que você não faça suposições sobre o tamanho máximo. O tamanho típico do token é menos de 4096 bytes, mas pode variar.

Uso do AWS STS com regiões da AWS

Você pode enviar chamadas de API do AWS STS para um endpoint global ou para um dos endpoints regionais. Se escolher um endpoint mais próximo a você, você poderá reduzir a latência e melhorar a performance de suas chamadas de API. Você também pode optar por direcionar suas chamadas para um endpoint regional alternativo se não puder mais se comunicar com o endpoint original. Se estiver usando um dos vários SDKs da AWS, use o método do respectivo SDK para especificar uma região antes de fazer a chamada de API. Se construir manualmente as solicitações de API HTTP, você deverá direcionar a solicitação para o endpoint correto. Para obter mais informações, consulte a seção AWS STS de Regiões e endpoints e Gerenciar o AWS STS em uma Região da AWS.

A seguir veja as operações de API que podem ser usadas para adquirir credenciais temporárias para o uso em seu ambiente e aplicativos da AWS.

Solicitar credenciais para delegação e federação entre contas por meio de um intermediador de identidades personalizado

A operação da API AssumeRole é útil para permitir que os usuários existentes do IAM acessem recursos da AWS aos quais eles ainda não têm acesso. Por exemplo, o usuário pode precisar de acesso a recursos em outra Conta da AWS. Ela também é útil como um meio de obter acesso privilegiado temporariamente, por exemplo, para fornecer uma autenticação multifator (MFA). Você deve chamar essa API usando credenciais ativas. Para saber quem pode chamar essa operação, consulte Compare credenciais do AWS STS. Para ter mais informações, consulte Criar um perfil para delegar permissões a um usuário do IAM e Acesso seguro à API com a MFA.

Para solicitar credenciais de segurança temporárias para delegação e federação entre contas por meio de um intermediador de identidades personalizado
  1. Autentique-se com suas credenciais de segurança da AWS. Essa chamada deve ser feita usando credenciais de segurança da AWS válidas.

  2. Chame a operação AssumeRole.

O exemplo a seguir mostra uma solicitação e resposta de exemplo usando AssumeRole. Este exemplo de solicitação assume a função demo para a duração especificada com a política de sessão incluída, etiquetas de sessão, ID externo e identidade-fonte. A sessão resultante é nomeada John-session.

exemplo Exemplo de solicitação
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=AssumeRole &RoleSessionName=John-session &RoleArn=arn:aws::iam::123456789012:role/demo &Policy=%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Sid%22%3A%20%22Stmt1%22%2C%22Effect%22%3A%20%22Allow%22%2C%22Action%22%3A%20%22s3%3A*%22%2C%22Resource%22%3A%20%22*%22%7D%5D%7D &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &ExternalId=123ABC &SourceIdentity=DevUser123 &AUTHPARAMS

O valor da política mostrado no exemplo anterior é a versão codificada por URL da seguinte política:

{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}

O parâmetro AUTHPARAMS no exemplo é um espaço reservado para a sua assinatura. Uma assinatura é a informação de autenticação que você deve incluir com as solicitações de API HTTP da AWS. Recomendamos usar os SDKs da AWS para criar solicitações de API. Um dos benefícios de se fazer isso é que os SDKs tratam da assinatura das solicitações por você. Se você tiver que criar e assinar as solicitações de API manualmente, acesse Assinaturas e solicitações da AWS usando o Signature versão 4 no Referência geral da Amazon Web Services para saber como assinar uma solicitação.

Além das credenciais de segurança temporárias, a resposta inclui o nome de recurso da Amazon (ARN) para o usuário federado e o tempo de expiração das credenciais.

exemplo Exemplo de resposta
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <AssumeRoleResult> <SourceIdentity>DevUser123</SourceIdentity> <Credentials> <SessionToken> AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2019-07-15T23:28:33.359Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId> </Credentials> <AssumedRoleUser> <Arn>arn:aws:sts::123456789012:assumed-role/demo/John</Arn> <AssumedRoleId>ARO123EXAMPLE123:John</AssumedRoleId> </AssumedRoleUser> <PackedPolicySize>8</PackedPolicySize> </AssumeRoleResult> <ResponseMetadata> <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId> </ResponseMetadata> </AssumeRoleResponse>
nota

Uma conversão da AWS compacta as políticas de sessão e as tags de sessão passadas em um formato binário compactado que têm um limite separado. Sua solicitação pode falhar para esse limite mesmo que seu texto simples atenda aos outros requisitos. O elemento de resposta PackedPolicySize indica, em porcentagem, o quão perto as políticas e tags da sua solicitação estão do limite de tamanho superior.

Solicitar credenciais por meio de um provedor OIDC

A operação da API AssumeRoleWithWebIdentity retorna um conjunto de credenciais de segurança temporárias para usuários federados que são autenticados por meio de um provedor de identidades público. Exemplos de provedores de identidades públicos incluem Login with Amazon, Facebook, Google e qualquer provedor de identidades compatível com OpenID Connect (OIDC). O uso desta operação significa que seus usuários não precisam de suas próprias identidades do AWS ou do IAM. Para ter mais informações, consulte Federação OIDC.

nota

Em vez de chamar diretamente AssumeRoleWithWebIdentity, recomendamos que você use o Amazon Cognito e o provedor de credenciais do Amazon Cognito com os AWS SDKs para desenvolvimento móvel. Para obter mais informações, consulte Autenticação com o Amplify na documentação do Amplify.

Se você não estiver usando o Amazon Cognito, chame a ação AssumeRoleWithWebIdentity do AWS STS.

  1. Chame a operação AssumeRoleWithWebIdentity.

    Essa é uma chamada não assinada, o que significa que você não precisa autenticar as credenciais de segurança da AWS antes de fazer a solicitação.

    nota

    Uma chamada para AssumeRoleWithWebIdentity não é assinada (criptografada). Portanto, você deve incluir somente as políticas de sessão opcionais se a solicitação é transmitida por meio de um intermediário de confiança. Nesse caso, alguém poderia alterar a política para remover as restrições.

  2. Quando você chama AssumeRoleWithWebIdentity, a AWS verifica a autenticidade do token. Por exemplo, dependendo do provedor, a AWS pode fazer uma chamada para o provedor e incluir o token que o aplicativo passou. Supondo que o provedor de identidade valide o token, a AWS retorna as seguintes informações:

    • Um conjunto de credenciais de segurança temporárias. Elas consistem em um ID de chave de acesso, chave de acesso secreta e um token de sessão.

    • O ID da função e o ARN da função assumida.

    • Um valor SubjectFromWebIdentityToken que contém o ID de usuário exclusivo.

  3. Use as credenciais de segurança temporárias que foram devolvidas na resposta para fazer chamadas de API da AWS. Esse é o mesmo processo de fazer uma chamada de API da AWS com credenciais de segurança de longo prazo. A diferença é que você deve incluir o token de sessão, o que permite que a AWS verifique se as credenciais de segurança temporárias são válidas.

Seu aplicativo deve armazenar as credenciais em cache. Como observado, por padrão, as credenciais expiram após uma hora. Se não usar a operação AmazonSTSCredentialsProvider no SDK da AWS, você e sua aplicação serão responsáveis por chamar AssumeRoleWithWebIdentity novamente. Chame esta operação para obter um novo conjunto de credenciais de segurança temporárias antes que as antigas expirem.

Solicitar credenciais por meio de um provedor de identidades SAML 2.0

A operação de API AssumeRoleWithSAML retorna um conjunto de credenciais de segurança temporárias para usuários federados que são autenticados pelo sistema de identidade existente da sua organização. Os usuários também devem usar SAML 2.0 (Security Assertion Markup Language) para passar informações de autenticação e autorização para a AWS. Esta operação de API é útil em organizações que integraram seus sistemas de identidade (como o Windows Active Directory ou OpenLDAP) a um software que pode produzir declarações em SAML. Essa integração fornece informações sobre a identidade e as permissões do usuário (como o Active Directory Federation Services ou o Shibboleth). Para ter mais informações, consulte Federação SAML 2.0.

  1. Chame a operação AssumeRoleWithSAML.

    Essa é uma chamada não assinada, o que significa que você não precisa autenticar as credenciais de segurança da AWS antes de fazer a solicitação.

    nota

    Uma chamada para AssumeRoleWithSAML não é assinada (criptografada). Portanto, você deve incluir somente as políticas de sessão opcionais se a solicitação é transmitida por meio de um intermediário de confiança. Nesse caso, alguém poderia alterar a política para remover as restrições.

  2. Quando você chama AssumeRoleWithSAML, a AWS verifica a autenticidade da declaração do SAML. Supondo que o provedor de identidade valide a declaração, a AWS retorna as seguintes informações:

    • Um conjunto de credenciais de segurança temporárias. Elas consistem em um ID de chave de acesso, chave de acesso secreta e um token de sessão.

    • O ID da função e o ARN da função assumida.

    • Um valor Audience que contém o valor do atributo Recipient do elemento SubjectConfirmationData da declaração do SAML.

    • Um valor Issuer que contém o valor do o elemento Issuer da declaração do SAML.

    • Um elemento NameQualifier que contém um valor de hash criado a partir do valor Issuer, o ID da Conta da AWS e o nome amigável do provedor de SAML. Quando combinado com o elemento Subject, eles podem identificar exclusivamente o usuário federado.

    • Um elemento Subject que contém o valor do elemento NameID no elemento Subject da declaração do SAML.

    • Um elemento SubjectType que indica o formato do elemento Subject. O valor pode ser persistent, transientou o URI Format completo dos elementos Subject e NameID usados em sua declaração do SAML. Para obter mais informações sobre o atributo NameID do elemento Format, consulte Configurar declarações SAML para a resposta de autenticação.

  3. Use as credenciais de segurança temporárias devolvidas na resposta para fazer chamadas de API da AWS. Esse é o mesmo processo de fazer uma chamada de API da AWS com credenciais de segurança de longo prazo. A diferença é que você deve incluir o token de sessão, o que permite que a AWS verifique se as credenciais de segurança temporárias são válidas.

Seu aplicativo deve armazenar as credenciais em cache. Por padrão, as credenciais expiram após uma hora. Se você não estiver usando a ação AmazonSTSCredentialsProvider no SDK da AWS, caberá a você e ao seu aplicativo chamar AssumeRoleWithSAML novamente. Chame esta operação para obter um novo conjunto de credenciais de segurança temporárias antes que as antigas expirem.

Solicitar credenciais por meio de um intermediador de identidades personalizado

A operação de API GetFederationToken retorna um conjunto de credenciais de segurança temporárias para usuários federados. A API é diferente de AssumeRole, em que o período de expiração padrão é significativamente maior (até 12 horas, em vez de 1 hora). Além disso, você pode usar o parâmetro DurationSeconds para especificar uma duração para que as credenciais de segurança temporárias permaneçam válidas. As credenciais resultantes são válidas pela duração especificada, de 900 segundos (15 minutos) até 129.600 segundos (36 horas). O período de expiração maior pode ajudar a reduzir o número de chamadas para a AWS porque você não precisa obter novas credenciais com a mesma frequência.

  1. Faça a autenticação com as credenciais de segurança da AWS do seu usuário do IAM específico. Essa chamada deve ser feita usando credenciais de segurança da AWS válidas.

  2. Chame a operação GetFederationToken.

A chamada GetFederationToken retorna credenciais de segurança temporárias que consistem em um token de segurança, chave de acesso, chave secreta e expiração. Você pode usar GetFederationToken se deseja gerenciar permissões dentro de sua organização (por exemplo, usando o aplicativo de proxy para atribuir permissões).

O exemplo a seguir mostra uma solicitação e resposta de exemplo que usa GetFederationToken. Esta solicitação de exemplo agrupa o usuário de chamada pela duração especificada ao ARN da política de sessão e às tags de sessão. A sessão resultante é nomeada Jane-session.

exemplo Exemplo de solicitação
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetFederationToken &Name=Jane-session &PolicyArns.member.1.arn==arn%3Aaws%3Aiam%3A%3A123456789012%3Apolicy%2FRole1policy &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &AUTHPARAMS

O ARN da política mostrado no exemplo anterior inclui o seguinte ARN codificado em URL:

arn:aws:iam::123456789012:policy/Role1policy

Além disso, observe que o parâmetro &AUTHPARAMS no exemplo destina-se a ser o espaço reservado para as informações de autenticação. Esta é a assinatura, que é necessário incluir às solicitações de API HTTP da AWS. Recomendamos usar os SDKs da AWS para criar solicitações de API. Um dos benefícios de se fazer isso é que os SDKs tratam da assinatura das solicitações por você. Se você tiver que criar e assinar as solicitações de API manualmente, acesse Assinaturas e solicitações da AWS usando o Signature versão 4 no Referência geral da Amazon Web Services para saber como assinar uma solicitação.

Além das credenciais de segurança temporárias, a resposta inclui o nome de recurso da Amazon (ARN) para o usuário federado e o tempo de expiração das credenciais.

exemplo Exemplo de resposta
<GetFederationTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <GetFederationTokenResult> <Credentials> <SessionToken> AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCEXAMPLE== </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2019-04-15T23:28:33.359Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE;</AccessKeyId> </Credentials> <FederatedUser> <Arn>arn:aws:sts::123456789012:federated-user/Jean</Arn> <FederatedUserId>123456789012:Jean</FederatedUserId> </FederatedUser> <PackedPolicySize>4</PackedPolicySize> </GetFederationTokenResult> <ResponseMetadata> <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId> </ResponseMetadata> </GetFederationTokenResponse>
nota

Uma conversão da AWS compacta as políticas de sessão e as tags de sessão passadas em um formato binário compactado que têm um limite separado. Sua solicitação pode falhar para esse limite mesmo que seu texto simples atenda aos outros requisitos. O elemento de resposta PackedPolicySize indica, em porcentagem, o quão perto as políticas e tags da sua solicitação estão do limite de tamanho superior.

A AWS recomenda que você conceda permissões no nível do recurso (por exemplo, você anexa uma política baseada em recurso a um bucket do Amazon S3). Você pode omitir o parâmetro Policy. No entanto, se você não incluir uma política para o usuário federado, as credenciais de segurança temporárias não concederão permissões. Neste caso, você deve usar as políticas de recurso para conceder ao usuário federado o acesso aos seus recursos da AWS.

Por exemplo, suponha que o número da sua Conta da AWS seja 111122223333 e você tenha um bucket do Amazon S3 que deseja permitir que Susan acesse. As credenciais de segurança temporárias da Susan não incluem uma política para o bucket. Nesse caso, é necessário certificar-se de que o bucket tem uma política com um ARN que corresponde ao de Susan, como arn:aws:sts::111122223333:federated-user/Susan.

Solicitar credenciais para usuários em ambientes não confiáveis

A operação da API GetSessionToken retorna um conjunto de credenciais de segurança temporárias para um usuário do IAM existente. Ela é útil para fornecer segurança aprimorada, como, por exemplo, permitir solicitações da AWS somente quando a MFA estiver habilitada para o usuário do IAM. Como as credenciais são temporárias, elas fornecem segurança aprimorada quando você tem um usuário do IAM que acessa seus recursos por meio de um ambiente menos seguro. Exemplos de ambientes menos seguros incluem um dispositivo móvel ou navegador da web.

  1. Faça a autenticação com as credenciais de segurança da AWS do seu usuário do IAM específico. Essa chamada deve ser feita usando credenciais de segurança da AWS válidas.

  2. Chame a operação GetSessionToken.

  3. GetSessionToken retorna as credenciais de segurança temporárias que consistem em um token de sessão, um ID de chave de acesso e uma chave de acesso secreta.

Por padrão, as credenciais de segurança temporárias de um usuário do IAM são válidas por no máximo 12 horas. Mas você pode solicitar uma duração de, no mínimo, 15 minutos ou, no máximo, 36 horas usando o parâmetro DurationSeconds. Por motivos de segurança, um token para um Usuário raiz da conta da AWS é restrito a uma hora de duração.

O exemplo a seguir mostra uma solicitação e resposta de exemplo usando GetSessionToken. A resposta também inclui o tempo de expiração das credenciais de segurança temporárias.

exemplo Exemplo de solicitação
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS

O parâmetro AUTHPARAMS no exemplo é um espaço reservado para a sua assinatura. Uma assinatura é a informação de autenticação que você deve incluir com as solicitações de API HTTP da AWS. Recomendamos usar os SDKs da AWS para criar solicitações de API. Um dos benefícios de se fazer isso é que os SDKs tratam da assinatura das solicitações por você. Se você tiver que criar e assinar as solicitações de API manualmente, acesse Assinaturas e solicitações da AWS usando o Signature versão 4 no Referência geral da Amazon Web Services para saber como assinar uma solicitação.

exemplo Exemplo de resposta
<GetSessionTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <GetSessionTokenResult> <Credentials> <SessionToken> AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/L To6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3z rkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtp Z3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE </SessionToken> <SecretAccessKey> wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY </SecretAccessKey> <Expiration>2011-07-11T19:55:29.611Z</Expiration> <AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId> </Credentials> </GetSessionTokenResult> <ResponseMetadata> <RequestId>58c5dbae-abef-11e0-8cfe-09039844ac7d</RequestId> </ResponseMetadata> </GetSessionTokenResponse>

Opcionalmente, a solicitação GetSessionToken pode incluir os valores SerialNumber e TokenCode para a verificação da autenticação multifator (MFA) da AWS. Se os valores fornecidos forem válidos, o AWS STS fornecerá credenciais de segurança temporárias que incluem o estado da autenticação MFA. As credenciais de segurança temporárias podem ser usadas para acessar as operações de API protegidas por MFA ou os sites da AWS pelo tempo em que a autenticação MFA for válida.

O exemplo a seguir mostra uma solicitação GetSessionToken que inclui um código de verificação de MFA e número de série do dispositivo.

https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=7200 &SerialNumber=YourMFADeviceSerialNumber &TokenCode=123456 &AUTHPARAMS
nota

A chamada para o AWS STS pode ser para o endpoint global ou para qualquer um dos endpoints regionais para os quais você ativar sua Conta da AWS. Para obter mais informações, consulte a seção do AWS STS de Regiões e endpoints.

O parâmetro AUTHPARAMS no exemplo é um espaço reservado para a sua assinatura. Uma assinatura é a informação de autenticação que você deve incluir com as solicitações de API HTTP da AWS. Recomendamos usar os SDKs da AWS para criar solicitações de API. Um dos benefícios de se fazer isso é que os SDKs tratam da assinatura das solicitações por você. Se você tiver que criar e assinar as solicitações de API manualmente, acesse Assinaturas e solicitações da AWS usando o Signature versão 4 no Referência geral da Amazon Web Services para saber como assinar uma solicitação.