Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Aprovisionamiento de roles de IAM con privilegio mínimo mediante la implementación de una solución de máquina expendedora de roles
Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi y Chad Moon, Amazon Web Services
Resumen
Los permisos excesivos en los roles de AWS Identity and Access Management (IAM) para las canalizaciones pueden suponer un riesgo innecesario para la organización. A veces, los desarrolladores conceden permisos amplios durante el desarrollo, pero se olvidan de limitarlos después de solucionar problemas con el código. Esto provoca un problema, pues puede que haya roles importantes sin necesidad empresarial y que posiblemente no haya revisado un ingeniero de seguridad.
Este patrón ofrece una solución a este problema: la máquina expendedora de roles (RVM). Mediante un modelo de implementación seguro y centralizado, el RVM demuestra cómo aprovisionar las funciones de IAM con menos privilegios para las canalizaciones de los repositorios individuales con un esfuerzo mínimo por parte de los desarrolladores. GitHub Como la RVM es una solución central, puede configurar sus equipos de seguridad como revisores necesarios para aprobar los cambios. Este enfoque permite al personal de seguridad rechazar las solicitudes de roles de canalizaciones con un exceso de permisos.
La RVM obtiene el código de Terraform como entrada y genera roles de IAM listos para su uso como salida. Las entradas obligatorias son el Cuenta de AWS ID, el nombre del repositorio y la política de permisos. GitHub La RVM usa estas entradas para crear la política de confianza y la política de permisos del rol. La política de confianza resultante permite que el GitHub repositorio especificado asuma la función y la utilice para las operaciones de canalización.
La RVM usa un rol de IAM (configurado durante el arranque). Este rol tiene permisos para asumir un rol role-provisioning-role en cada cuenta de la organización. El rol se configura mediante AWS Control Tower Account Factory for Terraform (AFT) o AWS CloudFormation StackSets. Estas role-provisioning-roles son las funciones que realmente crean las funciones de canalización para los desarrolladores.
Requisitos previos y limitaciones
Requisitos previos
Un activo Cuenta de AWS.
Una GitHub organización que se utiliza para implementar la infraestructura como código (IaC) mediante GitHub acciones. (no GitHub Enterprise/Premium/Ultimate son obligatorios).
Un AWS entorno con varias cuentas. No es necesario que este entorno forme parte de AWS Organizations.
Un mecanismo para implementar una función de IAM en todos Cuentas de AWS (por ejemplo, AFT o CloudFormation StackSets).
La versión 1.3 o posterior de Terraform instalada y configurada
. Instalación
y configuración de Terraform AWS Provider, versión 4 o posterior.
Limitaciones
El código de este patrón es específico de GitHub Actions y Terraform. Sin embargo, los conceptos generales del patrón se pueden reutilizar en otros marcos de integración y entrega continuas (CI/CD).
Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region
. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.
Arquitectura
En el siguiente diagrama, se ilustra el flujo de trabajo de este patrón.

