La gestión de credenciales y permisos de usuario es un aspecto clave en la seguridad de cualquier sistema. En este artículo explicamos cómo eliminar el uso de credenciales a largo plazo en una plataforma de CI/CD, concretamente GitHub Actions, al autenticarse con Amazon Web Services (AWS) mediante el protocolo OpenID Connect (OIDC).
OpenID Connect (OIDC) es un protocolo de autenticación moderno, basado en el protocolo de autorización OAuth 2.0, que permite verificar la identidad de los usuarios y proporcionar esa información de forma segura y estandarizada con las aplicaciones.
Este protocolo OIDC delega la autenticación en un Proveedor de Identidad (IdP) dedicado. En nuestro caso, GitHub actúa como IdP para AWS, lo que permite ejecutar operaciones de CI/CD, IaC, GitOps u otras automatizaciones desde GitHub Actions sin necesidad de proporcionar credenciales de usuario (nombres de usuario y contraseñas). GitHub garantiza la identidad del origen de los cambios.
Al ejecutar un job, el proveedor OIDC de GitHub proporciona un token JWT, que se presenta al proveedor de nube (AWS). Este token contiene información clave sobre la ejecución, como el nombre del repositorio, la rama, el workflow utilizado, e incluso el usuario que ha lanzado la ejecución. A partir de estos datos, con la configuración adecuada en AWS, es posible autorizar estas ejecuciones para que asuman un rol con permisos específicos.
Antes de realizar cualquier cambio en materia de seguridad, conviene entender el valor que aporta. Estas son las principales ventajas de usar OIDC:
Aunque el objetivo de este artículo no es proporcionar una guía detallada, estos son los pasos básicos para implementar OIDC con GitHub Actions y AWS:
Recomendamos gestionar esta configuración mediante Infraestructura como Código (IaC) (por ejemplo, con Terraform), para garantizar trazabilidad, reproducibilidad y escalabilidad para añadir más roles de forma sencilla (por ejemplo, mediante módulos).
Para mayor detalle, seguir los enlaces en los pasos anteriores o ver Referencias.
OpenID Connect es un estándar ampliamente adoptado que no se limita al uso de GitHub o AWS. Puede utilizarse para autenticarnos con otros proveedores de nube (como Microsoft Azure o Google Cloud Platform), o para aplicaciones SaaS que lo soporten (como MuleSoft, Salesforce o Confluent). Además de GitHub, también se puede usar con otros IdPs como GitLab, HCP Terraform o Pulumi..
Otro caso de uso muy habitual que quizá ya estés aplicando es Kubernetes. Por un lado, Amazon EKS admite la utilización de proveedores de identidad OpenID Connect (OIDC) como método para autenticar usuarios en su clúster. Por otro lado, las cargas de trabajo que interactúan con recursos de la cuenta AWS, normalmente lo hacen a través de IAM roles for service accounts (IRSA), donde son las cargas de trabajo las que utilizan OIDC para autenticarse en la cuenta.
Si estás utilizando credenciales persistentes para conectar servicios en la nube, vale la pena investigar si estos soportan OIDC. En ese caso, podrías adoptar una solución similar a la descrita en este artículo.