Control de los conjuntos de permisos para varias cuentas mediante Account Factory for 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.

Control de los conjuntos de permisos para varias cuentas mediante Account Factory for Terraform

Anand Krishna Varanasi y Siamak Heshmati, Amazon Web Services

Resumen

Este patrón le ayuda a integrar AWS Control Tower Account Factory Terraform (AFT) con el AWS IAM Identity Centerfin de configurar los permisos de varios Cuentas de AWS a escala. Este enfoque utiliza AWS Lambda funciones personalizadas para automatizar las asignaciones de conjuntos de permisos Cuentas de AWS que se administran como una organización. Esto agiliza el proceso porque no requiere la intervención manual del equipo de ingeniería de la plataforma. Esta solución puede mejorar la eficiencia, la seguridad y la coherencia operativas. Promueve un proceso de incorporación seguro y estandarizado AWS Control Tower, lo que lo hace indispensable para las empresas que priorizan la agilidad y la confiabilidad de su infraestructura de nube.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Esta solución solo se puede usar con cuentas que se administren mediante AWS Control Tower. Esta solución se implementa mediante Account Factory for Terraform.

  • Este patrón no incluye instrucciones para configurar una federación de identidades con un origen de identidad. Para obtener más información sobre cómo completar esta configuración, consulte los tutoriales sobre los orígenes de identidad de IAM Identity Center en la documentación de IAM Identity Center.

Arquitectura

Descripción general de AFT

AFT configura una canalización de Terraform que lo ayuda a aprovisionar y personalizar varias cuentas de AWS Control Tower. AFT sigue un GitOps modelo que automatiza los procesos de aprovisionamiento de cuentas en. AWS Control Tower Usted crea un archivo de Terraform de solicitud de cuenta y lo deposita en el repositorio. Esto inicia el flujo de trabajo de AFT para el aprovisionamiento de cuentas. Una vez completado el aprovisionamiento de la cuenta, AFT puede ejecutar automáticamente pasos de personalización adicionales. Para obtener más información, consulte la arquitectura AFT en la AWS Control Tower documentación.

AFT proporciona los siguientes repositorios principales:

  • aft-account-request: este repositorio contiene código de Terraform para crear o actualizar Cuentas de AWS.

  • aft-account-customizations: este repositorio contiene código Terraform para crear o personalizar recursos por cuenta.

  • aft-global-customizations: este repositorio contiene código Terraform para crear o personalizar recursos para todas las cuentas a escala.

  • aft-account-provisioning-customizations: este repositorio administra las personalizaciones que se aplican solo a cuentas específicas creadas y administradas con AFT. Por ejemplo, puede utilizar este repositorio para personalizar las asignaciones de usuarios o grupos en IAM Identity Center o para automatizar el cierre de cuentas.

Descripción general de la solución

Esta solución personalizada incluye una máquina de AWS Step Functions estados y una AWS Lambda función que asigna conjuntos de permisos a usuarios y grupos para varias cuentas. La máquina de estados implementada mediante este patrón funciona junto con la máquina de estados aft_account_provisioning_customizations de AFT preexistente. Un usuario envía una solicitud para actualizar las asignaciones de usuarios y grupos del IAM Identity Center al crear una nueva Cuenta de AWS cuenta o después de crearla. Para ello, insertan un cambio en el repositorio de aft-account-request. La solicitud para crear o actualizar una cuenta inicia una transmisión en Amazon DynamoDB Streams. Esto inicia la función Lambda, que actualiza los usuarios y grupos del IAM Identity Center para el destino. Cuentas de AWS

A continuación se muestra un ejemplo de los parámetros que puede proporcionar en la función de Lambda para la asignación de conjuntos de permisos a los usuarios y grupos de destino:

custom_fields = { "InstanceArn" = "<Organization ID>", "PermissionSetArn" = "<Permission set ARN>", "PrincipalId" = "<Principal ID>", }

Los parámetros de esta instrucción son los siguientes:

  • InstanceArn: el nombre de recurso de Amazon (ARN) de la organización.

  • PermissionSetArn: el ARN del conjunto de permisos.

  • PrincipalId: el identificador de un usuario o grupo de IAM Identity Center al que se aplicará el conjunto de permisos

nota

Debe crear el conjunto de permisos, los usuarios y los grupos de destino antes de ejecutar esta solución.

Si bien el valor InstanceArn debe permanecer coherente, puede modificar la función de Lambda para asignar varios conjuntos de permisos a varias identidades de destino. Los parámetros de los conjuntos de permisos deben terminar en PermissionSetArn y los parámetros de los usuarios y grupos deben terminar en PrincipalId. Debe definir ambos atributos. A continuación se muestra un ejemplo de cómo definir varios conjuntos de permisos y dirigirse a usuarios y grupos:

custom_fields = { "InstanceArn" = "<Organization ID>", "AdminAccessPermissionSetArn" = "<Admin privileges permission set ARN>", "AdminAccessPrincipalId" = "<Admin principal ID>", "ReadOnlyAccessPermissionSetArn" = "<Read-only privileges permission set ARN>", "ReadOnlyAccessPrincipalId" = "<Read-only principal ID>", }

