Roles, credenciales temporales y SigV4

Uso de la seguridad de AWS para desarrolladores

Rahul Singh

Technical Product Manager

La clave que sobrevive a la tarea

Para acelerar el trabajo, se crea una clave en un script y se guarda en un archivo de configuración.

Dentro del archivo está:

  • Nunca se rota
  • Nunca se revoca
  • Nunca caduca

Una clave de acceso que se replica a seis ubicaciones de almacenamiento, con un eje temporal a la derecha que muestra que sigue válida en el mes dieciocho

Uso de la seguridad de AWS para desarrolladores

La clave que sobrevive a la tarea

Para acelerar el trabajo, se crea una clave en un script y se guarda en un archivo de configuración.

Dentro del archivo está:

  • Nunca se rota
  • Nunca se revoca
  • Nunca caduca

 

18 meses después, sigue siendo válida

Una clave de acceso que se replica a seis ubicaciones de almacenamiento, con un eje temporal a la derecha que muestra que sigue válida en el mes dieciocho

Uso de la seguridad de AWS para desarrolladores

Credenciales que caducan solas

Haz que caducar sea el valor por defecto con AWS STS

  1. Solicita un rol y recibe credenciales con reloj incorporado

  2. Security Token Service (STS): caducidad incluida, una hora por defecto

Una aplicación llama a AssumeRole en AWS STS, y STS devuelve credenciales con un reloj incorporado.

Uso de la seguridad de AWS para desarrolladores

Credenciales que caducan solas

Haz que caducar sea el valor por defecto con AWS STS

  1. Solicita un rol y recibe credenciales con reloj incorporado

  2. Las credenciales temporales empiezan por ASIA y llevan un token de sesión

  3. Security Token Service (STS): caducidad incluida, una hora por defecto

Una aplicación llama a AssumeRole en AWS STS y recibe credenciales con un reloj incorporado. Debajo, dos credenciales lado a lado: una clave de larga duración que empieza por AKIA, sin token de sesión y que nunca caduca, y credenciales temporales que empiezan por ASIA, con token de sesión y que caducan en una hora.

Uso de la seguridad de AWS para desarrolladores

Credenciales que caducan solas

Haz que caducar sea el valor por defecto con AWS STS

  1. Solicita un rol y recibe credenciales con reloj incorporado

  2. Las credenciales temporales empiezan por ASIA y llevan un token de sesión

  3. La misma llamada se acepta y luego deja de aceptarse

  4. Security Token Service (STS): caducidad incluida, una hora por defecto

Una aplicación llama a AssumeRole en AWS STS y recibe credenciales con un reloj incorporado. Debajo, una clave de larga duración que empieza por AKIA y nunca caduca junto a credenciales temporales que empiezan por ASIA, con token de sesión y que caducan en una hora. Más abajo, la misma llamada GetObject devolviendo 200 OK a las diez y ExpiredToken a las once y cinco.

Uso de la seguridad de AWS para desarrolladores

Cómo las encuentra tu código

Comprobando la cadena de proveedores de credenciales

  • El AWS SDK, la biblioteca en tu código, hace la búsqueda
  • Lista fija, comprobada en orden
  • Se detiene en la primera coincidencia

Orden de búsqueda de credenciales: una clave pasada en el código aparece tachada por encima de la cadena, y la búsqueda baja por variables de entorno, archivo de configuración y credenciales de contenedor, deteniéndose en la primera coincidencia y sin llegar nunca a los metadatos de instancia

Uso de la seguridad de AWS para desarrolladores

Cómo las encuentra tu código

Comprobando la cadena de proveedores de credenciales

  • El AWS SDK, la biblioteca en tu código, hace la búsqueda
  • Lista fija, comprobada en orden
  • Se detiene en la primera coincidencia

 

Las claves hard-coded se comprueban primero, así que hay que borrarlas

Orden de búsqueda de credenciales: una clave pasada en el código aparece tachada por encima de la cadena, y la búsqueda baja por variables de entorno, archivo de configuración y credenciales de contenedor, deteniéndose en la primera coincidencia y sin llegar nunca a los metadatos de instancia

