

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
<a name="govern-permission-sets-aft"></a>

*Anand Krishna Varanasi y Siamak Heshmati, Amazon Web Services*

## Resumen
<a name="govern-permission-sets-aft-summary"></a>

Este patrón le ayuda a integrar [AWS Control Tower Account Factory Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) con el [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)fin 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html) 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
<a name="govern-permission-sets-aft-prereqs"></a>

**Requisitos previos **
+ Cuentas de AWS, gestionado mediante AWS Control Tower. Para obtener más información, consulte [Primeros pasos con AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html).
+ Account Factory for Terraform, implementado en una cuenta dedicada en su entorno. Para obtener más información, consulte [Deploy AWS Control Tower Account Factory para Terraform](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html).
+ Una instancia de IAM Identity Center configurada en su entorno. Para obtener más información, consulte [Primeros pasos con IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).
+ Un [grupo](https://docs.aws.amazon.com/singlesignon/latest/userguide/users-groups-provisioning.html#groups-concept) de IAM Identity Center activo y configurado.  Para obtener más información, consulte [Añadir grupos a su Directorio de IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html).
+ La versión 3.9 o posterior de Python instalada

**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](https://docs.aws.amazon.com/singlesignon/latest/userguide/tutorials.html) en la documentación de IAM Identity Center.

## Arquitectura
<a name="govern-permission-sets-aft-architecture"></a>

**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](https://docs.aws.amazon.com/controltower/latest/userguide/aft-architecture.html) 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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html). 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.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/14751255-3781-48db-a6b7-1a03e28c1020/images/d1de252d-8ac9-4f7d-a559-4ab3e852f325.png)


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`.

1. 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 es`INSERT`, la solución asigna los permisos establecidos a las identidades de destino cuando se crea la nueva. Cuenta de AWS 
   + Si el valor es`UPDATE`, la solución asigna los permisos establecidos a las identidades de destino después de crearlas Cuenta de AWS .

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

1. 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.

1. 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\$1account\$1assignment](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sso-admin/client/create_account_assignment.html) 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.

1. 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](#govern-permission-sets-aft-additional) de este patrón.

## Tools (Herramientas)
<a name="govern-permission-sets-aft-tools"></a>

**Servicios de AWS**
+ [Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) 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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es 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](https://www.python.org/) es un lenguaje de programación informático de uso general.
+ [Terraform](https://www.terraform.io/) 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](https://github.com/aws-ia/terraform-aws-control_tower_account_factory). 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)](https://github.com/aws-samples/aft-custom-sso-assignment).

## Prácticas recomendadas
<a name="govern-permission-sets-aft-best-practices"></a>
+ Comprenda el [modelo de responsabilidad compartida de AWS](https://aws.amazon.com/compliance/shared-responsibility-model/).
+ Siga las recomendaciones de seguridad para. AWS Control Tower Para obtener más información, consulte [Seguridad en AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/security.html).
+ Siga el principio de privilegio mínimo Para obtener más información, consulte [Aplicar permisos de privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Cree conjuntos de permisos y roles de IAM específicos para grupos y unidades de negocio.

## Epics
<a name="govern-permission-sets-aft-epics"></a>

### Implementar la solución
<a name="deploy-the-solution"></a>


| Tarea | Descripción | Habilidades 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/govern-permission-sets-aft.html) | AWS DevOps, arquitecto de nube | 
| Personalice la solución para su entorno. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/govern-permission-sets-aft.html) | AWS DevOps, arquitecto de nube | 
| Implemente la solución. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/govern-permission-sets-aft.html) | 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](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-connections.html) encuentra en la AWS CodePipeline documentación. | AWS DevOps, arquitecto de nube | 

### Uso de la solución
<a name="use-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie la canalización de AFT para implementar una nueva cuenta. | Siga las instrucciones de [Aprovisione una nueva cuenta con AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) 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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/govern-permission-sets-aft.html) | AWS DevOps, arquitecto de nube | 

## Resolución de problemas
<a name="govern-permission-sets-aft-troubleshooting"></a>


| Problema | Solució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](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-github.html) en la AWS CodePipeline documentación. | 

## Información adicional
<a name="govern-permission-sets-aft-additional"></a>

**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](https://support.atlassian.com/jira-cloud-administration/docs/integrate-jira-software-with-github/) con. GitHub Para ver los ServiceNow conectores, consulte [Integrar](https://www.servicenow.com/docs/bundle/washingtondc-it-asset-management/page/product/software-asset-management2/concept/integrate-with-github.html) 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.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/14751255-3781-48db-a6b7-1a03e28c1020/images/83763f65-32ea-4de0-932f-14a1b2d1d3ad.png)


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.

1. 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.

1. 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.

1. GitHub Las acciones se inician AWS CodeBuild mediante una llamada a OpenID Connect (OIDC). CodeBuild [https://aquasecurity.github.io/tfsec/v1.20.0/](https://aquasecurity.github.io/tfsec/v1.20.0/) Advierte a los operadores de cualquier infracción de seguridad.

1. 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.

1. 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.

1. 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.