¿Tienes servidores, contenedores o pipelines fuera de AWS que necesitan acceder a servicios como S3 o DynamoDB? La respuesta tradicional eran las access keys de larga duración: cómodas, pero un riesgo enorme si se filtran. IAM Roles Anywhere te permite usar certificados X.509 para obtener credenciales temporales de AWS, eliminando los secretos permanentes.
El problema de las access keys
Una carga de trabajo on-premise necesita permisos de AWS. Lo fácil es crear un usuario IAM con AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY y ponerlas en el servidor. El problema: esas claves no expiran, suelen terminar en archivos de config o variables de entorno, y si se filtran dan acceso persistente hasta que alguien las revoque manualmente.
🚫 Las claves de larga duración son deuda de seguridad
Qué es IAM Roles Anywhere
Es una capacidad de AWS IAM que extiende los roles a cargas de trabajo que viven fuera de AWS. En lugar de autenticar con una clave, la carga presenta un certificado X.509 emitido por una CA en la que tú confías. AWS valida ese certificado y, a cambio, entrega credenciales temporales de STS.
Las tres piezas clave
- Trust Anchor: referencia a tu autoridad certificadora (CA), propia o gestionada con AWS Private CA. Define en qué certificados confía AWS.
- Profile: define qué roles IAM se pueden asumir y qué permisos de sesión se aplican.
- IAM Role: el rol con la política de permisos real, con una trust policy que permite al servicio
rolesanywhere.amazonaws.comasumirlo.
Cómo se obtienen las credenciales
En la carga de trabajo instalas el aws_signing_helper (credential helper). Cada vez que el SDK necesita credenciales, el helper firma una petición con la clave privada del certificado y la envía a Roles Anywhere.
Configuración típica
El credential helper se integra con el perfil de AWS CLI/SDK así:
# ~/.aws/config [profile onprem] credential_process = /usr/local/bin/aws_signing_helper credential-process \ --certificate /etc/pki/workload.crt \ --private-key /etc/pki/workload.key \ --trust-anchor-arn arn:aws:rolesanywhere:us-east-1:111122223333:trust-anchor/xxxx \ --profile-arn arn:aws:rolesanywhere:us-east-1:111122223333:profile/yyyy \ --role-arn arn:aws:iam::111122223333:role/OnPremWorkloadRole
La trust policy del rol autoriza al servicio y puede exigir atributos del certificado:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "rolesanywhere.amazonaws.com" },
"Action": [
"sts:AssumeRole",
"sts:TagSession",
"sts:SetSourceIdentity"
],
"Condition": {
"StringEquals": {
"aws:PrincipalTag/x509Subject/CN": "workload.example.com"
}
}
}]
}Buenas prácticas
- Emite certificados de vida corta y automatiza su renovación.
- Usa condiciones sobre atributos del certificado (CN, OU) para acotar qué carga asume qué rol.
- Aplica el principio de menor privilegio en la política del rol.
- Habilita
CloudTrailpara auditar cadaCreateSession. - Revoca certificados comprometidos vía CRL en el Trust Anchor.
✅ Cuándo usarlo
En resumen
IAM Roles Anywhere lleva el modelo de roles temporales a cualquier carga con un certificado X.509 válido, eliminando las access keys permanentes. Trust Anchor, Profile y Role son las tres piezas; el credential helper hace el trabajo pesado de firmar y renovar. Menos secretos, menos superficie de ataque.