Solicitud de credenciales de seguridad temporales
Para solicitar credenciales de seguridad temporales, puede utilizar las operaciones AWS Security Token Service (AWS STS) en la API de AWS. Esto incluye operaciones para crear credenciales de seguridad temporales que pueden controlar el acceso a sus recursos de AWS y proporcionárselas a usuarios de confianza. Para obtener más información acerca de AWS STS, consulte Credenciales de seguridad temporales en IAM. Para obtener más información sobre los distintos métodos que puede utilizar para solicitar credenciales de seguridad temporales asumiendo un rol, consulte Métodos para asumir un rol.
Para llamar a las operaciones de la API, puede utilizar uno de los SDK de AWS
Las operaciones de API de AWS STS crean una nueva sesión con credenciales de seguridad temporales formadas por un par de claves de acceso y un token de sesión. El par de claves de acceso consta de un ID de clave de acceso y una clave secreta. Los usuarios (o una aplicación que el usuario ejecute) pueden utilizar estas credenciales para obtener acceso a los recursos. Puede crear una sesión de rol y pasar políticas de sesión y etiquetas de sesión con programación mediante las operaciones de la API de AWS STS. Los permisos de la sesión resultantes son la intersección de las políticas basadas en identidades del rol y las políticas de la sesión. Para obtener más información acerca de las políticas de sesión, consulte Políticas de sesión. Para obtener más información acerca de las etiquetas de sesión, consulte Transferencia de etiquetas de sesión en AWS STS.
nota
El tamaño del token de seguridad que devuelven las operaciones de la API de AWS STS no es fijo. Recomendamos encarecidamente que no realice suposiciones sobre el tamaño máximo. El tamaño típico del token es inferior a 4096 bytes, pero puede variar.
Uso de AWS STS con regiones de AWS
Puede enviar llamadas a la API de AWS STS tanto a un punto de enlace global como a uno de los puntos de enlace regionales. Si elige el punto de enlace más cercano, puede reducir la latencia y mejorar el rendimiento de las llamadas a la API. También puede elegir enviar sus llamadas a un punto de enlace regional alternativo si ya no puede comunicarse con el punto de enlace original. Si utiliza uno de los distintos SDK de AWS, utilice el método del SDK para especificar una región antes de realizar la llamada a la API. Si va realiza manualmente solicitudes de API HTTP, debe enviar usted mismo la solicitud al punto de conexión correcto. Para obtener más información, consulte la AWS STS sección de Regiones y puntos de enlace y Administración de AWS STS en una Región de AWS.
Las siguientes son operaciones de API que puede utilizar para obtener credenciales temporales para su uso en aplicaciones y entornos de AWS.
Solicitud de credenciales para la federación y delegación entre cuentas a través de un agente de identidades personalizado
La operación de API AssumeRole
es útil para permitir a los usuarios existentes de IAM el acceso a recursos de AWS a los que todavía no tienen acceso. Por ejemplo, el usuario puede necesitar acceso a los recursos de otra Cuenta de AWS. También es útil para obtener temporalmente acceso privilegiado por ejemplo, para proporcionar autenticación multifactor (MFA). Debe llamar a esta API con las credenciales de usuario activas. Para saber quién puede llamar a esta operación, consulte Comparación de credenciales AWS STS. Para obtener más información, consulte Crear un rol para delegar permisos a un usuario de IAM y Acceso seguro a la API con MFA.
Para solicitar credenciales de seguridad temporales para la federación y delegación entre cuentas mediante un agente de identidades personalizado
-
Autentíquese con sus credenciales de seguridad de AWS. Esta llamada debe realizarse con credenciales de seguridad de AWS válidas.
-
Llame a la operación
AssumeRole
.
En el siguiente ejemplo se muestra una solicitud y respuesta de muestra que utiliza AssumeRole
. Esta solicitud de ejemplo asume el rol demo
durante la duración especificada con la política de sesión incluida, las etiquetas de sesión, el ID externo y la identidad de origen. La sesión resultante se denomina John-session
.
ejemplo Ejemplo de solicitud
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
El valor de política que se muestra en el ejemplo anterior es la versión codificada como URL de la siguiente política:
{"Version":"2012-10-17","Statement":[{"Sid":"Stmt1","Effect":"Allow","Action":"s3:*","Resource":"*"}]}
El parámetro AUTHPARAMS
en el ejemplo es un marcador de posición para su firma. Una firma es la información de autenticación que debe incluir en las solicitudes de la API HTTP de AWS. Recomendamos utilizar los SDK de AWS
Además de las credenciales de seguridad temporales, la respuesta incluye el Nombre de recurso de Amazon (ARN) para el usuario federado y el plazo de vencimiento de las credenciales.
ejemplo Ejemplo de respuesta
<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
Una conversión de AWS comprime las políticas de sesión pasadas y las etiquetas de sesión en un formato binario empaquetado que tiene un límite separado. Su solicitud puede fallar para este límite incluso si el texto sin formato cumple con los demás requisitos. El elemento de respuesta PackedPolicySize
indica por porcentaje lo cerca que están las políticas y etiquetas de su solicitud al límite de tamaño superior.
Solicitud de credenciales mediante un proveedor de OIDC
La operación de API AssumeRoleWithWebIdentity
devuelve un conjunto de credenciales de seguridad temporales para los usuarios federados autenticados a través de un proveedor de identidad público. Entre los ejemplos de proveedores de identidad públicos se incluyen Login with Amazon, Facebook, Google o cualquier proveedor de identidad compatible con OpenID Connect (OIDC). El uso de esta operación significa que los usuarios no tienen sus propias identidades de AWS o IAM. Para obtener más información, consulte Federación OIDC.
nota
En lugar de llamar directamente a AssumeRoleWithWebIdentity
, le recomendamos que utilice Amazon Cognito y las credenciales del proveedor de Amazon Cognito con los SDK de AWS para el desarrollo de aplicaciones móviles. Para obtener más información, consulte Autenticación con Amplify
Si no usa Amazon Cognito, llame a la acción AssumeRoleWithWebIdentity
de AWS STS.
-
Llame a la operación
AssumeRoleWithWebIdentity
.Se trata de una llamada sin firmar, lo que significa que no es necesario autenticar las credenciales de seguridad de AWS antes de realizar la solicitud.
nota
Una llamada a
AssumeRoleWithWebIdentity
no se firma (cifrada). Por lo tanto, solo debe incluir estas políticas de sesión opcionales si la solicitud se transmite a través de un intermediario de confianza. En este caso, alguien podría modificar la política para eliminar las restricciones. -
Si llama a
AssumeRoleWithWebIdentity
, AWS verifica la autenticidad del token. Por ejemplo, en función del proveedor de AWS, se podría realizar una llamada al proveedor e incluir el token que la aplicación ha transmitido. Suponiendo que el proveedor de identidad valida el token, AWS le devuelve la siguiente información:-
Un conjunto de credenciales de seguridad temporales. Estas incluyen un ID de clave de acceso, una clave de acceso secreta y un token de sesión.
-
El ID de rol y el ARN del rol asumido.
-
Un valor
SubjectFromWebIdentityToken
que incluye el ID de usuario único.
-
-
Utiliza las credenciales de seguridad temporales que se devolvieron en la respuesta para realizar llamadas a la API de AWS. Se trata del mismo proceso que para hacer una llamada a la API de AWS con credenciales de seguridad a largo plazo. La diferencia es que debe incluir el token de sesión, que permite a AWS verificar que las credenciales de seguridad temporales son válidas.
La aplicación debe almacenar en caché las credenciales. Tal y como se ha mencionado, las credenciales caducan después de una hora de forma predeterminada. Si no utiliza la operación AmazonSTSCredentialsProviderAssumeRoleWithWebIdentity
. Llame a esta operación para obtener un nuevo conjunto de credenciales de seguridad temporales antes de que caduquen las antiguas.
Solicitud de credenciales a través de un proveedor de identidades de SAML 2.0
La operación de API AssumeRoleWithSAML
devuelve un conjunto de credenciales de seguridad temporales para los usuarios federados que se autentican a través del sistema de identidad existente de su organización. Los usuarios también deben utilizar SAML
-
Llame a la operación
AssumeRoleWithSAML
.Se trata de una llamada sin firmar, lo que significa que no es necesario autenticar las credenciales de seguridad de AWS antes de realizar la solicitud.
nota
Una llamada a
AssumeRoleWithSAML
no se firma (cifrada). Por lo tanto, solo debe incluir estas políticas de sesión opcionales si la solicitud se transmite a través de un intermediario de confianza. En este caso, alguien podría modificar la política para eliminar las restricciones. -
Si llama a
AssumeRoleWithSAML
, AWS verifica la autenticidad de la aserción SAML. Suponiendo que el proveedor de identidad valida la aserción, AWS le devuelve la siguiente información:-
Un conjunto de credenciales de seguridad temporales. Estas incluyen un ID de clave de acceso, una clave de acceso secreta y un token de sesión.
-
El ID de rol y el ARN del rol asumido.
-
Un valor
Audience
que incluye el valor del atributoRecipient
del elementoSubjectConfirmationData
de la aserción SAML. -
Un valor
Issuer
que incluye el valor del elementoIssuer
de la aserción SAML. -
Un elemento
NameQualifier
que incluye un valor hash creado a partir del valorIssuer
, el ID de la Cuenta de AWS y el nombre fácil de recordar del proveedor SAML. Cuando se combina con el elementoSubject
, pueden identificar exclusivamente al usuario federado. -
Un elemento
Subject
que incluye el valor del elementoNameID
en el elementoSubject
de la aserción SAML. -
Un elemento
SubjectType
que indica el formato del elementoSubject
. El valor puede serpersistent
,transient
o la URI completaFormat
de los elementosSubject
yNameID
utilizados en su aserción SAML. Para obtener información sobre el atributoNameID
del elementoFormat
, consulte Configure aserciones SAML para la respuesta de autenticación.
-
-
Utiliza las credenciales de seguridad temporales que se devolvieron en la respuesta para realizar llamadas a la API de AWS. Se trata del mismo proceso que para hacer una llamada a la API de AWS con credenciales de seguridad a largo plazo. La diferencia es que debe incluir el token de sesión, que permite a AWS verificar que las credenciales de seguridad temporales son válidas.
La aplicación debe almacenar en caché las credenciales. Las credenciales caducan después de una hora de forma predeterminada. Si no utiliza la acción AmazonSTSCredentialsProviderAssumeRoleWithSAML
. Llame a esta operación para obtener un nuevo conjunto de credenciales de seguridad temporales antes de que caduquen las antiguas.
Solicitud de credenciales a través de un agente de identidades personalizado
La operación de API GetFederationToken
devuelve un conjunto de credenciales de seguridad temporales para los usuarios federados. Esta API difiere de AssumeRole
en que el periodo de vencimiento predeterminado es bastante mayor (12 horas en lugar de una hora). Además, puede utilizar el parámetro DurationSeconds
para especificar una duración de validez para las credenciales de seguridad temporales. Las credenciales resultantes son válidas durante el tiempo especificado, entre 900 segundos (15 minutos) y 129 600 segundos (36 horas). Un periodo de vencimiento mayor puede ayudar a reducir el número de llamadas a AWS, ya que no es necesario obtener credenciales nuevas con tanta frecuencia.
-
Autentíquese con las credenciales de seguridad de AWS de su usuario de IAM específico. Esta llamada debe realizarse con credenciales de seguridad de AWS válidas.
-
Llame a la operación
GetFederationToken
.
La llamada GetFederationToken
devuelve credenciales de seguridad temporales que incluyen el token de seguridad, la clave de acceso, la clave secreta y el vencimiento. Puede utilizar GetFederationToken
si desea administrar los permisos de su organización (por ejemplo, la utilización de la aplicación de proxy para asignar permisos).
El siguiente ejemplo muestra una solicitud y respuesta de muestra que utiliza GetFederationToken
. En este ejemplo de solicitud se federa al usuario que llama durante la duración especificada con el ARN de la póliza de sesión y las etiquetas de sesión. La sesión resultante se denomina Jane-session
.
ejemplo Ejemplo de solicitud
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
El ARN de la política que se muestra en el ejemplo anterior incluye el siguiente ARN codificado en URL:
arn:aws:iam::123456789012:policy/Role1policy
Además, tenga en cuenta que el parámetro &AUTHPARAMS
del ejemplo se entiende como marcador de posición para la información de autenticación. Esta es la firma, que debe incluir con las solicitudes API de HTTP de AWS. Recomendamos utilizar los SDK de AWS
Además de las credenciales de seguridad temporales, la respuesta incluye el Nombre de recurso de Amazon (ARN) para el usuario federado y el plazo de vencimiento de las credenciales.
ejemplo Ejemplo de respuesta
<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
Una conversión de AWS comprime las políticas de sesión pasadas y las etiquetas de sesión en un formato binario empaquetado que tiene un límite separado. Su solicitud puede fallar para este límite incluso si el texto sin formato cumple con los demás requisitos. El elemento de respuesta PackedPolicySize
indica por porcentaje lo cerca que están las políticas y etiquetas de su solicitud al límite de tamaño superior.
AWS recomienda conceder permisos en el nivel de recursos (por ejemplo, adjuntar una política basada en recursos a un bucket de Amazon S3), puede omitir el parámetro Policy
. No obstante, si no incluye una política para el usuario federado, las credenciales de seguridad temporales no concederán los permisos. En este caso, debe utilizar las políticas de recursos para conceder acceso a sus recursos de AWS al usuario federado.
Por ejemplo, supongamos que el número de Cuenta de AWS es 111122223333 y que dispone de un bucket de Amazon S3 al que desea que Susan obtenga acceso. Las credenciales de seguridad temporales de Susan no incluyen una política para el bucket. En ese caso, tendría que asegurarse de que el bucket tiene una política con un ARN que coincida con el ARN de Susan, como arn:aws:sts::111122223333:federated-user/Susan
.
Solicitud de credenciales para usuarios de entornos que no son de confianza
La operación de API GetSessionToken
devuelve un conjunto de credenciales de seguridad temporales para un usuario de IAM existente. Es útil para proporcionar mayor seguridad, por ejemplo, para permitir las solicitudes de AWS únicamente cuando la función MFA está habilitada para el usuario de IAM. Dado que las credenciales son temporales, proporcionan mayor seguridad cuando se dispone de un usuario de IAM que tiene acceso a los recursos a través de un entorno menos seguro. Algunos ejemplos de entornos menos seguros son un dispositivo móvil o un navegador web.
-
Autentíquese con las credenciales de seguridad de AWS de su usuario de IAM específico. Esta llamada debe realizarse con credenciales de seguridad de AWS válidas.
-
Llame a la operación
GetSessionToken
. -
GetSessionToken
devuelve credenciales de seguridad temporales que incluyen un token de sesión, un ID de clave de acceso y una clave de acceso secreta.
De forma predeterminada, las credenciales de seguridad temporales de un usuario de IAM son válidas durante un máximo de 12 horas. Sin embargo, puede solicitar una duración mínima de 15 minutos o una duración máxima de 36 horas mediante el parámetro DurationSeconds
. Por motivos de seguridad, un token para un usuario Usuario raíz de la cuenta de AWS está limitado a una hora.
En el siguiente ejemplo se muestra una solicitud y respuesta de muestra que utiliza GetSessionToken
. La respuesta también incluye el plazo de vencimiento de las credenciales de seguridad temporales.
ejemplo Ejemplo de solicitud
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS
El parámetro AUTHPARAMS
en el ejemplo es un marcador de posición para su firma. Una firma es la información de autenticación que debe incluir en las solicitudes de la API HTTP de AWS. Recomendamos utilizar los SDK de AWS
ejemplo Ejemplo de respuesta
<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>
De forma opcional, la solicitud GetSessionToken
puede incluir los valores SerialNumber
y TokenCode
para la verificación con autenticación multifactor (MFA) de AWS. Si los valores facilitados son válidos, AWS STS proporciona credenciales de seguridad temporales que incluyen el estado de la autenticación MFA. A continuación, las credenciales de seguridad temporales pueden utilizarse para obtener acceso a las acciones de la API protegidas por MFA o a los sitios web de AWS durante el periodo en que la autenticación MFA sea válida.
El siguiente ejemplo muestra una solicitud GetSessionToken
que incluye un código de verificación de MFA y un número de serie del dispositivo.
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=7200 &SerialNumber=YourMFADeviceSerialNumber &TokenCode=123456 &AUTHPARAMS
nota
La llamada a AWS STS se puede realizar al punto de conexión global o a cualquiera de los puntos de conexión regionales que active en su Cuenta de AWS. Para obtener más información, consulte la sección de AWS STS de Regiones y puntos de enlace.
El parámetro AUTHPARAMS
en el ejemplo es un marcador de posición para su firma. Una firma es la información de autenticación que debe incluir en las solicitudes de la API HTTP de AWS. Recomendamos utilizar los SDK de AWS