Gestione AWS Organizations las políticas como código mediante AWS CodePipeline Amazon Bedrock - 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.

Gestione AWS Organizations las políticas como código mediante AWS CodePipeline Amazon Bedrock

Creado por Andre Cavalcante (AWS) y Mariana Pessoa de Queiroz (AWS)

Resumen

Puede utilizar las políticas de autorización AWS Organizations para configurar y administrar de forma centralizada el acceso de los principales y los recursos de las cuentas de sus miembros. Las políticas de control de servicios (SCPs) definen los permisos máximos disponibles para los roles y usuarios AWS Identity and Access Management (IAM) de su organización. Las políticas de control de recursos (RCPs) definen los permisos máximos disponibles para los recursos de su organización.

Este patrón le ayuda a gestionar SCPs la infraestructura RCPs como código (IaC) que se despliega mediante un proceso de integración y despliegue continuos (CI/CD). Al utilizar Terraform AWS CloudFormation o Hashicorp para gestionar estas políticas, puede reducir la carga asociada a la creación y el mantenimiento de varias políticas de autorización.

Este patrón incluye las siguientes características:

  • Las políticas de autorización se crean, eliminan y actualizan mediante archivos de manifiesto (scp-management.jsonyrcp-management.json).

  • Trabajas con barreras en lugar de políticas. Las barandillas y sus objetivos se definen en los archivos de manifiesto.

  • La canalización, que utiliza AWS CodeBuild y AWS CodePipeline, fusiona y optimiza las barreras de protección de los archivos de manifiesto. Para cada declaración del archivo de manifiesto, la canalización combina las barandillas en un único SCP o RCP y, a continuación, las aplica a los objetivos definidos.

  • AWS Organizations aplica las políticas a sus objetivos. Un objetivo puede ser una Cuenta de AWS unidad organizativa (OU), un entorno (que es un grupo de cuentas o lo OUs que definas en el environments.json archivo) o un grupo de cuentas que comparten una AWS etiqueta.

  • Amazon Bedrock lee los registros de la canalización y resume todos los cambios de política.

  • El oleoducto requiere una aprobación manual. El aprobador puede revisar el resumen ejecutivo que Amazon Bedrock ha preparado, lo que le ayuda a entender los cambios.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • No puede usar este patrón para administrar SCPs o RCPs crear fuera de esta canalización de CI/CD. Sin embargo, puede recrear las políticas existentes a través de la canalización. Para obtener más información, consulte Migración de las políticas existentes a la canalización en la sección Información adicional de este patrón.

  • La cantidad de cuentas y las políticas de cada cuenta están sujetas a las cuotas y los límites de servicio aplicables. OUs AWS Organizations

  • Este patrón no se puede utilizar para configurar políticas de administración AWS Organizations, como las políticas de respaldo, las políticas de etiquetas, las políticas de aplicaciones de chat o las políticas declarativas.

Arquitectura

El siguiente diagrama muestra el flujo de trabajo del proceso de administración de políticas y sus recursos asociados.

