Administre los conjuntos de AWS permisos de forma dinámica mediante Terraform - Recomendaciones de AWS

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.

Administre los conjuntos de AWS permisos de forma dinámica mediante Terraform

Vinicius Elias y Marcos Vinicius Pinto Jordao, Amazon Web Services

Resumen

AWS IAM Identity Center mejora AWS Identity and Access Management (IAM) al proporcionar un centro centralizado para gestionar el acceso mediante el inicio de sesión único a las aplicaciones en la nube y las aplicaciones en la nube. Cuentas de AWS Sin embargo, la gestión manual de los conjuntos de permisos del IAM Identity Center puede resultar cada vez más compleja y propensa a errores a medida que su organización crece. Esta complejidad puede provocar posibles brechas de seguridad y sobrecargas administrativas.

Esta solución le permite administrar los conjuntos de permisos mediante la infraestructura como código (IaC) mediante un proceso de integración y entrega continuas (CI/CD) creado con tecnología nativa. Servicios de AWS Permite una integración perfecta del mecanismo de asignación de conjuntos de permisos con los eventos AWS Control Tower del ciclo de vida o con un entorno de Account Factory for Terraform (AFT). Este enfoque proporciona configuraciones de identidad dinámicas tanto para las nuevas como para las existentes Cuentas de AWS.

EventBridge Las reglas de Amazon supervisan Cuenta de AWS la creación y las actualizaciones, lo que ayuda a que las configuraciones de identidad permanezcan sincronizadas con la estructura de la organización. Tras crear o actualizar las cuentas en AWS Control Tower o en AFT, se activa la canalización. Evalúa un conjunto de archivos JSON con definiciones de conjuntos de permisos y reglas de asignación. Luego, la canalización aplica y sincroniza la configuración en todas las cuentas.

Este enfoque ofrece las siguientes ventajas:

  • Coherencia: elimina las desviaciones de configuración manual en toda AWS la organización

  • Auditabilidad: mantiene un historial completo de todos los cambios en la administración de identidades

  • Escalabilidad: aplica automáticamente las configuraciones a medida que el entorno crece AWS

  • Seguridad: reduce los errores humanos en la asignación de permisos

  • Cumplimiento: facilita el cumplimiento de los requisitos reglamentarios mediante cambios documentados y reglas de asignación

Requisitos previos y limitaciones

  • Un entorno de múltiples cuentas con AWS Control Tower y AWS Organizations configuración. Opcionalmente, puede usar AFT con AWS Control Tower.

  • Un administrador delegado del IAM Identity Center Cuenta de AWS para recibir la solución. Para obtener más información, consulte Administración delegada en la documentación del Centro de identidades de IAM.

  • Un repositorio del sistema de control de versiones (VCS) para gestionar el código principal. Para ver un ejemplo, consulte el GitHub repositorio de la solución.

  • AWS Recursos necesarios para la administración del backend de Terraform, como un bucket de Amazon Simple Storage Service (Amazon S3) y una tabla de Amazon DynamoDB.

Limitaciones

  • La canalización utiliza recursos AWS nativos y Terraform de código abierto. La canalización no está preparada para realizar llamadas a ecosistemas de terceros.

  • Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para ver la disponibilidad regional, consulta AWS Servicios por región. Para conocer puntos de enlace específicos, consulte Puntos de enlace y cuotas del servicio y elija el enlace para el servicio.

Arquitectura

El siguiente diagrama muestra los componentes y el flujo de trabajo de este patrón.

Componentes y flujo de trabajo para administrar los conjuntos de permisos de AWS mediante Terraform.

AWS Control Tower flujo de eventos

La solución comienza con la integración de los eventos que provienen de AFT AWS Control Tower o de AFT. La elección entre uno u otro servicio se realiza en el momento de la implementación mediante una definición de variables. Independientemente del método utilizado, la canalización se activa cada vez que se crea o actualiza una cuenta. La canalización reconcilia las políticas almacenadas en el repositorio de administración de conjuntos de permisos.

Los siguientes son los eventos del AWS Control Tower ciclo de vida:

  • CreateManagedAccount— Cuando se crea una nueva cuenta

  • UpdateManagedAccount— Cuando se actualiza una cuenta existente

Enrutamiento de eventos

EventBridge sirve como servicio central de procesamiento de eventos, capturando los eventos generados en la AWS Control Tower cuenta. Cuando se producen eventos, los dirige de EventBridge forma inteligente a un bus de eventos centralizado en la cuenta de la solución. AWS Control Tower los eventos del ciclo de vida siguen patrones de enrutamiento distintos. Si se define AFT como la fuente del evento, la cuenta de administración de AFT gestiona los eventos en lugar de la AWS Control Tower cuenta. Esta arquitectura basada en eventos permite respuestas automatizadas a los cambios organizativos sin intervención manual.

Proceso de integración de AFT

Cuando los eventos AWS Control Tower del ciclo de vida llegan a la cuenta de administración de la AFT, activan automáticamente múltiples procesos posteriores que son intrínsecos a la AFT. Una vez finalizado el flujo de trabajo de personalización de la cuenta AFT, publica un mensaje en el tema dedicado al aft-notifications Amazon Simple Notification Service (Amazon SNS). Ese tema activa la aft-new-account-forward-event AWS Lambda función que implementa esta solución. La función Lambda envía el evento al bus de eventos de la cuenta de la solución, donde se utiliza para iniciar la canalización.

La infraestructura como canalización de código

La cartera de soluciones funciona como un mecanismo de despliegue totalmente automatizado. El AWS CodePipeline servicio monitorea continuamente el repositorio para detectar cambios. Al detectar nuevas confirmaciones, inicia automáticamente el flujo de trabajo de despliegue e inicia un proceso secuencial que incluye las fases de validación y ejecución. El sistema ejecuta plan las operaciones de Terraform para identificar los cambios propuestos, seguidas de los apply comandos de Terraform para implementar esos cambios en el entorno. AWS En particular, el oleoducto funciona sin ninguna compuerta de aprobación manual. Este enfoque permite implementar rápidamente los cambios en la infraestructura y, al mismo tiempo, mantener la auditabilidad mediante los registros de canalización y los archivos de estado de Terraform.

La canalización se aprovecha AWS CodeBuild para ejecutar las operaciones de Terraform en un entorno controlado con los permisos adecuados. Mediante este enfoque de IaC, la canalización puede realizar operaciones integrales de administración de permisos, que incluyen:

  • Cree nuevos conjuntos de permisos.

  • Actualice los conjuntos de permisos existentes.

  • Elimine los conjuntos de permisos innecesarios.

  • Gestione la asignación de estos permisos entre las cuentas y los grupos de las AWS organizaciones.

Para mantener la coherencia de la infraestructura y evitar cambios conflictivos, la solución implementa el sistema de administración de estados del backend Terraform mediante un bucket de Amazon S3 y una tabla dedicada de Amazon DynamoDB. Este enfoque proporciona una ubicación de almacenamiento persistente para los archivos de estado de Terraform y mecanismos de bloqueo de estado para evitar modificaciones simultáneas en los mismos recursos.

El código principal de Terraform usa el módulo oficial AWS permission-sets de Terraform. Este módulo puede gestionar dinámicamente los conjuntos de permisos en el Centro de Identidad de IAM, basándose en plantillas de conjuntos de permisos.

Gestión del control de fuentes

Las plantillas de conjuntos de permisos (archivos JSON) residen en un sistema de control de versiones externo, por ejemplo GitHub, que proporciona un repositorio centralizado para las configuraciones de administración de identidades. Este enfoque establece una fuente única de información fiable para las definiciones de conjuntos de permisos y, al mismo tiempo, permite el desarrollo colaborativo mediante prácticas estándar de revisión del código. Los usuarios autorizados pueden realizar cambios en estas plantillas siguiendo los procesos de gestión de cambios organizativos. Estas confirmaciones son el principal desencadenante del proceso de implementación automatizada, que inicia el proceso de actualización de la infraestructura.

Para ver un ejemplo de cómo configurar los conjuntos de permisos mediante el archivo JSON del repositorio, consulta Información adicional.

Herramientas

Servicios de AWS

  • AWS CodeBuildes un servicio de compilación totalmente gestionado que le ayuda a compilar el código fuente, ejecutar pruebas unitarias y producir artefactos listos para su despliegue.

  • AWS CodeConnectionspermite que AWS los recursos y servicios, por ejemplo CodePipeline, se conecten a repositorios de código externos, por ejemplo. GitHub

  • AWS CodePipelinele ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar los cambios de software de forma continua.

  • AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante los comandos de su consola de línea de comandos.

  • AWS Control Towerle ayuda a configurar y administrar un entorno de AWS múltiples cuentas, siguiendo las mejores prácticas prescriptivas.

  • Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

  • Amazon EventBridge es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas 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 IAM Identity Centerle ayuda a gestionar de forma centralizada el acceso mediante el inicio de sesión único (SSO) a todas sus aplicaciones y a las de la nube. Cuentas de AWS

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • 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 puede crear y administrar de forma centralizada.

  • Amazon Simple Notification Service (Amazon SNS) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico. Permite enviar notificaciones automáticas para los eventos de administración de cuentas, lo que garantiza que las partes relevantes estén informadas de los cambios o acciones importantes que se produzcan en el sistema.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Otras herramientas

  • Terraform es una herramienta de infraestructura como código (IaC) HashiCorp que le 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 la organización AWS Samples y en el repositorio GitHub -sets-pipeline. sample-terraform-aws-permission

