in

Simplifique el acceso a servicios externos mediante AWS IAM Outbound Identity Federation | Servicios web de Amazon

Al crear aplicaciones que abarcan múltiples proveedores de nube o se integran con servicios externos, los desarrolladores enfrentan un desafío persistente: administrar las credenciales de forma segura. Los enfoques tradicionales requieren almacenar credenciales a largo plazo, como claves API y contraseñas, lo que genera riesgos de seguridad y gastos operativos.

Hoy anunciamos una nueva capacidad llamada federación de identidades salientes de AWS Identity and Access Management (IAM) que los clientes pueden utilizar para federar de forma segura sus identidades de Amazon Web Services (AWS) en servicios externos sin almacenar credenciales a largo plazo. Ahora puede utilizar tokens web JSON (JWT) de corta duración para autenticar sus cargas de trabajo de AWS con una amplia gama de proveedores externos, plataformas de software como servicio (SaaS) y aplicaciones autohospedadas.

Esta característica permite a los principales de IAM (como los usuarios y roles de IAM) obtener JWT firmados criptográficamente que afirman su identidad de AWS. Los servicios externos, como proveedores externos, plataformas SaaS y aplicaciones locales, pueden verificar la autenticidad del token validando su firma. Tras la verificación exitosa, podrá acceder de forma segura al servicio externo.

como funciona
Con la federación de identidades salientes de IAM, intercambia sus credenciales de AWS IAM por JWT de corta duración. Esto mitiga los riesgos de seguridad asociados con las credenciales a largo plazo y al mismo tiempo permite patrones de autenticación consistentes.

Analicemos un escenario en el que su aplicación que se ejecuta en AWS necesita interactuar con un servicio externo. Para acceder a las API o recursos del servicio externo, su aplicación llama a la API `GetWebIdentityToken` de AWS Security Token Service (AWS STS) para obtener un JWT.

El siguiente diagrama muestra este flujo:

  1. Su aplicación que se ejecuta en AWS solicita un token de AWS STS llamando al GetWebIdentityToken API. La aplicación utiliza sus credenciales de AWS existentes obtenidas de la plataforma subyacente (como perfiles de instancia de Amazon EC2, roles de ejecución de AWS Lambda u otros servicios informáticos de AWS) para autenticar esta llamada API.
  2. AWS STS devuelve un token web JSON (JWT) firmado criptográficamente que afirma la identidad de su aplicación.
  3. Su aplicación envía el JWT al servicio externo para su autenticación.
  4. El servicio externo obtiene las claves de verificación del punto final del conjunto de claves web JSON (JWKS) para verificar la autenticidad del token.
  5. El servicio externo valida la firma del JWT utilizando estas claves de verificación y confirma que el token es auténtico y fue emitido por AWS.
  6. Después de una verificación exitosa, el servicio externo intercambia el JWT por sus propias credenciales. Luego, su aplicación puede usar estas credenciales para realizar las operaciones previstas.

Configuración de la federación de identidades salientes de AWS IAM
Para comenzar a utilizar esta función, necesito habilitar la federación de identidades salientes para mi cuenta de AWS. Navego a IAM y elijo Configuraciones de la cuenta bajo Gestión de acceso en el panel de navegación de la izquierda.

Después de habilitar la función, AWS genera una URL de emisor única para mi cuenta de AWS que aloja los puntos finales de descubrimiento de OpenID Connect (OIDC) en /.well-known/openid-configuration y /.well-known/jwks.json. Los puntos finales de descubrimiento de OpenID Connect (OIDC) contienen las claves y los metadatos necesarios para la verificación del token.

A continuación, necesito configurar los permisos de IAM. Mi principal de IAM (rol o usuario) debe tener la sts:GetWebIdentityToken permiso para solicitar tokens.

Por ejemplo, la siguiente política de identidad especifica el acceso al STS GetWebIdentityToken API, que permite a la entidad principal de IAM generar tokens.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetWebIdentityToken",
      "Resource": "*",
    }
  ]
}

En esta etapa, necesito configurar el servicio externo para que confíe y acepte tokens emitidos por mi cuenta de AWS. Los pasos específicos varían según el servicio, pero generalmente implican:

  1. Registrar la URL del emisor de mi cuenta de AWS como proveedor de identidad confiable
  2. Configurar qué afirmaciones validar (audiencia, patrones de temas)
  3. El token de asignación reclama permisos en el servicio externo

Empecemos
Ahora, permítame explicarle un ejemplo que muestra el proceso de generación de tokens del lado del cliente y de verificación del lado del servidor.

Primero, llamo a la STS GetWebIdentityToken API para obtener un JWT que afirma mi identidad de AWS. Al llamar a la API, puedo especificar la audiencia prevista, el algoritmo de firma y la vida útil del token como parámetros de solicitud.

  • Audience: Completa el reclamo `aud` en el JWT, identificando el destinatario previsto del token (por ejemplo, «mi-aplicación»)
  • DurationSeconds: La vida útil del token en segundos, que oscila entre 60 segundos (1 minuto) y 3600 segundos (1 hora), con un valor predeterminado de 600 segundos (5 minutos).
  • SigningAlgorithm: Elija ES384 (ECDSA usando P-384 y SHA-384) o RS256 (RSA usando SHA-256)
  • Tags (opcional): una matriz de pares clave-valor que aparecen como notificaciones personalizadas en el token, que puede usar para incluir contexto adicional que permita a los servicios externos implementar un control de acceso detallado

A continuación se muestra un ejemplo de cómo obtener un token de identidad utilizando el SDK de AWS para Python (Boto3). También puedo hacer esto usando la interfaz de línea de comandos de AWS (AWS CLI).


import boto3