Publicar SCPs y RCPs ejecutar una canalización de gestión de políticas.

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

  1. Un usuario confirma los cambios en los archivos scp-management.json o en los archivos de rcp-management.json manifiesto de la rama principal del repositorio remoto.

  2. El cambio en la main rama inicia la canalización. AWS CodePipeline

  3. CodePipeline inicia el Validate-Plan CodeBuild proyecto. Este proyecto utiliza un script de Python en el repositorio remoto para validar las políticas y los archivos de manifiesto de políticas. Este CodeBuild proyecto hace lo siguiente:

    1. Comprueba que los archivos de manifiesto de SCP y RCP contienen una declaración única IDs ()Sid.

    2. Utiliza los scripts scp-policy-processor/main.py y rcp-policy-processor/main.py Python para concatenar las barandillas de la carpeta guardrails en una sola política de RCP o SCP. Combina barandas que tienen las mismas, y. Resource Action Condition

    3. Se utiliza AWS Identity and Access Management Access Analyzer para validar la política final optimizada. Si hay algún hallazgo, el oleoducto se detiene.

    4. Crea scps.json y rcps.json archiva, que Terraform utiliza para crear recursos.

    5. Ejecuta el terraform plan comando, que crea un plan de ejecución de Terraform.

  4. (Opcional) El Validate-Plan CodeBuild proyecto usa el bedrock-prompt/prompt.py script para enviar un mensaje a Amazon Bedrock. El mensaje se define en el bedrock-prompt/prompt.txt archivo. Amazon Bedrock utiliza Anthropic Claude Sonnet 3.5 para generar un resumen de los cambios propuestos mediante el análisis de los registros de Terraform y Python.

  5. CodePipeline utiliza un tema del Amazon Simple Notification Service (Amazon SNS) para notificar a los aprobadores que los cambios deben revisarse. Si Amazon Bedrock generó un resumen de cambios, la notificación incluye este resumen.

  6. El responsable de la aprobación de la política aprueba la acción en. CodePipeline Si Amazon Bedrock generó un resumen de cambios, el aprobador puede revisarlo CodePipeline antes de aprobarlo.

  7. CodePipeline inicia el proyecto. Apply CodeBuild Este proyecto usa Terraform para aplicar los cambios de RCP y SCP. AWS Organizations

La plantilla IaC asociada a esta arquitectura también incluye los siguientes recursos que respaldan el proceso de gestión de políticas:

  • Un depósito de Amazon S3 para almacenar los CodePipeline artefactos y los scripts, como scp-policy-processor/main.py y bedrock-prompt/prompt.py

  • Una clave AWS Key Management Service (AWS KMS) que cifra los recursos creados por esta solución

Herramientas

Servicios de AWS

  • Amazon Bedrock es un servicio de IA totalmente gestionado que permite utilizar muchos modelos básicos de alto rendimiento a través de una API unificada.

  • 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 implementación. 

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

  • AWS SDK para Python (Boto3)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

  • 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

  • HashiCorp Terraform es una herramienta de IaC que le ayuda a usar código para aprovisionar y administrar la infraestructura y los recursos de la nube.

Repositorio de código

El código de este patrón está disponible en el organizations-policy-pipeline GitHub repositorio. Los archivos clave que se encuentran en la sample-repository carpeta son los siguientes:

  • En la environments carpeta, environments.json contiene una lista de entornos. Los entornos son un grupo de objetivos y pueden contener Cuenta de AWS IDs o unidades organizativas (OUs).

  • En la rcp-management carpeta:

    • La guardrails carpeta contiene las barandillas individuales para su RCPs

    • La policies carpeta contiene a la persona RCPs

    • El archivo de rcp-management.json manifiesto le ayuda a gestionar las barandillas RCP, completas RCPs, y sus objetivos asociados.

  • En la carpeta: scp-management

    • La guardrails carpeta contiene las barandillas individuales para su SCPs

    • La policies carpeta contiene a la persona SCPs

    • El archivo de scp-management.json manifiesto le ayuda a gestionar las barandillas SCP, completas SCPs, y sus objetivos asociados.

  • La utils carpeta contiene scripts que pueden ayudarte a migrar los actuales SCPs y a gestionarlos a RCPs lo largo del proceso. Para obtener más información, consulte la sección Información adicional de este patrón.

Prácticas recomendadas

  • Antes de configurar la canalización, te recomendamos que compruebes que no has alcanzado los límites de tus AWS Organizations cuotas.

  • Le recomendamos que utilice la cuenta AWS Organizations de administración solo para las tareas que se deben realizar en esa cuenta. Para obtener más información, consulte Prácticas recomendadas para la cuenta de administración.

Epics

TareaDescripciónHabilidades requeridas

Creación de un repositorio.

Cree un repositorio desde el que su equipo de operaciones de seguridad administre las políticas. Utilice uno de los proveedores de repositorios externos que lo AWS CodeConnections admiten.

DevOps ingeniero

Delegar la administración de políticas.