El siguiente diagrama muestra un step-by-step flujo de trabajo que muestra cómo la solución actualiza los conjuntos de permisos para los usuarios y grupos del objetivo Cuentas de AWS a escala. Cuando el usuario inicia una solicitud de creación de cuenta, AFT inicia la máquina de estados aft-account-provisioning-framework de Step Functions. Esta máquina de estados inicia la función de Lambda extract-alternate-sso. La función Lambda asigna conjuntos de permisos a los usuarios y grupos del destino. Cuentas de AWS Estos usuarios o grupos pueden proceder de cualquier origen de identidad configurado en IAM Identity Center. Algunos ejemplos de orígenes de identidad son Okta, Active Directory o Ping Identity.

Flujo de trabajo que consiste en actualizar los conjuntos de permisos al crear o actualizar una cuenta.

El diagrama muestra el siguiente flujo de trabajo al crear cuentas nuevas:

  1. Un usuario envía un cambio de custom_fields al repositorio de aft-account-request.

  2. AWS CodePipeline inicia un AWS CodeBuild trabajo que registra los metadatos definidos por el usuario en la tabla de aft-request-audit Amazon DynamoDB. Esta tabla tiene atributos para registrar metadatos definidos por el usuario. El atributo ddb_event_name define el tipo de operación de AFT:

    • Si el valor esINSERT, la solución asigna los permisos establecidos a las identidades de destino cuando se crea la nueva. Cuenta de AWS

    • Si el valor esUPDATE, la solución asigna los permisos establecidos a las identidades de destino después de crearlas Cuenta de AWS .

  3. Amazon DynamoDB Streams inicia la función de Lambda aft_alternate_sso_extract.

  4. La función aft_alternate_sso_extract Lambda asume una función AWS Identity and Access Management (IAM) en la AWS Control Tower cuenta de administración.

  5. La función Lambda asigna los conjuntos de permisos a los usuarios y grupos de destino mediante una llamada a la API AWS SDK para Python (Boto3) create_account_assignment al Centro de identidades de IAM. Recupera el conjunto de permisos y las asignaciones de identidad de la tabla aft-request-audit de Amazon DynamoDB.

  6. Cuando se completa el flujo de trabajo de Step Functions, los conjuntos de permisos se asignan a las identidades de destino.

Automatización y escala

AFT funciona a escala mediante el Servicios de AWS uso de CodePipeline DynamoDB y Lambda, que son altamente escalables. AWS CodeBuild Para una automatización adicional, puede integrar esta solución con un sistema de gestión de incidencias o tickets, como Jira. Para obtener más información, consulte la sección Información adicional de este patrón.

Tools (Herramientas)

Servicios de AWS

  • Account Factory for Terraform (AFT) es la principal herramienta de esta solución. El aft-account-provisioning-customizations repositorio contiene el código de Terraform para crear personalizaciones Cuentas de AWS, como asignaciones personalizadas para usuarios o grupos del IAM Identity Center.

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

  • 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 Step Functionses un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

Otras herramientas

  • Python es un lenguaje de programación informático de uso general.

  • 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 repositorio de código para AFT está disponible en el repositorio GitHub AWS Control Tower Account Factory for Terraform. El código de este patrón está disponible en el repositorio Govern SSO Assignments para Cuentas de AWS usar Account Factory for Terraform (AFT).

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Crear un rol de IAM.

En la cuenta AWS Control Tower de administración, utilice Terraform para crear un rol de IAM. Este rol tiene acceso entre cuentas y una política de confianza que permite el acceso federado desde el proveedor de identidades. También tiene permisos para conceder acceso a otras cuentas a través de ella. AWS Control Tower La función de Lambda asumirá este rol. Haga lo siguiente:

  1. Descarga el AFTCrossAccountRole.tf archivo del repositorio GitHub de códigos.

  2. Modifique el AFTCrossAccountRole.tf archivo según sea necesario para su AWS entorno.

  3. En Terraform, introduzca los siguientes comandos para crear este rol de IAM:

    terraform init terraform plan terraform apply
  4. Valide que el rol se haya implementado correctamente y que tenga el acceso entre cuentas esperado.

AWS DevOps, arquitecto de nube

Personalice la solución para su entorno.

  1. Ingresa el siguiente comando para clonar las asignaciones de Govern SSO para Cuentas de AWS usar el repositorio Account Factory for Terraform (AFT) en tu estación de trabajo local.

    git clone https://github.com/aws-samples/aft-custom-sso-assignment.git
  2. En la carpeta aft-account-provisioning-customizations/terraform, abra el archivo variables.tf.

  3. Modifique las variables según sea necesario para su entorno.

  4. Guarde y cierre el archivo variables.tf.

  5. Abra el archivo account-request.tf en su repositorio de aft-account-request.

  6. Modifique los parámetros custom_fields para definir los conjuntos de permisos y los usuarios y grupos de destino. Para obtener más información, consulte la sección Arquitectura de este patrón.

  7. Guarde y cierre el archivo account-request.tf.