El flujo de trabajo para el uso típico de la máquina expendedora de roles consta de los siguientes pasos:
Un desarrollador envía el código que contiene el código de Terraform para un rol de IAM recién solicitado al repositorio de RVM. GitHub Esta acción activa la canalización de acciones de RVM. GitHub
La canalización utiliza una política de confianza de OpenID Connect (OIDC) para asumir el rol de la RVM.
Conforme se pone en marcha la canalización de la RVM, esta asume el rol de flujo de trabajo de la RVM en la cuenta en la que se aprovisiona el nuevo rol de IAM del desarrollador. (La función de flujo de trabajo de RVM se aprovisionó mediante AFT o.) CloudFormation StackSets
La RVM crea el rol de IAM del desarrollador con la confianza y los permisos adecuados, de modo que otras canalizaciones de la aplicación puedan asumir el rol.
Los desarrolladores de la aplicación pueden configurar las canalizaciones de la aplicación para que asuman este rol aprovisionado por RVM.
El rol creado incluye los permisos solicitados por el desarrollador y una política ReadOnlyAccess. El rol solo lo pueden asumir las canalizaciones que se ponen en marcha en la rama main del repositorio especificado por el desarrollador. Este enfoque permite garantizar que sea necesaria la protección y las revisiones de las ramas para poder utilizar el rol.
Automatización y escala
Los permisos con privilegio mínimo requieren prestar atención a los detalles de cada rol que se aprovisione. Este modelo reduce la complejidad necesaria para crear estos roles, lo que permite a los desarrolladores crear los roles que necesitan sin mucho aprendizaje o esfuerzo adicionales.
Tools (Herramientas)
Servicios de AWS
AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
AWS Organizationses un servicio de administración de cuentas que le ayuda a consolidar múltiples cuentas Cuentas de AWS en una organización que usted crea y administra de forma centralizada.
Otras herramientas
Git
es un sistema de control de versiones distribuido y de código abierto. Incluye la posibilidad de crear una cuenta de organización . GitHub Actions
es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con GitHub los repositorios. Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación. Terraform
es una herramienta de infraestructura como código (IaC) HashiCorp que te ayuda a crear y administrar recursos locales y en la nube.
Repositorio de código
El código de este patrón está disponible en el repositorio. GitHub role-vending-machine
Prácticas recomendadas
Haga que lo correcto sea fácil y que lo incorrecto sea difícil: procure que hacer lo correcto sea sencillo. Si los desarrolladores tienen dificultades con el proceso de aprovisionamiento de la RVM, podrían intentar crear roles por otros medios, lo que socavaría la naturaleza central de la RVM. Asegúrese de que su equipo de seguridad proporcione una guía clara sobre cómo utilizar la RVM de forma segura y eficaz.
También debería impedir que los desarrolladores hagan cosas incorrectas. Usa las políticas de control de servicios (SCPs) o los límites de permisos para restringir qué roles pueden crear otros roles. Este enfoque puede ser útil para que solo la RVM y otros orígenes fiables puedan crear roles.
Brinde buenos ejemplos: es inevitable que algunos desarrolladores usen los roles existentes en el repositorio de la RVM como plantillas informales para conceder permisos a sus nuevos roles. Si tiene ejemplos de privilegio mínimo para los desarrolladores, puede reducir el riesgo de que soliciten permisos amplios y con muchos caracteres comodín. Si empieza con roles con muchos permisos y muchos comodines, el problema puede multiplicarse con el paso del tiempo.
Use condiciones y convenciones de nomenclatura: aunque un desarrollador no conozca todos los nombres de los recursos que va a crear su aplicación, debería limitar los permisos de los roles mediante una convención de nomenclatura. Por ejemplo, si el desarrollador está creando buckets de Amazon S3, el valor de la clave deñ recurso puede ser parecido a
arn:aws:s3:::myorg-myapp-dev-*para que el rol no tenga permisos más allá de los buckets que coincidan con ese nombre. Implementar una convención de nomenclatura mediante una política de IAM tiene la ventaja adicional de mejorar el cumplimiento de la convención de nomenclatura. Esta mejora se debe a que no se permitirá la creación de recursos que no coincidan con dicha convención.Exija revisiones mediante solicitudes de extracción (PR): el valor de la solución de RVM es que crea una ubicación central donde se pueden revisar los nuevos roles de canalización. Sin embargo, este diseño solo es útil si hay barreras de protección que permitan garantizar que la RVM reciba código seguro y de alta calidad. Proteja las ramas que se utilizan para implementar código (por ejemplo,
main) de las inserciones directas y solicite la aprobación de cualquier solicitud para fusionarlas.Configure los roles de solo lectura: de forma predeterminada, la RVM aprovisiona una versión
readonlyde cada rol solicitado. Esta función se puede usar en CI/CD canalizaciones que no escriben datos, como un flujo de trabajo deterraform plancanalización. Este enfoque ayuda a evitar cambios no deseados si un flujo de trabajo de solo lectura no funciona correctamente.De forma predeterminada, la
ReadOnlyAccesspolítica AWS administrada está asociada tanto a las funciones de solo lectura como a las funciones de lectura y escritura. Esta política reduce la necesidad de iteración a la hora de determinar los permisos necesarios, pero puede resultar demasiado permisiva para algunas organizaciones. Si lo desea, puede eliminar la política del código de Terraform.Otorgue permisos mínimos: siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte Otorgar privilegio mínimo y Prácticas recomendadas de seguridad en la documentación de IAM.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Copie el repositorio de muestras en su organización. GitHub | Clona
| DevOps ingeniero |
Determine el Cuenta de AWS para el RVM. | Determine qué implementación de infraestructura usar Cuenta de AWS para la RVM. No utilice la cuenta de administración ni la cuenta raíz. | Arquitecto de la nube |
(Opcional) Permita que se creen las canalizaciones de la organización. PRs | notaEste paso solo es necesario si quieres permitir la creación PRs del Para permitir la creación de las canalizaciones de tu organización PRs, sigue estos pasos:
Para obtener más información, consulte Administrar la configuración de GitHub las acciones de un repositorio | DevOps ingeniero |
Otorgue permisos de solo lectura a la cuenta de la RVM. | Cree una política de delegación en su cuenta de administración que conceda permisos de solo lectura a la cuenta de la RVM. Esto permite que los GitHub flujos de trabajo de RVM obtengan dinámicamente una lista de las cuentas de su AWS organización cuando se ejecute el Utilice el siguiente código y
| Administrador de la nube |
Actualice los valores predeterminados del repositorio de ejemplo. | Para configurar el RVM para que funcione en su entorno específico Región de AWS, haga lo siguiente:
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Inicie el repositorio de la RVM. | Este paso es necesario para crear los roles de IAM y la política de confianza de OIDC que utiliza la propia canalización de la RVM, de modo que pueda empezar a operar y ofrecer otros roles. En la cuenta de la RVM, ponga en marcha manualmente un comando | DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Implemente los roles | Elija un método de implementación que se adapte a las prácticas de su organización, como AFT o StackSets. Utilice ese método para implementar las dos roles de IAM del archivo Estos roles de IAM tienen políticas de confianza que permiten que el rol de asunción de roles de la cuenta de la RVM (o su | Administrador de AWS |
Ponga en marcha el flujo de trabajo | Para configurar su RVM de forma que esté lista para crear roles de canalización, haga lo siguiente:
Una vez finalizado el flujo de trabajo, la RVM está listo para hacer lo siguiente:
| DevOps ingeniero |
Resolución de problemas
| Problema | Solución |
|---|---|
He creado un rol mediante el RVM, pero GitHub no puedo asumirlo. | Compruebe que el nombre del GitHub repositorio coincide con el nombre proporcionado al Del mismo modo, compruebe que la rama utilizada en la GitHub canalización coincida con el nombre de la rama proporcionada al |
Mi rol de solo lectura no puede poner en marcha su canalización porque carece de permisos para leer un recurso específico. | Si bien la Puede agregar permisos de acciones específicas mediante el parámetro |
Recursos relacionados
Información adicional
Uso de GitHub entornos
GitHub Los entornos son un enfoque alternativo a las restricciones basadas en las sucursales para el acceso a los roles. Si prefiere utilizar un GitHub entorno, a continuación se muestra un ejemplo de la sintaxis de una condición adicional de la política de confianza de IAM. Esta sintaxis especifica que el rol solo se puede usar cuando la GitHub acción se ejecuta en el Production entorno.
"StringLike": { "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production" }
La sintaxis de ejemplo usa los siguientes valores de marcador de posición:
octo-orges el nombre GitHub de la organización.octo-repoes el nombre del repositorio.Productiones el nombre del GitHub entorno específico.