Delega la administración de AWS Organizations las políticas en la cuenta de miembro en la que vayas a implementar la canalización. Para obtener instrucciones, consulte Crear una política de delegación basada en recursos con. AWS Organizations Para ver un ejemplo de política, consulte un ejemplo de política de delegación basada en recursos en la sección de información adicional de este patrón.

Administrador de AWS

(Opcional) Habilite el modelo básico.

Si desea generar resúmenes de los cambios en la política, habilite el acceso al modelo básico Anthropic Claude 3.5 Sonnet en Amazon Bedrock, Cuenta de AWS donde vaya a implementar la canalización. Para obtener instrucciones, consulte Añadir o eliminar el acceso a los modelos de bases Amazon Bedrock.

AWS general
TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Ingresa el siguiente comando para clonar el organizations-policy-pipeline repositorio desde GitHub:

git clone https://github.com/aws-samples/organizations-policy-pipeline.git

DevOps ingeniero

Defina su método de despliegue.

  1. En el repositorio clonado, abra el variables.tf archivo.

  2. Para project_name ello, introduzca el prefijo que desee aplicar a los nombres de los recursos desplegados.

  3. Paraprovider_type, introduzca el proveedor del repositorio remoto. Los valores válidos se proporcionan en el archivo.

  4. Parafull_repository_name, introduzca el nombre del repositorio remoto.

  5. Parabranch_name, introduzca el nombre de la rama de Git que utilizará para implementar políticas. Al insertar o fusionar esta rama, se inicia la canalización. Normalmente, esta es la rama principal.

  6. Paraterraform_version, introduzca la versión de Terraform que está utilizando.

  7. Paraenable_bedrock, introduzca true si desea que Amazon Bedrock resuma los cambios. Introdúzcalo false si no desea generar un resumen de los cambios.

  8. Para tags ello, introduzca los pares clave-valor que desee asignar como etiquetas a los recursos desplegados.

  9. Guarde y cierre el archivo variables.tf.

DevOps ingeniero

Implemente la canalización.

  1. Introduzca el siguiente comando para crear un plan y revisar los cambios:

    terraform plan
  2. Introduzca el siguiente comando para aplicar el plan y crear la infraestructura de tuberías:

    terraform apply
DevOps ingeniero, Terraform

Conecte el repositorio remoto.

En el paso anterior, Terraform creó una CodeConnections conexión con el repositorio de terceros. En la consola de AWS Developer Tools, cambie el estado de la conexión de PENDING aAVAILABLE. Para obtener instrucciones, consulte Actualizar una conexión pendiente.

AWS DevOps

Suscríbase al tema de Amazon SNS.

Terraform creó un tema de Amazon SNS. Suscriba un punto final al tema y confirme la suscripción para que los aprobadores reciban notificaciones sobre las acciones de aprobación pendientes que se estén tramitando. Para obtener instrucciones, consulte el tema Creación de una suscripción a Amazon SNS.

AWS general
TareaDescripciónHabilidades requeridas

Rellene el repositorio remoto.

Desde el repositorio clonado, copia el contenido de la sample-repository carpeta al repositorio remoto. Esto incluye las utils carpetas environmentsrcp-management,scp-management, y.

DevOps ingeniero

Defina sus entornos.

  1. En la environments carpeta, abra el environments.json archivo. Este es el archivo en el que defines el objetivo Cuentas de AWS y OUs para tu RCPs y SCPs.

  2. Elimine los entornos de ejemplo.

  3. Añada sus entornos de destino en el siguiente formato:

    [ { "ID": "<environment-name>", "Target": [ "<ou-name>:<ou-id>", "<account-name>:<account-id>" ] } ]

    Donde:

    • <environment-name>es el nombre que se asigna al grupo OUs y a las cuentas de AWS. Puede usar este nombre en el archivo de manifiesto para definir dónde quiere aplicar sus políticas.

    • <ou-name>es el nombre de la unidad organizativa de destino.

    • <ou-id>es el ID de la unidad organizativa objetivo.

    • <account-name>es el nombre del objetivo Cuenta de AWS.

    • <account-id>es el identificador del objetivo Cuenta de AWS.

    Para ver ejemplos, consulta el repositorio de código fuente.

  4. Guarde y cierre el archivo environments.json.

