

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gérez AWS Organizations les politiques sous forme de code en utilisant AWS CodePipeline Amazon Bedrock
<a name="manage-organizations-policies-as-code"></a>

*André Cavalcante et Mariana Pessoa de Queiroz, Amazon Web Services*

## Résumé
<a name="manage-organizations-policies-as-code-summary"></a>

Vous pouvez utiliser *les politiques d'autorisation* AWS Organizations pour configurer et gérer de manière centralisée l'accès des principaux et des ressources dans vos comptes de membres. Les [politiques de contrôle des services (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) définissent les autorisations maximales disponibles pour les rôles Gestion des identités et des accès AWS (IAM) et les utilisateurs de votre organisation. Les [politiques de contrôle des ressources (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) définissent le maximum d'autorisations disponibles pour les ressources de votre organisation.

Ce modèle vous permet de gérer SCPs et d'assimiler l'infrastructure RCPs sous forme de code (IaC) que vous déployez par le biais d'un pipeline d'intégration et de déploiement continus (CI/CD). En utilisant AWS CloudFormation ou Hashicorp Terraform pour gérer ces politiques, vous pouvez réduire la charge associée à la création et à la maintenance de plusieurs politiques d'autorisation.

Ce modèle inclut les fonctionnalités suivantes :
+ Vous créez, supprimez et mettez à jour les politiques d'autorisation à l'aide de *fichiers manifestes* (`scp-management.json`et`rcp-management.json`).
+ Vous travaillez avec des garde-corps plutôt que des politiques. Vous définissez vos barrières de sécurité et leurs cibles dans les fichiers manifestes.
+ Le pipeline, qui utilise AWS CodeBuild AWS CodePipeline, fusionne et optimise les garde-fous contenus dans les fichiers manifestes. Pour chaque instruction du fichier manifeste, le pipeline combine les barrières de sécurité en un seul SCP ou RCP, puis l'applique aux cibles définies.
+ AWS Organizations applique les politiques à vos cibles. Une *cible* peut être une Compte AWS unité organisationnelle (UO), un environnement (qui est un groupe de comptes ou OUs que vous définissez dans le `environments.json` fichier) ou un groupe de comptes partageant un [AWS tag](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html).
+ Amazon Bedrock lit les journaux du pipeline et résume tous les changements de politique.
+ Le pipeline nécessite une approbation manuelle. L'approbateur peut consulter le résumé élaboré par Amazon Bedrock, qui l'aide à comprendre les modifications.

## Conditions préalables et limitations
<a name="manage-organizations-policies-as-code-prereqs"></a>

**Conditions préalables**
+ Plusieurs Comptes AWS entités gérées en tant qu'organisation dans AWS Organizations. Pour plus d'informations, consultez la section [Création d'une organisation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Les fonctionnalités SCP et RCP sont activées dans. AWS Organizations Pour plus d'informations, consultez la section [Activation d'un type de politique](https://docs.aws.amazon.com/organizations/latest/userguide/enable-policy-type.html).
+ [La version 1.9.8 ou ultérieure de Terraform est installée.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ Si vous ne déployez pas cette solution via un pipeline Terraform, le fichier d'état Terraform doit être stocké [dans](https://developer.hashicorp.com/terraform/language/backend/s3) un bucket Amazon Simple Storage Service (Amazon S3) dans Compte AWS lequel vous déployez le pipeline de gestion des politiques.
+ [La version 3.13.3 ou ultérieure de Python est installée.](https://www.python.org/downloads/)

**Limites**
+ Vous ne pouvez pas utiliser ce modèle pour gérer SCPs ou RCPs qui a été créé en dehors de ce CI/CD pipeline. Toutefois, vous pouvez recréer les politiques existantes par le biais du pipeline. Pour plus d'informations, consultez la section *Migration des politiques existantes vers le pipeline* dans la section [Informations supplémentaires](#manage-organizations-policies-as-code-additional) de ce modèle.
+ Le nombre de comptes et OUs les politiques de chaque compte sont soumis aux [quotas et aux limites de service](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html) pour AWS Organizations.
+ Ce modèle ne peut pas être utilisé pour configurer [des politiques de gestion](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_management_policies.html) AWS Organizations, telles que des politiques de sauvegarde, des politiques de balises, des politiques d'applications de chat ou des politiques déclaratives.

## Architecture
<a name="manage-organizations-policies-as-code-architecture"></a>

Le schéma suivant montre le flux de travail du pipeline de gestion des politiques et de ses ressources associées.

![\[Publication SCPs et RCPs via un pipeline de gestion des politiques.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/372a1ace-5b2e-4f93-9f88-b5b0519ded48/images/a2cceb99-2b93-48e0-b072-bc61a572201f.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un utilisateur valide les modifications apportées aux fichiers `scp-management.json` ou aux fichiers `rcp-management.json` manifestes dans la branche principale du référentiel distant.

1. La modification de la `main` branche initie le pipeline. AWS CodePipeline

1. CodePipeline lance le `Validate-Plan` CodeBuild projet. Ce projet utilise un script Python dans le référentiel distant pour valider les politiques et les fichiers manifestes de politiques. Ce CodeBuild projet effectue les opérations suivantes :

   1. Vérifie que les fichiers manifestes SCP et RCP contiennent une instruction unique IDs ()`Sid`.

   1. Utilise les scripts `scp-policy-processor/main.py` et `rcp-policy-processor/main.py` Python pour concaténer les glissières de sécurité du dossier des barres de sécurité en une seule politique RCP ou SCP. Il combine des rambardes qui ont les mêmes caractéristiques`Resource`,`Action`, et. `Condition`

   1. Utilisée AWS Identity and Access Management Access Analyzer pour valider la politique finale optimisée. S'il y a des découvertes, le pipeline s'arrête.

   1. Crée `scps.json` des `rcps.json` fichiers, que Terraform utilise pour créer des ressources.

   1. Exécute la `terraform plan` commande, qui crée un plan d'exécution Terraform.

1. (Facultatif) Le `Validate-Plan` CodeBuild projet utilise le `bedrock-prompt/prompt.py` script pour envoyer une invite à Amazon Bedrock. Vous définissez l'invite dans le `bedrock-prompt/prompt.txt` fichier. Amazon Bedrock utilise Anthropic Claude Sonnet 3.5 pour générer un résumé des modifications proposées en analysant les logs Terraform et Python.

1. CodePipeline utilise une rubrique Amazon Simple Notification Service (Amazon SNS) afin d'informer les approbateurs que les modifications doivent être révisées. Si Amazon Bedrock a généré un résumé des modifications, la notification inclut ce résumé.

1. Un approbateur de politique approuve l'action dans. CodePipeline Si Amazon Bedrock a généré un résumé des modifications, l'approbateur peut consulter le résumé CodePipeline avant de l'approuver.

1. CodePipeline lance le `Apply` CodeBuild projet. Ce projet utilise Terraform pour appliquer les modifications du RCP et du SCP dans. AWS Organizations

Le modèle IaC associé à cette architecture déploie également les ressources suivantes qui prennent en charge le pipeline de gestion des politiques :
+ Un compartiment Amazon S3 pour stocker les CodePipeline artefacts et les scripts, tels que `scp-policy-processor/main.py` et `bedrock-prompt/prompt.py`
+ Une clé AWS Key Management Service (AWS KMS) qui chiffre les ressources créées par cette solution

## Outils
<a name="manage-organizations-policies-as-code-tools"></a>

**Services AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) est un service d'intelligence artificielle entièrement géré qui met à disposition de nombreux modèles de base très performants via une API unifiée.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés. 
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)est un service de gestion de comptes qui vous aide à Comptes AWS en regrouper plusieurs au sein d'une organisation que vous créez et gérez de manière centralisée.
+ [AWS SDK pour Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python à Services AWS.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil IaC qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le [organizations-policy-pipeline](https://github.com/aws-samples/organizations-policy-pipeline) GitHub référentiel. Les fichiers clés contenus dans le `sample-repository` dossier sont les suivants :
+ Le `environments` dossier `environments.json` contient une liste d'environnements. Les *environnements* sont un groupe de cibles et ils peuvent contenir Compte AWS IDs des unités organisationnelles (OUs).
+ Dans le `rcp-management` dossier :
  + Le `guardrails` dossier contient les rambardes individuelles pour votre RCPs
  + Le `policies` dossier contient la personne RCPs
  + Le fichier `rcp-management.json` manifeste vous permet de gérer les barrières de sécurité RCP complètes et leurs RCPs cibles associées.
+ Dans le `scp-management` dossier :
  + Le `guardrails` dossier contient les rambardes individuelles pour votre SCPs
  + Le `policies` dossier contient la personne SCPs
  + Le fichier `scp-management.json` manifeste vous permet de gérer les barrières SCP complètes et leurs SCPs cibles associées.
+ Le `utils` dossier contient des scripts qui peuvent vous aider à migrer vos fichiers actuels SCPs et vous RCPs permettre de les gérer tout au long du pipeline. Pour plus d'informations, consultez la section [Informations supplémentaires](#manage-organizations-policies-as-code-additional) de ce modèle.

## Bonnes pratiques
<a name="manage-organizations-policies-as-code-best-practices"></a>
+ Avant de configurer le pipeline, nous vous recommandons de vérifier que vous n'avez pas atteint les limites de vos AWS Organizations [quotas](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html).
+ Nous vous recommandons d'utiliser le compte AWS Organizations de gestion uniquement pour les tâches qui doivent être effectuées dans ce compte. Pour plus d'informations, consultez la section [Meilleures pratiques pour le compte de gestion](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html#bp_mgmt-acct_use-mgmt).

## Épopées
<a name="manage-organizations-policies-as-code-epics"></a>

### Configurer le compte cible
<a name="set-up-the-target-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créer un référentiel . | Créez un référentiel à partir duquel votre équipe des opérations de sécurité gérera les politiques. Utilisez l'un des fournisseurs de référentiels tiers pris en AWS CodeConnections [charge](https://docs.aws.amazon.com/dtconsole/latest/userguide/supported-versions-connections.html). | DevOps ingénieur | 
| Déléguer l'administration des politiques. | Déléguez l'administration des AWS Organizations politiques au compte membre sur lequel vous déployez le pipeline. Pour obtenir des instructions, voir [Créer une politique de délégation basée sur les ressources](https://docs.aws.amazon.com/organizations/latest/userguide/orgs-policy-delegate.html) avec. AWS Organizations Pour un exemple de politique, voir *Exemple de stratégie de délégation basée sur les ressources* dans la section [Informations supplémentaires](#manage-organizations-policies-as-code-additional) de ce modèle. | Administrateur AWS | 
| (Facultatif) Activez le modèle de base. | Si vous souhaitez générer des résumés des modifications de politique, autorisez l'accès au modèle de base Anthropic Claude 3.5 Sonnet dans Amazon Bedrock, Compte AWS là où vous déployez le pipeline. Pour obtenir des instructions, consultez [Ajouter ou supprimer l'accès aux modèles de fondation Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html). | AWS général | 

### Déployer les ressources pour le pipeline
<a name="deploy-the-resources-for-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Entrez la commande suivante pour cloner le [organizations-policy-pipeline ](https://github.com/aws-samples/organizations-policy-pipeline)référentiel à partir de GitHub :`git clone https://github.com/aws-samples/organizations-policy-pipeline.git` | DevOps ingénieur | 
| Définissez votre méthode de déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur | 
| Déployez le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur, Terraform | 
| Connectez le référentiel distant. | À l'étape précédente, Terraform a créé une CodeConnections connexion au référentiel tiers. Dans la [console AWS Developer Tools](https://console.aws.amazon.com/codesuite/settings/connections), modifiez le statut de la connexion de `PENDING` à`AVAILABLE`. Pour obtenir des instructions, voir [Mettre à jour une connexion en attente](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html). | AWS DevOps | 
| Abonnez-vous à la rubrique Amazon SNS. | Terraform a créé une rubrique Amazon SNS. Abonnez un point de terminaison au sujet et confirmez l'abonnement afin que les approbateurs reçoivent des notifications concernant les actions d'approbation en attente dans le pipeline. Pour obtenir des instructions, consultez [la section Création d'un abonnement à une rubrique Amazon SNS.](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) | AWS général | 

### Définissez vos garde-fous et vos politiques
<a name="define-your-guardrails-and-policies"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Remplissez le référentiel distant. | Depuis le dépôt cloné, copiez le contenu du `sample-repository` dossier dans votre dépôt distant. Cela inclut les `utils` dossiers `environments` `rcp-management``scp-management`,, et. | DevOps ingénieur | 
| Définissez vos environnements. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur | 
| Définissez vos rambardes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur | 
| Définissez vos politiques. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur | 

### Utiliser le fichier manifeste pour gérer les politiques
<a name="use-the-manifest-file-to-manage-the-policies"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les fichiers manifestes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | DevOps ingénieur | 
| Démarrez le pipeline. | Validez et envoyez les modifications à la branche du référentiel distant que vous avez définie dans le `variables.tf` fichier. Il s'agit généralement de la `main` branche. Le CI/CD pipeline démarre automatiquement. En cas d'erreur de pipeline, consultez la section [Dépannage](#manage-organizations-policies-as-code-troubleshooting) de ce modèle. | DevOps ingénieur | 
| Approuvez les modifications. | Lorsque le `Validate-Plan` CodeBuild projet est terminé, les approbateurs des politiques reçoivent une notification via la rubrique Amazon SNS que vous avez précédemment configurée. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | AWS général, approbateur de politiques | 
| Validez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | AWS général | 

## Résolution des problèmes
<a name="manage-organizations-policies-as-code-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Erreurs de fichiers manifestes dans la `Validate-Plan` phase du pipeline | Un message « Erreurs de pipeline lors de la phase de validation et de planification pour les fichiers manifestes » apparaît dans la sortie du pipeline en cas d'erreur dans les `rcp-management.json` fichiers `scp-management.json` ou. Les erreurs possibles incluent un nom d'environnement incorrect, des champs ou des valeurs dupliqués SIDs ou non valides. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 
| Conclusions d'IAM Access Analyzer au `Validate-Plan` cours de la phase du pipeline | Un message « Résultats trouvés dans IAM Access Analyzer pendant la phase de validation et de planification » apparaît dans la sortie du pipeline en cas d'erreur dans le garde-fou ou dans les définitions des politiques. Ce modèle utilise IAM Access Analyzer pour valider la politique finale. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-organizations-policies-as-code.html) | 

## Ressources connexes
<a name="manage-organizations-policies-as-code-resources"></a>
+ [Référence des éléments de politique JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) (documentation IAM)
+ [Politiques de contrôle des ressources](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (AWS Organizations documentation)
+ [Politiques de contrôle des services](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (AWS Organizations documentation)
+ [Ajouter ou supprimer l'accès aux modèles de fondation Amazon Bedrock (documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) Amazon Bedrock)
+ [Approuver ou rejeter une action d'approbation dans CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals-approve-or-reject.html) (CodePipeline documentation)

## Informations supplémentaires
<a name="manage-organizations-policies-as-code-additional"></a>

**Exemple de politique de délégation basée sur les ressources**

Voici un exemple de politique de délégation basée sur les ressources pour. AWS Organizations Il permet au compte d'administrateur délégué de gérer SCPs et RCPs pour l'organisation. Dans l'exemple de politique suivant, remplacez-le `<MEMBER_ACCOUNT_ID>` par l'ID du compte sur lequel vous déployez le pipeline de gestion des politiques.

```
{
  "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": "*"
    }
  ]
}
```

**Migration des politiques existantes vers le pipeline**

Si vous en avez SCPs un existant ou RCPs que vous souhaitez migrer et gérer via ce pipeline, vous pouvez utiliser les scripts Python dans le `sample-repository/utils` dossier du référentiel de code. Ces scripts incluent :
+ `check-if-scp-exists-in-env.py`— Ce script vérifie si une politique spécifiée s'applique à des cibles dans un environnement spécifique, que vous définissez dans le `environments.json` fichier. Entrez la commande suivante pour exécuter ce script :

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

  Remplacez le texte suivant dans cette commande :
  + `<POLICY_TYPE>` est `scp` ou `rcp`
  + `<POLICY_NAME>`est le nom du SCP ou du RCP
  + `<ENV_ID>`est l'ID de l'environnement que vous avez défini dans le `environments.json` fichier
+ `create-environments.py`— Ce script crée un fichier environments.json en fonction de l'environnement actuel SCPs et RCPs de votre environnement. Cela exclut les politiques déployées via AWS Control Tower. Entrez la commande suivante pour exécuter ce script, où se `<POLICY_TYPE>` trouve `scp` ou `rcp` :

  ```
  python create-environments.py --policy-type <POLICY_TYPE>
  ```
+ `verify-policies-capacity.py`— Ce script vérifie chaque environnement que vous définissez afin de déterminer la capacité restante pour chaque quota AWS Organizations lié aux politiques. Vous définissez les environnements à archiver dans le `environments.json` fichier. Entrez la commande suivante pour exécuter ce script, où se `<POLICY_TYPE>` trouve `scp` ou `rcp` :

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