Prácticas recomendadas

  • Fije siempre las versiones de los módulos y proveedores de Terraform que se utilizan para ejecutar el código en producción.

  • Usa una herramienta de análisis de código estático, como Checkov, para escanear tu código y resolver los problemas de seguridad.

  • Siga el principio de privilegios mínimos y conceda los permisos mínimos necesarios para realizar 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

TareaDescripciónHabilidades requeridas

Cree los recursos de backend de Terraform.

Si aún no ha creado sus AWS recursos de backend de Terraform, siga estos pasos para crear un bucket de Amazon S3 (s3-tf-backend-{ACCOUNT_ID}) y una tabla de DynamoDB (). ddb-tf-backend

  1. Inicie sesión en el Cuenta de AWS lugar donde implementará la solución y ábrala en la página de inicio. AWS CloudShell AWS Control Tower Región de AWS

  2. Ejecute los siguientes comandos y sustituya el marcador {ACCOUNT_ID} de posición por su Cuenta de AWS ID:

aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID} aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
Administrador de AWS

Cree un rol multicuenta.

Debe proporcionar una función de IAM multicuenta en la configuración del proveedor de event-source-account Terraform AWS . Si aún no ha creado este rol, siga los siguientes pasos para crearlo:

  1. Inicie sesión en la Cuenta de AWS que será la fuente de su evento (cuenta AWS Control Tower de administración o cuenta AFT) y ábrala AWS CloudShell.

  2. Ejecuta el siguiente comando y reemplaza el marcador {ACCOUNT_ID} de posición por el Cuenta de AWS ID que estás usando para esta solución, no por tu Cuenta de AWS ID actual:

aws iam create-role \ --role-name CrossAccountRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] }'
  1. Compruebe el resultado del comando y copie el rol Amazon Resource Name (ARN) (por ejemplo,arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Para adjuntar una política de IAM al rol, ejecute el siguiente comando:

aws iam attach-role-policy \ --role-name CrossAccountRole \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

En este ejemplo, se utiliza la política de IAM AWS gestionada. AdministratorAccess Si lo prefiere, puede utilizar una política más específica.

Administrador de AWS
TareaDescripciónHabilidades requeridas

Cree un repositorio dedicado.

En esta tarea se presupone que estás utilizando GitHub. Cree un repositorio dedicado para almacenar el código principal de Terraform y los archivos JSON de la plantilla del conjunto de permisos.

DevOps ingeniero

Prepare el código del conjunto de permisos.

Para obtener información sobre cómo estructurar los siguientes archivos, consulte el código de ejemplo en el repositorio de soluciones:

|─ main.tf

·─ salida.tf

·─ proveedors.jinja

⇒ ─ plantillas

Copia el contenido, conserva los providers.jinja valores y realiza los ajustes necesarios en los demás archivos. Por ejemplo, añada archivos de plantillas de conjuntos de permisos templates o fije la versión del aws-ia/permission-sets/aws módulo en el main.tf archivo.

DevOps ingeniero

Confirme sus cambios.

Confirme e inserte los cambios en el repositorio que creó anteriormente. Guarde el nombre del repositorio y su GitHub organización, por ejemplo,myorg/aws-ps-pipeline.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Descarga el contenido.

Descargue (clone) el contenido del repositorio de soluciones.

DevOps ingeniero

Cumpla con las variables.

Cree un terraform.tfvars archivo y añada las siguientes variables necesarias:

  • repository_name— Nombre del repositorio de conjuntos de permisos que creó anteriormente

  • branch_name— Nombre de la rama del repositorio del conjunto de permisos

  • vcs_provider— Su proveedor de VCS

  • account_lifecycle_events_source— El origen de los eventos que activan el oleoducto (AWS Control Tower o AFT)

repository_name = "myorg/aws-ps-pipeline" branch_name = "main" vcs_provider = "github" account_lifecycle_events_source = "CT"

Para obtener información sobre opciones de variables adicionales, consulta el archivo variables.tf en el repositorio de este patrón. GitHub

DevOps ingeniero

Ajuste la configuración del backend de Terraform.

En el backend.tf archivo, sustituya los marcadores de posición por sus propios valores. Use el AWS Control Tower inicio Región de AWS y proporcione los nombres del bucket de Amazon S3 y la tabla de DynamoDB creados anteriormente.

terraform { required_version = ">=1.6" backend "s3" { region = "{region}" bucket = "{bucket_name}" key = "terraform.tfstate" dynamodb_table = "{table_name}" encrypt = "true" } }

Si lo prefiere, puede usar su propia configuración de backend de Terraform.

DevOps ingeniero

Ajuste la configuración del proveedor de Terraform.

En el providers.tf archivo, sustituya los marcadores de posición por su propia información. Utilice la región de AWS Control Tower origen y proporcione el ARN del rol de IAM multicuenta creado anteriormente para el proveedor. event-source-account

provider "aws" { region = "{region}" } provider "aws" { alias = "event-source-account" region = "{region}" assume_role { role_arn = "{role_arn}" } }
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Seleccione el Cuenta de AWS.

Le recomendamos que implemente la solución en la cuenta de administrador delegado del IAM Identity Center. Sin embargo, también puede implementarla en la cuenta de AWS Organizations administración.

Para iniciar sesión en la cuenta seleccionada en la misma región que la instancia del IAM Identity Center, utilice la AWS CLI. Asegúrese de que la función de IAM que está utilizando tiene permiso para asumir la función especificada para el event-source-account proveedor en los pasos anteriores. Además, este rol debe tener acceso a AWS los recursos que se utilizan en la configuración del backend de Terraform.

Administrador de AWS

Ejecute Terraform manualmente.

Para inicializar, planificar y aplicar las configuraciones, ejecute los siguientes comandos de Terraform en el orden que se muestra:

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps ingeniero

Compruebe los resultados de la implementación.

En la cuenta de administrador delegado del IAM Identity Center, compruebe que se haya creado la aws-ps-pipeline canalización. Compruebe también que haya una AWS CodeConnections conexión con el estado Pendiente.

AWS DevOps

Finalice la CodeConnections configuración.

Para finalizar la CodeConnections configuración, siga los siguientes pasos:

  1. Vaya a CodeConnections, seleccione la conexión que se creó y elija Actualizar la conexión pendiente.

  2. Proporcione sus GitHub credenciales, instale una nueva GitHub aplicación o seleccione una existente que tenga acceso al repositorio del conjunto de permisos y elija Connect.

La canalización ahora debería tener acceso al repositorio del conjunto de permisos.

Para obtener instrucciones detalladas, consulte Actualizar una conexión pendiente en la documentación de la consola de Developer Tools.

AWS DevOps
TareaDescripciónHabilidades requeridas

Ejecute la canalización mediante AWS Control Tower actualizaciones de AFT.

Una vez creada o modificada una cuenta mediante AWS Control Tower AFT (según el tipo de eventos del ciclo de vida que elijas), se inicia la canalización.

Administrador de AWS

Cambia el código para ejecutar la canalización.

Una vez que cambies el código y lo confirmes en la main rama, se inicia la canalización.

AWS DevOps

Ejecute la canalización manualmente.

Para iniciar la canalización manualmente, utiliza la función Release Change de AWS CodePipeline.

AWS DevOps

Solución de problemas

ProblemaSolución

Acceso denegado

Compruebe que dispone de los permisos necesarios para implementar la solución.

CodeConnections problemas

  • Compruebe que el estado de la conexión sea Disponible y no Pendiente.

  • Compruebe que la CodeConnections configuración se ha completado correctamente con GitHub las credenciales. Para obtener más información, consulte Actualizar una conexión pendiente en la documentación de la consola de Developer Tools.

  • Asegúrese de que la GitHub aplicación tenga los permisos de acceso adecuados al repositorio del conjunto de permisos.

Problemas de ejecución de Pipeline

  • Comprueba CloudWatch los registros de Amazon para ver si hay errores en la ejecución de la canalización.

  • Asegúrese de que la delegación del Centro de Identidad de IAM esté configurada correctamente. De lo contrario, puede provocar errores en la canalización al leer Cuenta de AWS los metadatos.

Problemas de despliegue de conjuntos de permisos

  • Compruebe que la sintaxis JSON de los archivos de plantilla del conjunto de permisos sea correcta.

  • Compruebe que existan las políticas gestionadas por IAM a las que se hace referencia en las plantillas.

  • Compruebe si los grupos y usuarios especificados en las asignaciones existen en el Centro de identidad de IAM.

Recursos relacionados

Servicio de AWS documentación

Otros recursos

Información adicional

Archivo JSON con un ejemplo de conjunto de permisos

El siguiente ejemplo muestra cómo configurar un conjunto de permisos mediante el archivo JSON del repositorio:

{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }

Para obtener más información, consulte el esquema JSON en la documentación del módulo Conjuntos de AWS permisos del sitio web de Terraform.

Consejos

  • Puede usar los bloques de importación de Terraform para importar un conjunto de permisos existente a la solución.

  • Puede usar AFT para implementar la canalización del conjunto de AWS permisos en una cuenta delegada. Para obtener más información, consulte AFT Blueprints.