Associez automatiquement une politique gérée par AWS pour Systems Manager aux profils d'instance EC2 à l'aide de Cloud Custodian et d'AWS CDK - Recommandations AWS

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'instance EC2 à l'aide de Cloud Custodian et d'AWS CDK

Créée par Ali Asfour (AWS) et Aaron Lennon (AWS)

Environnement : PoC ou pilote

Technologies : développement et tests de logiciels DevOps ; gestion et gouvernance ; sécurité, identité, conformité ; infrastructure

Charge de travail : Open source

Services AWS : Amazon SNS ; Amazon SQS ; CodeBuild AWS ; AWS ; CodePipeline AWS Systems Manager ; AWS CodeCommit

Récapitulatif

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, les instances EC2 doivent disposer d'un agent AWS Systems Manager (agent SSM) 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'instance EC2, vous pouvez avoir des difficultés à mettre à jour les nouvelles instances EC2 qui n'ont pas de profil d'instance ou les instances EC2 qui ont un profil d'instance mais ne disposent pas de cette politique. AmazonSSMManagedInstanceCore 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 dans vos comptes AWS :

  • La première politique Cloud Custodian vérifie les instances EC2 existantes qui ont un profil d'instance mais qui n'ont pas cette politique. AmazonSSMManagedInstanceCore La AmazonSSMManagedInstanceCore politique est ensuite jointe. 

  • La deuxième politique Cloud Custodian vérifie les instances EC2 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 dans vos comptes afin de surveiller la création d'instances EC2 et de profils d'instance. Cela garantit que la AmazonSSMManagedInstanceCore politique est automatiquement attachée lorsqu'une instance EC2 est créée.

Ce modèle utilise les DevOps outils AWS 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

Prérequis

  • 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, 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 dans la documentation IAM.

  • 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. Important : 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 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 qu'il devops-cdk-cloudcustodian.zip contient 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

  • npmversion 7.6.1 ou ultérieure

  • AWS CDK version 1.96.0 ou ultérieure

Architecture

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.

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

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

  4. 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 évolutivité

Le module AWS CDK pipelines fournit un pipeline CI/CD utilisé CodePipeline pour orchestrer la création et le test du code source CodeBuild, en plus du déploiement de ressources AWS avec AWS stacks. CloudFormation Vous pouvez utiliser ce modèle pour tous les comptes membres et 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

  • AWS Cloud Development Kit (AWS CDK) 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) 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 est un service de création entièrement géré dans le cloud.

  • AWS CodeCommit 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 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 est un service Web qui vous permet de contrôler en toute sécurité l'accès aux ressources AWS.

  • Cloud Custodian 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 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

TâcheDescriptionCompétences requises

Configurez le CodeCommit référentiel.

  1. Décompressez le devops-cdk-cloudcustodian.zip fichier (joint) dans le répertoire de travail de votre ordinateur local.

  2. Connectez-vous à l'AWS Management Console pour votre compte de sécurité, ouvrez la CodeCommit console, puis créez un nouveau devops-cdk-cloudcustodian référentiel.

  3. Accédez au répertoire du projet et configurez le CodeCommit référentiel comme origine, validez les modifications, puis transférez-les vers la branche d'origine en exécutant les commandes suivantes :

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Pour plus d'informations à ce sujet, consultez la section Création d'un CodeCommit référentiel 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 de la section Getting started with the AWS CDK dans la documentation du AWS CDK.

Developer

Installez les packages AWS CDK requis.

  1. Configurez votre environnement virtuel en exécutant la commande suivante dans l'AWS CLI : $ python3 -m venv .env

  2. Activez votre environnement virtuel en exécutant la commande suivante : $ source .env/bin/activate

  3. Une fois l'environnement virtuel activé, installez les dépendances requises en exécutant la commande suivante : $ pip install -r requirements.txt

  4. Pour ajouter des dépendances supplémentaires (par exemple, d'autres bibliothèques AWS CDK), ajoutez-les au requirements.txt fichier, puis exécutez la commande suivante : pip install -r requirements.txt

Les packages suivants sont requis par AWS CDK et sont inclus dans le requirements.txt fichier :

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Developer
TâcheDescriptionCompé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 :

  •  Effectuez la mise à jour var_deploy_region = ‘us-east-1’ avec la région AWS dans laquelle vous souhaitez que le pipeline soit déployé.

  •  Mettez à jour var_codecommit_repo_name = “cdk-cloudcustodian” avec le nom de votre CodeCommit dépôt.

  •  Mettre à jour var_codecommit_branch_name = “main” avec le nom de la CodeCommit branche.

  •  Effectuez la mise à jour var_adminEmail=notifyadmin@email.com’ avec l'adresse e-mail de l'administrateur qui approuve les modifications.

  • Mettre à jour var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX » avec le webhook Slack utilisé pour envoyer des notifications à Cloud Custodian lorsque des modifications sont apportées.

  •  Effectuez la mise à jour var_orgId = ‘o-yyyyyyyyyy’ avec l'identifiant de votre organisation.

  • Effectuez la mise à jour security_account = ‘123456789011’ avec l'ID de compte AWS du compte sur lequel le pipeline est déployé.

  • Effectuez la mise à jour member_accounts = [‘111111111111’,’111111111112’,’111111111113’] avec les comptes membres sur lesquels vous souhaitez démarrer la pile AWS CDK et déployer les rôles IAM requis.

  • Définissez cdk_bootstrap_member_accounts = True cette True option si vous souhaitez que le pipeline démarre automatiquement le CDK AWS sur vos comptes membres.  Si True cette option est définie, le nom d'un rôle IAM existant dans les comptes membres, qui peut être assumé à partir du compte de sécurité, est également requis. Ce rôle IAM doit également disposer des autorisations requises pour démarrer le AWS CDK.

  • Mise à jour cdk_bootstrap_role = ‘AWSControlTowerExecution’ avec le rôle IAM existant dans les comptes membres qui peut être assumé à partir du compte de sécurité. Ce rôle doit également être autorisé à démarrer le kit AWS CDK. Remarque : Cela ne s'applique que s'cdk_bootstrap_member_accountsil est défini surTrue.

Developer

Mettez à jour le fichier account.yml avec les informations du compte du membre.

Pour exécuter l'outil Cloud Custodian de c7n-org 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 :

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Developer
TâcheDescriptionCompétences requises

Boostrap le compte de sécurité.

Démarrez-le deploy_account avec l'cloudcustodian_stackapplication en exécutant la commande suivante :

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
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 la 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 :

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Important : 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 Bootstrapping dans la documentation AWS CDK.

Developer
TâcheDescriptionCompé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 :

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
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é :

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Developer

Ressources connexes

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip