

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.

# Associez automatiquement une politique gérée par AWS pour Systems Manager aux profils d' EC2 instance à l'aide de Cloud Custodian et d'AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour et Aaron Lennon, Amazon Web Services*

## Résumé
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Vous pouvez intégrer des instances Amazon Elastic Compute Cloud (Amazon EC2) à AWS Systems Manager pour automatiser les tâches opérationnelles et améliorer la visibilité et le contrôle. Pour s'intégrer à Systems Manager, EC2 les instances doivent disposer d'un agent [AWS Systems Manager (agent SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) installé et d'une politique `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) attachée à leurs profils d'instance. 

Toutefois, si vous voulez vous assurer que la `AmazonSSMManagedInstanceCore` politique est attachée à tous les profils d' EC2 instance, vous pouvez avoir des difficultés à mettre à jour les nouvelles EC2 instances qui n'ont pas de profil d'instance ou les EC2 instances qui ont un profil d'instance mais qui n'ont pas cette `AmazonSSMManagedInstanceCore` politique. Il peut également être difficile d'appliquer cette politique à plusieurs comptes Amazon Web Services (AWS) et à plusieurs régions AWS.

Ce modèle permet de résoudre ces problèmes en déployant trois politiques [Cloud Custodian](https://cloudcustodian.io/) dans vos comptes AWS :
+ La première politique Cloud Custodian vérifie les EC2 instances existantes qui ont un profil d'instance mais qui n'ont pas cette `AmazonSSMManagedInstanceCore` politique. La `AmazonSSMManagedInstanceCore` politique est ensuite jointe. 
+ La deuxième politique Cloud Custodian vérifie les EC2 instances existantes sans profil d'instance et ajoute un profil d'instance par défaut auquel la `AmazonSSMManagedInstanceCore` politique est attachée.
+ La troisième politique Cloud Custodian crée des fonctions [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) dans vos comptes afin de surveiller la création d'instances et EC2 de profils d'instance. Cela garantit que la `AmazonSSMManagedInstanceCore` politique est automatiquement attachée lors de la création d'une EC2 instance.

Ce modèle utilise les DevOps outils [AWS](https://aws.amazon.com/devops/) pour réaliser un déploiement continu et à grande échelle des politiques Cloud Custodian dans un environnement multi-comptes, sans mettre en place un environnement de calcul distinct. 

## Conditions préalables et limitations
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Conditions préalables**
+ Deux comptes AWS actifs ou plus. L'un des comptes est le *compte de sécurité* et les autres sont des *comptes de membres*.
+ Autorisations permettant de fournir des ressources AWS dans le compte de sécurité. Ce modèle utilise des [autorisations d'administrateur](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), mais vous devez accorder des autorisations conformément aux exigences et aux politiques de votre organisation.
+ Possibilité d'assumer un rôle IAM, du compte de sécurité aux comptes des membres, et de créer les rôles IAM requis. Pour plus d'informations à ce sujet, consultez la section [Déléguer l'accès entre les comptes AWS à l'aide de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) dans la documentation IAM.
+ 
**Important**  
Interface de ligne de commande AWS (AWS CLI), installée et configurée. À des fins de test, vous pouvez configurer l'AWS CLI à l'aide de la `aws configure` commande ou en définissant des variables d'environnement. : Cela n'est pas recommandé pour les environnements de production et nous recommandons de n'accorder à ce compte que l'accès avec le moindre privilège. Pour plus d'informations à ce sujet, consultez la section [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dans la documentation IAM.
+ Le `devops-cdk-cloudcustodian.zip` fichier (joint), téléchargé sur votre ordinateur local.
+ Connaissance de Python.
+ Les outils requis (Node.js, AWS Cloud Development Kit (AWS CDK) et Git) sont installés et configurés. Vous pouvez utiliser le `install-prerequisites.sh` fichier contenu dans le `devops-cdk-cloudcustodian.zip` fichier pour**** installer ces outils. ****Assurez-vous d'exécuter ce fichier avec les privilèges root. 

**Limites**
+ Bien que ce modèle puisse être utilisé dans un environnement de production, assurez-vous que tous les rôles et politiques IAM répondent aux exigences et aux politiques de votre organisation. 

**Versions du package**
+ Cloud Custodian version 0.9 ou ultérieure
+ TypeScript version 3.9.7 ou ultérieure
+ Node.js version 14.15.4 ou ultérieure
+ `npm`version 7.6.1 ou ultérieure
+ AWS CDK version 1.96.0 ou ultérieure

## Architecture
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

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

1. Les politiques Cloud Custodian sont transférées vers un CodeCommit référentiel AWS dans le compte de sécurité. Une règle Amazon CloudWatch Events lance automatiquement le CodePipeline pipeline AWS.

1. Le pipeline récupère le code le plus récent CodeCommit et l'envoie à la partie d'intégration continue du pipeline d'intégration continue et de livraison continue (CI/CD) géré par AWS. CodeBuild

1. CodeBuild exécute les DevSecOps actions complètes, y compris la validation de la syntaxe des politiques sur les politiques Cloud Custodian, et exécute ces politiques en `--dryrun` mode pour vérifier quelles ressources sont identifiées.

1. S'il n'y a aucune erreur, la tâche suivante invite un administrateur à examiner les modifications et à approuver le déploiement dans les comptes des membres.

**Pile technologique**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automatisation et mise à l'échelle**

Le module AWS CDK Pipelines fournit un CI/CD pipeline qui permet CodePipeline d'orchestrer la création et le test du code source CodeBuild, en plus du déploiement de ressources AWS avec AWS CloudFormation Stacks. Vous pouvez utiliser ce modèle pour tous les comptes membres et toutes les régions de votre organisation. Vous pouvez également étendre la `Roles creation` pile pour déployer d'autres rôles IAM dans vos comptes membres. 

## Outils
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via AWS. CloudFormation
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS à l'aide de commandes dans votre shell de ligne de commande.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de création entièrement géré dans le cloud.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version que vous pouvez utiliser pour stocker et gérer des actifs de manière privée.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre logiciel.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) est un service Web qui vous permet de contrôler en toute sécurité l'accès aux ressources AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) est un outil qui réunit les dizaines d'outils et de scripts que la plupart des entreprises utilisent pour gérer leurs comptes de cloud public en un seul outil open source.
+ [Node.js](https://nodejs.org/en/) est un JavaScript environnement d'exécution basé sur le JavaScript moteur V8 de Google Chrome.

**Code**

Pour une liste détaillée des modules, des fonctions de compte, des fichiers et des commandes de déploiement utilisés dans ce modèle, consultez le `README` fichier dans le `devops-cdk-cloudcustodian.zip` fichier (joint).

## Épopées
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configuration du pipeline avec AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le CodeCommit référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Pour plus d'informations à ce sujet, consultez [la section Création d'un CodeCommit référentiel](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) dans la CodeCommit documentation AWS. | Developer | 
| Installez les outils nécessaires. | Utilisez le `install-prerequisites.sh` fichier pour installer tous les outils requis sur Amazon Linux. Cela n'inclut pas l'AWS CLI car elle est préinstallée.Pour plus d'informations à ce sujet, consultez la section [Conditions préalables](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) de la section [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dans la documentation du AWS CDK. | Developer | 
| Installez les packages AWS CDK requis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Les packages suivants sont requis par AWS CDK et sont inclus dans le `requirements.txt` fichier :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 

### Configurez votre environnement
<a name="configure-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour les variables requises. | Ouvrez le `vars.py` fichier dans le dossier racine de votre CodeCommit dépôt et mettez à jour les variables suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 
| Mettez à jour le fichier account.yml avec les informations du compte du membre. | Pour exécuter l'outil [Cloud Custodian de c7n-org](https://cloudcustodian.io/docs/tools/c7n-org.html) sur plusieurs comptes, vous devez placer le fichier de `accounts.yml` configuration à la racine du référentiel. Voici un exemple de fichier de configuration Cloud Custodian pour AWS :<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Developer | 

### Démarrez les comptes AWS
<a name="bootstrap-the-aws-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Boostrap le compte de sécurité. | Démarrez-le `deploy_account` avec l'`cloudcustodian_stack`application en exécutant la commande suivante :<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Developer | 
| Option 1 - Démarrez automatiquement les comptes des membres. | Si la `cdk_bootstrap_member_accounts` variable est définie sur `True` dans le `vars.py` fichier, les comptes spécifiés dans la `member_accounts` variable sont automatiquement initialisés par le pipeline.Si nécessaire, vous pouvez effectuer une mise à jour `*cdk_bootstrap_role*` avec un rôle IAM que vous pouvez assumer depuis le compte de sécurité et qui dispose des autorisations requises pour démarrer le AWS CDK.Les nouveaux comptes ajoutés à la `member_accounts ` variable sont automatiquement initialisés par le pipeline afin que les rôles requis puissent être déployés. | Developer | 
| Option 2 - Démarrez manuellement les comptes des membres.  | Bien que nous ne recommandons pas cette approche, vous pouvez définir la valeur de `cdk_bootstrap_member_accounts` to `False` et effectuer cette étape manuellement en exécutant la commande suivante :<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Assurez-vous de mettre à jour les `{role_name}` valeurs `{security_account_id}` et avec le nom d'un rôle IAM que vous pouvez assumer à partir du compte de sécurité et qui dispose des autorisations requises pour démarrer le kit AWS CDK.Vous pouvez également utiliser d'autres approches pour démarrer les comptes des membres, par exemple avec AWS CloudFormation. Pour plus d'informations à ce sujet, consultez la section [Bootstrapping](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) dans la documentation AWS CDK. | Developer | 

### Déployez les piles AWS CDK
<a name="deploy-the-aws-cdk-stacks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les rôles IAM dans les comptes des membres. | Exécutez la commande suivante pour déployer la `member_account_roles_stack` pile et créer les rôles IAM dans les comptes membres :<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Developer | 
| Déployez la pile de pipelines Cloud Custodian. | Exécutez la commande suivante pour créer le `cloudcustodian_stack.py` pipeline Cloud Custodian qui est déployé dans le compte de sécurité :<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Developer | 

## Ressources connexes
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Commencer à utiliser le kit AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Pièces jointes
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)