DevOps ingeniero

Defina sus barandillas.

  1. Navegue hasta la rcp-management/guardrails carpeta de su repositorio remoto. Esta es la carpeta en la que se definen las barreras de protección del archivo de manifiesto de RCP. Cada barandilla debe estar en un archivo individual. Los archivos Guardrail pueden contener una o más declaraciones.

    nota

    Puede usar la misma barandilla en varias declaraciones de los archivos de manifiesto para y. SCPs RCPs Si modifica la barandilla, todas las políticas que la incluyan se verán afectadas.

  2. Elimine cualquier ejemplo de barandilla que se haya copiado del repositorio de código fuente.

  3. Cree un nuevo archivo.json y asígnele un nombre descriptivo.

  4. Abre el archivo.json que has creado.

  5. Defina la barandilla en el siguiente formato:

    [ { "Sid": "<guardrail-name>", "Effect": "<effect-value>", "Action": [ "<action-name>" ], "Resource": "<resource-arn>", "Condition": { "<condition-operator>": { "<condition-key>": [ "<condition-value>" ] } } } ]

    Donde:

    • <guardrail-name>es un nombre exclusivo para la barandilla. Este nombre no se puede utilizar para ningún otro guardarraíl.

    • <effect-value>debe ser Allow o. Deny Para obtener más información, consulte Efecto.

    • <action-name>debe ser el nombre válido de una acción compatible con el servicio. Para obtener más información, consulte Acción.

    • <resource-arn>es el nombre de recurso de Amazon (ARN) del recurso al que se aplica la barandilla. También puede utilizar caracteres comodín, como o. * ? Para obtener más información, consulte Recurso.

    • <condition-operator>es un operador de condición válido. Para obtener más información, consulte Operadores de condición.

    • <condition-key>es una clave de contexto de condición global válida o una clave de contexto específica del servicio. Para obtener más información, consulte Condición.

    • <condition-value>es el valor específico que se utiliza en una condición para evaluar si se aplica una barandilla. Para obtener más información, consulte Condición.

    Para ver, por ejemplo, las barandillas RCP, consulte el repositorio de código fuente.

  6. Guarde y cierre el archivo.json.

  7. Repita estos pasos para crear tantas barandillas RCP como necesite.

  8. Repita estos pasos en la scp-management/guardrails carpeta para crear tantas barandillas como necesite para su. SCPs Para ver, por ejemplo, barandas SCP, consulta el repositorio de código fuente.

DevOps ingeniero

