Autorizar el acceso a servicios con IAM

Implementación de aplicaciones en AWS

Dunieski Otano

Amazon Web Services Solutions Architect

La clave en el commit

  • Se sube a un repo una clave de acceso de larga duración
  • Un bot escáner la detecta y dispara la factura
  • Los roles y el mínimo privilegio evitan esto

Una clave de acceso de AWS filtrada por error en un commit, marcada como riesgo de seguridad

Implementación de aplicaciones en AWS

Principales de IAM: usuarios, roles y policies

Diagrama de tres columnas de IAM: Principal (usuario, servicio o rol) a la izquierda, documento de Policy con acciones Allow/Deny en el centro, IAM Role con credenciales temporales de corta duración a la derecha

  • Principal: quién hace la solicitud
  • Policy: documento JSON que otorga permisos
  • Role: conjunto de permisos que una entidad puede asumir
  • Los roles se asumen; los usuarios tienen credenciales duraderas
Implementación de aplicaciones en AWS

Credenciales programáticas bien hechas

  • Lambda: un execution role concede permisos
  • EC2: un instance profile entrega credenciales del rol
  • ECS: task roles acotan permisos por tarea
  • Nada de claves de acceso duraderas en código ni config

Tres servicios de cómputo de AWS usando roles sin claves duraderas: Lambda con execution role, EC2 con instance profile y ECS con task role, cada uno con rotación automática de credenciales

Implementación de aplicaciones en AWS

AssumeRole y STS

  • STS AssumeRole: obtiene credenciales temporales para un rol
  • Se usa para acceso entre cuentas
  • La trust policy controla quién puede asumir el rol
  • Las credenciales son de corta duración y expiran solas

Flujo cross-account de STS AssumeRole: el solicitante en la Cuenta A pide credenciales a STS, la trust policy del rol en la Cuenta B lo permite, STS devuelve credenciales de corta duración que expiran automáticamente

Implementación de aplicaciones en AWS

Mínimo privilegio y estructura de policies

Una policy statement tiene tres partes obligatorias (Effect, Action y Resource) y una Condition opcional:

{
  "Effect": "Allow",
  "Action": "dynamodb:PutItem",
  "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
  "Condition": {
    "Bool": { "aws:SecureTransport": "true" }
  }
}
Implementación de aplicaciones en AWS

Dónde acaba IAM y empieza tu código


IAM: la capa de servicio

  • Autoriza AWS API calls: ¿puede este rol llamar a esta operación?
  • No puede aplicar reglas por inquilino ni por registro

Tu código: la capa de datos

  • Comprueba el usuario autenticado frente a los datos solicitados
  • Usa ambos: IAM protege el servicio; tu código, los datos
Implementación de aplicaciones en AWS

Un execution role de mínimo privilegio en la práctica

Execution role mínimo de Lambda: único permiso DynamoDB PutItem concedido solo en un ARN de tabla, sin comodines en acción ni recurso

  • Una Lambda necesita escribir en una tabla de DynamoDB
  • Concede dynamodb:PutItem solo en el ARN de esa tabla
  • Sin comodines en acción ni recurso
  • Añade más solo si una llamada real es denegada
Implementación de aplicaciones en AWS

¡Vamos a practicar!

Implementación de aplicaciones en AWS

Preparing Video For Download...