sts_client = boto3.client('sts')
response = sts_client.get_web_identity_token(
    Audience=['my-app'],
    SigningAlgorithm='ES384',  # or 'RS256'
    DurationSeconds=300
)
jwt_token = response['IdentityToken']
print(jwt_token)

Esto devuelve un JWT firmado que puedo inspeccionar usando cualquier analizador JWT.

{
eyJraWQiOiJFQzM4NF8wIiwidHlwIjoiSldUIiwiYWxnIjoiRVMzODQifQ.hey...

Puedo decodificar el token usando cualquier analizador JWT como este Depurador JWT. El encabezado del token muestra que está firmado con ES384 (ECDSA).


{
  "kid": "EC384_0",
  "typ": "JWT",
  "alg": "ES384"
}

Además, la carga útil contiene notificaciones OIDC estándar además de metadatos específicos de AWS. Las reclamaciones estándar de OIDC incluyen sujeto (“sub”), audiencia (“aud”), emisor (“iss”) y otros.

{
  "aud": "my-app",
  "sub": "arn:aws:iam::ACCOUNT_ID:role/MyAppRole",
  "https://sts.amazonaws.com/": {
    "aws_account": "ACCOUNT_ID",
    "source_region": "us-east-1",
    "principal_id": "arn:aws:iam::ACCOUNT_ID:role/MyAppRole"
  },
  "iss": "https://abc12345-def4-5678-90ab-cdef12345678.tokens.sts.global.api.aws",
  "exp": 1759786941,
  "iat": 1759786041,
  "jti": "5488e298-0a47-4c5b-80d7-6b4ab8a4cede"
}

AWS STS también enriquece el token con afirmaciones específicas de identidad (como ID de cuenta, ID de organización y etiquetas principales) y contexto de sesión. Estas notificaciones proporcionan información sobre el entorno informático y la sesión donde se originó la solicitud del token. AWS STS incluye automáticamente estas reclamaciones cuando corresponda según el contexto de sesión del principal solicitante. También puede agregar reclamos personalizados al token pasando etiquetas de solicitud a la llamada API. Para obtener más información sobre las reclamaciones proporcionadas en el JWT, visite la página de documentación.

Tenga en cuenta el iss reclamación (emisor). Esta es la URL del emisor específica de su cuenta que los servicios externos utilizan para verificar que el token se originó en una cuenta de AWS confiable. Los servicios externos pueden verificar el JWT validando su firma utilizando las claves de verificación de AWS disponibles en un punto final público del conjunto de claves web JSON (JWKS) alojado en el /.well-known/jwks.json punto final de la URL del emisor.

Ahora, veamos cómo los servicios externos manejan este token de identidad.

A continuación se muestra un fragmento de un ejemplo de Python que los servicios externos pueden utilizar para verificar los tokens de AWS:


import json
import jwt
import requests
from jwt import PyJWKClient

# Trusted issuers list - obtained from EnableOutboundFederation API response
TRUSTED_ISSUERS = [
    "https://EXAMPLE.tokens.sts.global.api.aws",
    # Add your trusted AWS account issuer URLs here
    # Obtained from EnableOutboundFederation API response
]

def verify_aws_jwt(token, expected_audience=None):
    """Verify an AWS IAM outbound identity federation JWT"""
    try:
        # Get issuer from token
        unverified_payload = jwt.decode(token, options={"verify_signature": False})
        issuer = unverified_payload.get('iss')

 	# Verify issuer is trusted
        if not TRUSTED_ISSUERS or issuer not in TRUSTED_ISSUERS:
            raise ValueError(f"Untrusted issuer: {issuer}")

        # Fetch JWKS from AWS using PyJWKClient
        jwks_client = PyJWKClient(f"{issuer}/.well-known/jwks.json")
        signing_key = jwks_client.get_signing_key_from_jwt(token)

        # Verify token signature and claims
        decoded_token = jwt.decode(
            token,
            signing_key.key,
            algorithms=["ES384", "RS256"],
            audience=expected_audience,
            issuer=issuer
        )
        return decoded_token
    except Exception as e:
        print(f"Token verification failed: {e}")
        return None

Uso de políticas de IAM para controlar el acceso a la generación de tokens
Una entidad principal de IAM (como una función o un usuario) debe tener la sts:GetWebIdentityToken permiso en sus políticas de IAM para solicitar tokens para autenticación con servicios externos. Los administradores de cuentas de AWS pueden configurar este permiso en todos los tipos de políticas de AWS relevantes, como políticas de identidad, políticas de control de servicios (SCP), políticas de control de recursos (RCP) y políticas de puntos finales de nube privada virtual (VPCE) para controlar qué entidades principales de IAM en su cuenta pueden generar tokens.

Además, los administradores pueden utilizar las nuevas claves de condición para especificar algoritmos de firma (sts:SigningAlgorithm), audiencias simbólicas permitidas (sts:IdentityTokenAudience) y la vida útil máxima de los tokens (sts:DurationSeconds). Para obtener más información sobre las claves de condición, visite la página de documentación de las claves de condición de IAM y STS.

Cosas adicionales que debes saber
Aquí hay detalles clave sobre este lanzamiento:

Comience con la federación de identidades salientes de AWS IAM visitando la consola de AWS IAM y habilitando la función en su cuenta de AWS. Para obtener más información, visite la página de documentación sobre Federación de identidades de AWS con servicios externos.

¡Feliz edificio!
donnie

Fuente

Estos atajos ocultos de la tecla Opción te convertirán en un experto en Mac

The Shredder ha noqueado a más de 2 millones de jugadores de Arc Raiders, y no nos referimos al villano de TMNT

The Shredder ha noqueado a más de 2 millones de jugadores de Arc Raiders, y no nos referimos al villano de TMNT