Defina sus políticas.

  1. Navegue hasta la rcp-management/policies carpeta de su repositorio remoto. Esta es la carpeta en la que se definen las políticas completas para el archivo de manifiesto de RCP. Cada política debe ser un archivo individual.

    nota

    Si modifica una política de esta carpeta, los cambios en la política afectarán a todas las cuentas o a las OUs que se aplique esta política, tal y como se define en el archivo de manifiesto.

  2. Elimine cualquier política de ejemplo que se haya copiado del repositorio de código fuente.

  3. Cree un nuevo archivo.json y asígnele un nombre descriptivo.

  4. Abre el archivo.json que has creado.

  5. Defina el RCP. Por ejemplo RCPs, consulte el repositorio de código fuente o consulte los ejemplos de políticas de control de recursos en la AWS Organizations documentación.

  6. Guarde y cierre el archivo.json.

  7. Repita estos pasos para crear tantos RCPs como necesite.

  8. Repite estos pasos en la scp-management/policies carpeta para crear tantos SCPs como necesites. Por ejemplo SCPs, consulte el repositorio de código fuente o consulte los ejemplos de políticas de control de servicios en la AWS Organizations documentación.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Configure los archivos de manifiesto.

  1. Abre el rcp-management.json archivo en la rcp-management carpeta. Este es el archivo en el que puede definir qué barreras RCP y cuáles son las completas que se deben RCPs aplicar a sus entornos de destino. Para ver un ejemplo de este archivo, consulte el repositorio de código fuente.

  2. Elimine la declaración de ejemplo.

  3. Añada una nueva declaración con el siguiente formato:

    [ { "SID": "<statement-name>", "Target": { "Type": "<target-type>", "ID": "<target-name>" }, "Guardrails": [ "<guardrail-name>" ], "Policy": "<policy-name>", "Comments": "<comment-text>" } ]

    Donde:

    • <statement-name>es un nombre exclusivo para la declaración.

    • <target-type>es el tipo de destino en el que desea aplicar la política. Los valores válidos son Account, OU, Environment o Tag.

    • <target-name>es el identificador del objetivo en el que desea aplicar la política. Introduzca una de las siguientes opciones:

      • En el caso de un Cuenta de AWS, introduzca el identificador como<account-name>:<account-id>.

      • En el caso de una unidad organizativa, introduzca el identificador como<OU-name>:<ou-id>.

      • Para un entorno, introduzca el nombre exclusivo que definió en el environments.json archivo.

      • Para una etiqueta, introduzca el par clave-valor como. <tag-key>:<tag-value>

    • <guardrail-name>es el nombre exclusivo de la barandilla RCP que ha definido en la carpeta. rcp-management/guardrails Puede añadir varias barandillas a este elemento. Puede dejar este campo vacío si no desea aplicar una barandilla.

    • <policy-name>es el nombre exclusivo del RCP que ha definido en la carpeta. rcp-management/policies Solo puede añadir una política a este elemento. Puede dejar este campo vacío si no desea aplicar una política.

    • <comment-text>es una descripción que puede introducir con fines de documentación. Este campo no se utiliza durante el procesamiento de la canalización. Puede dejar este campo vacío si no desea añadir ningún comentario.

  4. Repita estos pasos para añadir tantas sentencias como sean necesarias RCPs para configurarlas en su organización.

  5. Guarde y cierre el archivo rcp-management.json.

  6. En la scp-management carpeta, repita estos pasos en el scp-management.json archivo. Este es el archivo en el que puede definir qué barandas SCP y cuáles son las completas que se deben SCPs aplicar a sus entornos de destino. Para ver un ejemplo de este archivo, consulte el repositorio de código fuente.

DevOps ingeniero

Iniciar la canalización.

Confirme y envíe los cambios a la rama del repositorio remoto que haya definido en el variables.tf archivo. Normalmente, esta es la main rama. La canalización de CI/CD se inicia automáticamente. Si hay algún error en la canalización, consulte la sección de solución de problemas de este patrón.

DevOps ingeniero

Apruebe los cambios.

Cuando se complete el Validate-Plan CodeBuild proyecto, los aprobadores de políticas reciben una notificación a través del tema Amazon SNS que configuraste previamente. Haga lo siguiente:

  1. Abra el mensaje de notificación.

  2. Si está disponible, consulta el resumen de los cambios en la política.

  3. Siga las instrucciones de Aprobar o rechazar una acción de aprobación en CodePipeline.

AWS general, aprobador de políticas

Valide la implementación.

  1. Inicie sesión en la AWS Organizations consola de la cuenta de la que es el administrador delegado. AWS Organizations

  2. En la página de políticas de control de servicios, confirme que las SCPs que ha creado aparecen en la lista.

  3. Elija un SCP que se administre a través de la canalización y confirme que se aplica a los objetivos previstos.

  4. En la página Políticas de control de recursos, confirme que las RCPs que ha creado aparecen en la lista.

  5. Elija un RCP que se gestione a lo largo del proceso y confirme que se aplica a los objetivos previstos.

AWS general

Solución de problemas

ProblemaSolución

Manifieste los errores del archivo en la Validate-Plan fase de la canalización