AWS DevOps, arquitecto de nube

Implemente la solución.

  1. En el repositorio clonado, copie el contenido de la carpeta terraform y péguelo en la carpeta terraform del repositorio aft-account-provisioning-customizations.

  2. En la cuenta de administración de AFT, inicie la canalización de ct-aft-account-provisioning-customizations. Esta acción implementa la solución personalizada. Para obtener instrucciones, consulte Iniciar una canalización en CodePipeline.

  3. Valide que los recursos se hayan implementado correctamente en la cuenta de administración de AFT.

AWS DevOps, arquitecto de nube

Configure una conexión de repositorio de código.

Configure una conexión entre el repositorio de código donde almacenará los archivos de configuración y su Cuenta de AWS. Para obtener instrucciones, consulta la sección sobre cómo añadir proveedores de fuentes de terceros a las canalizaciones que se CodeConnections encuentra en la AWS CodePipeline documentación.

AWS DevOps, arquitecto de nube
TareaDescripciónHabilidades requeridas

Inicie la canalización de AFT para implementar una nueva cuenta.

Siga las instrucciones de Aprovisione una nueva cuenta con AFT para iniciar la canalización que crea una nueva Cuenta de AWS en su AWS Control Tower entorno. Espere a que se complete la creación de la cuenta.

AWS DevOps, arquitecto de nube

Valide los cambios.

  1. Abra la consola de AWS IAM Identity Center.

  2. En la lista de cuentas, elija la cuenta que acaba de crear.

  3. Valide que se hayan asignado los conjuntos de permisos para conceder acceso a los usuarios y grupos de destino.

AWS DevOps, arquitecto de nube

Resolución de problemas

ProblemaSolución

La asignación del conjunto de permisos no funciona.

Asegúrese de que el ARN del grupo, el ID de la organización y los parámetros de Lambda sean correctos. Para ver ejemplos, consulte la sección de Información general de la solución de este patrón.

La actualización del código en el repositorio no inicia la canalización.

Este problema está relacionado con la conectividad entre tu repositorio Cuenta de AWS y el tuyo. En el Consola de administración de AWS, valide que la conexión esté activa. Para obtener más información, consulte GitHub las conexiones en la AWS CodePipeline documentación.

Información adicional

Integración con una herramienta de gestión de tickets

Puede optar por integrar esta solución con una herramienta de gestión de incidencias o incidencias, como Jira o ServiceNow. En el diagrama siguiente se muestra un ejemplo de flujo de trabajo de esta opción. Puede integrar la herramienta de gestión de tickets con los repositorios de soluciones de AFT mediante los conectores de su herramienta. Para ver los conectores de Jira, consulte Integrar Jira con. GitHub Para ver los ServiceNow conectores, consulte Integrar con. GitHub Incluso puede crear soluciones personalizadas que requieran que los usuarios proporcionen un ID de ticket como parte de la aprobación de la solicitud de extracción. Si se aprueba una solicitud para crear una nueva Cuenta de AWS mediante AFT, ese evento podría iniciar un flujo de trabajo que añada campos personalizados al aft-account-request GitHub repositorio. Puede diseñar cualquier flujo de trabajo personalizado que cumpla con los requisitos de su caso de uso.

Flujo de trabajo que utiliza GitHub Actions y una herramienta de gestión de tickets.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Los usuarios solicitan una asignación de conjuntos de permisos personalizada en una herramienta de administración de tickets, como Jira.

  2. Una vez aprobado el caso, se inicia un flujo de trabajo para actualizar la asignación del conjunto de permisos. (Opcional) Puede utilizar complementos para la automatización personalizada de este paso.

  3. Los operadores envían el código de Terraform con los parámetros del conjunto de permisos actualizados al repositorio de aft-account-request en una ramificación de desarrollo o característica.

  4. GitHub Las acciones se inician AWS CodeBuild mediante una llamada a OpenID Connect (OIDC). CodeBuild realiza escaneos de seguridad de infraestructura como código (IaC) mediante herramientas como tfsec y checkov. Advierte a los operadores de cualquier infracción de seguridad.

  5. Si no se detecta ninguna infracción, GitHub Actions crea una solicitud de extracción automática y asigna una revisión del código a sus propietarios. También crea una etiqueta para la solicitud de extracción.

  6. Si el propietario del código aprueba la revisión del código, se inicia otro flujo de trabajo de GitHub Actions. Comprueba los estándares de las solicitudes de extracción, que incluyen:

    • Si el título de la solicitud de extracción cumple con los requisitos.

    • Si el cuerpo de la solicitud de extracción contiene números de caso aprobados.

    • Si la solicitud de extracción está correctamente etiquetada.

  7. Si las solicitudes de extracción cumplen con los estándares, GitHub Actions inicia el flujo de trabajo del producto AFT. Utiliza el inicio de la ct-aft-account-request canalización AWS CodePipeline. Esta canalización inicia la máquina de estado aft-account-provisioning-framework personalizada en Step Functions. Esta máquina de estado funciona como se describió anteriormente en la sección de Información general de la solución de este patrón.