Uso de la seguridad de AWS para desarrolladores

La cadena, eslabón a eslabón

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • La primera coincidencia gana
  • Borra la clave almacenada y la búsqueda continuará hasta el rol
Uso de la seguridad de AWS para desarrolladores

Probar identidad desde fuera de AWS

Las canalizaciones de código suelen ejecutarse fuera de AWS, así que no se puede adjuntar la cadena de credenciales

  • Se ejecuta en GitHub o GitLab
  • La cadena no encuentra nada

Un runner de CI y su plataforma dibujados fuera del perímetro de AWS, el runner marcado como sin rol para adjuntar, y la plataforma firmando un token OIDC que nombra un repositorio y un flujo de trabajo

Uso de la seguridad de AWS para desarrolladores

Probar identidad desde fuera de AWS

Las canalizaciones de código suelen ejecutarse fuera de AWS, así que no se puede adjuntar la cadena de credenciales

  • Se ejecuta en GitHub o GitLab
  • La cadena no encuentra nada

 

Token OIDC (OpenID Connect)

  • Firmado y de corta duración
  • Una declaración de identidad, no una credencial

Un runner de CI y su plataforma dibujados fuera del perímetro de AWS, el runner marcado como sin rol para adjuntar, y la plataforma firmando un token OIDC que nombra un repositorio y un flujo de trabajo

Uso de la seguridad de AWS para desarrolladores

Una regla en lugar de una clave guardada

Un token OIDC que nombra un repositorio, canjeado mediante AssumeRoleWithWebIdentity por credenciales temporales que caducan en una hora, porque la política de confianza del rol ya nombra a ese emisor y a ese repositorio

Cambiar el token por credenciales

Uso de la seguridad de AWS para desarrolladores

Una regla en lugar de una clave guardada

Un token OIDC que nombra un repositorio, canjeado mediante AssumeRoleWithWebIdentity por credenciales temporales que caducan en una hora, porque la política de confianza del rol ya nombra a ese emisor y a ese repositorio

Cambiar el token por credenciales

  • AssumeRoleWithWebIdentity: AssumeRole, con un token externo como prueba
  • Política de confianza: escrita en el rol de antemano, no guardada en la canalización
  • Claim: un dato dentro del token
  • El emisor es común a todos los repos del servicio, así que fija también el repositorio

Secretos del repositorio: ahora vacíos

Uso de la seguridad de AWS para desarrolladores

Cada solicitud va firmada

Signature Version 4, o SigV4

  • Demuestra qué credencial hizo la solicitud
  • Demuestra que no se alteró en tránsito
  • La CLI y el SDK la firman en cada llamada

Flujo de firma en el que una solicitud y tus credenciales producen una firma enviada en el encabezado Authorization; AWS la recalcula y compara, acepta si coincide y devuelve SignatureDoesNotMatch si no coincide

Uso de la seguridad de AWS para desarrolladores

Una firma que puedes ceder

Credenciales temporales

  • Muchas acciones, acotadas por el rol
  • Las mantiene tu código

Tu código llamando a cuatro servicios de AWS (S3, DynamoDB, SQS y KMS) con credenciales temporales

Uso de la seguridad de AWS para desarrolladores

Una firma que puedes ceder

Credenciales temporales

  • Muchas acciones, acotadas por el rol
  • Las mantiene tu código

URL prefirmada

  • Un objeto, una acción y cualquiera con el enlace
  • Caducidad a tu elección; después, nada
  • Lleva tus permisos, no los de quien la usa

Tu código llamando a cuatro servicios de AWS (S3, DynamoDB, SQS y KMS) con credenciales temporales

El navegador de otra persona accediendo exactamente a un objeto por una única ruta, interrumpida por un reloj con la caducidad que estableces

Uso de la seguridad de AWS para desarrolladores

¡Vamos a practicar!

Uso de la seguridad de AWS para desarrolladores

Preparing Video For Download...