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
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
-
Autentique-se com suas credenciais de segurança da AWS. Essa chamada deve ser feita usando credenciais de segurança da AWS válidas.
-
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
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
Se você não estiver usando o Amazon Cognito, chame a ação AssumeRoleWithWebIdentity
do AWS STS.
-
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. -
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.
-
-
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 AmazonSTSCredentialsProviderAssumeRoleWithWebIdentity
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
-
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. -
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 atributoRecipient
do elementoSubjectConfirmationData
da declaração do SAML. -
Um valor
Issuer
que contém o valor do o elementoIssuer
da declaração do SAML. -
Um elemento
NameQualifier
que contém um valor de hash criado a partir do valorIssuer
, o ID da Conta da AWS e o nome amigável do provedor de SAML. Quando combinado com o elementoSubject
, eles podem identificar exclusivamente o usuário federado. -
Um elemento
Subject
que contém o valor do elementoNameID
no elementoSubject
da declaração do SAML. -
Um elemento
SubjectType
que indica o formato do elementoSubject
. O valor pode serpersistent
,transient
ou o URIFormat
completo dos elementosSubject
eNameID
usados em sua declaração do SAML. Para obter mais informações sobre o atributoNameID
do elementoFormat
, consulte Configurar declarações SAML para a resposta de autenticação.
-
-
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 AmazonSTSCredentialsProviderAssumeRoleWithSAML
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.
-
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.
-
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
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.
-
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.
-
Chame a operação
GetSessionToken
. -
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
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