En el resultado de la canalización, aparece el mensaje «Errores de canalización en la fase de validación y planificación de los archivos de manifiesto» si hay algún error en los rcp-management.json archivos scp-management.json o. Los posibles errores incluyen un nombre de entorno incorrecto, campos o valores duplicados SIDs o no válidos. Haga lo siguiente:

  1. Siga las instrucciones que se indican en Ver detalles de compilación en AWS CodeBuild.

  2. En el registro de compilación, busca el error de validación. El error proporciona más información sobre la causa del error en la compilación.

  3. Actualiza el archivo.json correspondiente.

  4. Confirme y envíe el archivo actualizado al repositorio remoto. La canalización se reinicia.

  5. Supervise el estado para confirmar que se ha resuelto el error de validación.

Hallazgos del IAM Access Analyzer en la Validate-Plan fase del proceso

En el resultado del proceso, aparece el mensaje «Hallazgos en el analizador de acceso de IAM durante la fase de validación y planificación» si hay algún error en las definiciones de las políticas o de la política. Este patrón utiliza IAM Access Analyzer para validar la política final. Haga lo siguiente:

  1. Siga las instrucciones que se indican en Ver detalles de construcción en. AWS CodeBuild

  2. En el registro de compilación, busque el error de validación del IAM Access Analyzer. El error proporciona más información sobre la causa del error en la compilación. Para obtener más información sobre los tipos de búsqueda, consulte la referencia de comprobación de validación de políticas de IAM.

  3. Actualice el archivo.json correspondiente a la barandilla o política.

  4. Confirme y envíe el archivo actualizado al repositorio remoto. La canalización se reinicia.

  5. Supervise el estado para confirmar que se ha resuelto el error de validación.

Recursos relacionados

Información adicional

Ejemplo de política de delegación basada en recursos

El siguiente es un ejemplo de política de delegación basada en recursos para. AWS Organizations Permite que la cuenta de administración delegada administre SCPs y RCPs para la organización. En el siguiente ejemplo de política, <MEMBER_ACCOUNT_ID> sustitúyalo por el ID de la cuenta en la que vas a implementar el proceso de administración de políticas.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegationToAudit", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<MEMBER_ACCOUNT_ID>:root" }, "Action": [ "organizations:ListTargetsForPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:AttachPolicy", "organizations:DetachPolicy", "organizations:DisablePolicyType", "organizations:EnablePolicyType", "organizations:UpdatePolicy", "organizations:DescribeEffectivePolicy", "organizations:DescribePolicy", "organizations:DescribeResourcePolicy" ], "Resource": "*" } ] }

Migración de las políticas existentes a la canalización

Si ya existe SCPs o RCPs si desea migrar y administrar a través de esta canalización, puede usar los scripts de Python en la sample-repository/utils carpeta del repositorio de código. Estos scripts incluyen:

  • check-if-scp-exists-in-env.py— Este script comprueba si una política específica se aplica a algún objetivo de un entorno específico, que usted defina en el environments.json archivo. Introduzca el siguiente comando para ejecutar este script:

    python3 check-if-scp-exists-in-env.py \ --policy-type <POLICY_TYPE> \ --policy-name <POLICY_NAME> \ --env-id <ENV_ID>

    Sustituya lo siguiente en este comando:

    • <POLICY_TYPE> es scp or rcp

    • <POLICY_NAME>es el nombre del SCP o del RCP

    • <ENV_ID>es el ID del entorno que ha definido en el archivo environments.json

  • create-environments.py— Este script crea un archivo environments.json basado en el entorno actual SCPs y RCPs en el suyo. Excluye las políticas implementadas a través de. AWS Control Tower Introduzca el siguiente comando para ejecutar este script, donde <POLICY_TYPE> está scp orcp:

    python create-environments.py --policy-type <POLICY_TYPE>
  • verify-policies-capacity.py— Este script comprueba cada entorno que defina para determinar cuánta capacidad queda para cada cuota AWS Organizations relacionada con las políticas. Usted define los entornos para registrarlos en environments.json el archivo de entrada. Introduzca el siguiente comando para ejecutar este script, donde <POLICY_TYPE> está scp orcp:

    python verify-policies-capacity.py --policy-type <POLICY_TYPE>