Gérez les ensembles AWS d'autorisations de manière dynamique à l'aide de Terraform - 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.

Gérez les ensembles AWS d'autorisations de manière dynamique à l'aide de Terraform

Vinicius Elias et Marcos Vinicius Pinto Jordão, Amazon Web Services

Récapitulatif

AWS IAM Identity Center améliore AWS Identity and Access Management (IAM) en fournissant un hub centralisé pour la gestion de l'accès par authentification unique aux applications cloud Comptes AWS et aux applications cloud. Cependant, la gestion manuelle des ensembles d'autorisations IAM Identity Center peut devenir de plus en plus complexe et source d'erreurs au fur et à mesure que votre entreprise grandit. Cette complexité peut entraîner des failles de sécurité potentielles et des frais administratifs.

Cette solution vous permet de gérer les ensembles d'autorisations via l'infrastructure en tant que code (IaC) à l'aide d'un pipeline d'intégration continue et de livraison continue (CI/CD) construit en mode natif. Services AWS Il permet une intégration fluide du mécanisme d'attribution des ensembles d'autorisations aux événements AWS Control Tower du cycle de vie ou à un environnement Account Factory for Terraform (AFT). Cette approche fournit des configurations d'identité dynamiques pour les nouvelles et les existantes Comptes AWS.

EventBridge Les règles d'Amazon surveillent les Compte AWS créations et les mises à jour, ce qui permet à vos configurations d'identité de rester synchronisées avec votre structure organisationnelle. Après avoir créé ou mis à jour des comptes dans AWS Control Tower ou AFT, le pipeline est déclenché. Il évalue un ensemble de fichiers JSON avec des définitions d'ensembles d'autorisations et des règles d'attribution. Ensuite, le pipeline applique et synchronise les paramètres sur tous les comptes.

Cette approche présente les avantages suivants :

  • Cohérence — Élimine la dérive manuelle des configurations au sein de votre AWS organisation

  • Auditabilité : conserve un historique complet de toutes les modifications apportées à la gestion des identités

  • Évolutivité — Applique automatiquement les configurations à mesure que votre AWS environnement se développe

  • Sécurité — Réduit les erreurs humaines lors de l'attribution des autorisations

  • Conformité — Facilite le respect des exigences réglementaires grâce à des modifications documentées et à des règles d'attribution

Conditions préalables et limitations

  • Un environnement multi-comptes avec AWS Control Tower et AWS Organizations configuré. Vous pouvez éventuellement utiliser AFT avec AWS Control Tower.

  • Un administrateur délégué du IAM Identity Center est Compte AWS chargé de recevoir la solution. Pour plus d'informations, consultez la section Administration déléguée dans la documentation d'IAM Identity Center.

  • Un référentiel de système de contrôle de version (VCS) pour gérer le code principal. Pour un exemple, consultez le GitHub référentiel de la solution.

  • AWS Ressources nécessaires à la gestion du backend Terraform, telles qu'un bucket Amazon Simple Storage Service (Amazon S3) et une table Amazon DynamoDB.

Limites

  • Le pipeline utilise des ressources AWS natives et l'open source Terraform. Le pipeline n'est pas prêt à faire appel à des écosystèmes tiers.

  • Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section AWS Services par région. Pour des points de terminaison spécifiques, consultez Points de terminaison de service et quotas, puis choisissez le lien correspondant au service.

Architecture

Le schéma suivant montre les composants et le flux de travail de ce modèle.

Composants et flux de travail pour gérer les ensembles d'autorisations AWS à l'aide de Terraform.

AWS Control Tower flux d'événements

La solution commence par l'intégration des événements provenant de l'un ou de l'autre AWS Control Tower ou de l'AFT. Le choix entre l'un ou l'autre service est effectué au moment de la mise en œuvre par le biais d'une définition de variable. Quelle que soit la méthode utilisée, le pipeline est déclenché chaque fois qu'un compte est créé ou mis à jour. Le pipeline réconcilie les politiques stockées dans le référentiel de gestion des ensembles d'autorisations.

Les événements du AWS Control Tower cycle de vie sont les suivants :

  • CreateManagedAccount— Lorsqu'un nouveau compte est créé

  • UpdateManagedAccount— Lorsqu'un compte existant est mis à jour

Routage des événements

EventBridge sert de service central de traitement des événements, capturant les événements générés dans le AWS Control Tower compte. Lorsque des événements se produisent, ils EventBridge sont acheminés de manière intelligente vers un bus d'événements centralisé dans le compte de solution. AWS Control Tower les événements du cycle de vie suivent des modèles de routage distincts. Si AFT est défini comme source d'événements, le compte de gestion AFT gère les événements à la place du AWS Control Tower compte. Cette architecture axée sur les événements permet de répondre automatiquement aux changements organisationnels sans intervention manuelle.

Processus d'intégration AFT

Lorsque les événements AWS Control Tower du cycle de vie atteignent le compte de gestion de l'AFT, ils déclenchent automatiquement plusieurs processus en aval intrinsèques à l'AFT. Une fois le processus de personnalisation du compte AFT terminé, celui-ci publie un message dans la rubrique dédiée aft-notifications Amazon Simple Notification Service (Amazon SNS). Cette rubrique déclenche la aft-new-account-forward-event AWS Lambda fonction implémentée par cette solution. La fonction Lambda envoie l'événement au bus d'événements du compte de solution, où il est utilisé pour démarrer le pipeline.

L'infrastructure en tant que pipeline de code

Le pipeline de solutions fonctionne comme un mécanisme de déploiement entièrement automatisé. Le AWS CodePipeline service surveille en permanence les modifications apportées au référentiel. Lors de la détection de nouveaux validations, il lance automatiquement le flux de travail de déploiement et lance un processus séquentiel comprenant des phases de validation et d'exécution. Le système exécute des plan opérations Terraform pour identifier les modifications proposées, suivies de apply commandes Terraform pour implémenter ces modifications dans l'environnement. AWS Notamment, le pipeline fonctionne sans aucune porte d'approbation manuelle. Cette approche permet un déploiement rapide des modifications de l'infrastructure tout en maintenant l'auditabilité grâce aux journaux de pipeline et aux fichiers d'état Terraform.

Le pipeline s'appuie sur AWS CodeBuild l'exécution des opérations Terraform dans un environnement contrôlé avec les autorisations appropriées. Grâce à cette approche IaC, le pipeline peut effectuer des opérations complètes de gestion des autorisations, notamment :

  • Créez de nouveaux ensembles d'autorisations.

  • Mettez à jour les ensembles d'autorisations existants.

  • Supprimez les ensembles d'autorisations inutiles.

  • Gérez l'attribution de ces autorisations entre les comptes et les groupes au sein des AWS organisations.

Pour maintenir la cohérence de l'infrastructure et éviter les modifications contradictoires, la solution implémente le système de gestion de l'état du backend Terraform à l'aide d'un bucket Amazon S3 et d'une table Amazon DynamoDB dédiée. Cette approche fournit un emplacement de stockage permanent pour les fichiers d'état Terraform et des mécanismes de verrouillage d'état pour empêcher les modifications simultanées des mêmes ressources.

Le code principal de Terraform utilise le module AWS permission-sets Terraform officiel. Ce module permet de gérer dynamiquement les ensembles d'autorisations dans IAM Identity Center, sur la base de modèles d'ensembles d'autorisations.

Gestion du contrôle à la source

Les modèles d'ensembles d'autorisations (fichiers JSON) résident dans un système de contrôle de version externe GitHub, tel que celui qui fournit un référentiel centralisé pour les configurations de gestion des identités. Cette approche établit une source unique de vérité pour les définitions des ensembles d'autorisations, tout en permettant un développement collaboratif grâce à des pratiques de révision de code standard. Les utilisateurs autorisés peuvent apporter des modifications à ces modèles conformément aux processus de gestion des changements organisationnels. Ces validations constituent le principal déclencheur du pipeline de déploiement automatisé, initiant le processus de mise à jour de l'infrastructure.

Pour un exemple de configuration des ensembles d'autorisations à l'aide du fichier JSON du référentiel, voir Informations supplémentaires.

Outils

Services AWS

  • AWS CodeBuildest 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 CodeConnectionspermet aux AWS ressources et aux services CodePipeline, tels que la connexion à des référentiels de code externes, tels que GitHub.

  • AWS CodePipelinevous 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 Command Line Interface (AWS CLI) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.

  • AWS Control Towervous aide à configurer et à gérer un environnement AWS multi-comptes, conformément aux meilleures pratiques prescriptives.

  • Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.

  • Amazon EventBridge est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, des AWS Lambda fonctions, des points de terminaison d'invocation HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS

  • AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.

  • AWS IAM Identity Centervous permet de gérer de manière centralisée l'accès par authentification unique (SSO) à toutes vos applications Comptes AWS et à celles du cloud.

  • AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

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

  • Amazon Simple Notification Service (Amazon SNS) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail. Il active les notifications push pour les événements de gestion des comptes, garantissant ainsi que les parties concernées sont informées des modifications ou actions importantes au sein du système.

  • Amazon Simple Storage Service (Amazon S3) 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

  • Terraform est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

Référentiel de code

Le code de ce modèle est disponible dans l'organisation AWS Samples ou GitHub dans le référentiel sample-terraform-aws-permission-sets-pipeline.

Bonnes pratiques

  • Identifiez toujours les versions des modules et fournisseurs Terraform utilisés pour exécuter le code en production.

  • Utilisez un outil d'analyse de code statique, tel que Checkov, pour scanner votre code puis résoudre les problèmes de sécurité.

  • Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections Accorder le moindre privilège et Bonnes pratiques en matière de sécurité dans la documentation IAM.

Épopées

TâcheDescriptionCompétences requises

Créez des ressources de backend Terraform.

Si vous n'avez pas encore créé vos AWS ressources de backend Terraform, suivez les étapes suivantes pour créer un compartiment Amazon S3 (s3-tf-backend-{ACCOUNT_ID}) et une table DynamoDB (). ddb-tf-backend

  1. Connectez-vous à l' Compte AWS endroit où vous allez déployer la solution, puis ouvrez-le AWS CloudShellà la AWS Control Tower maison Région AWS.

  2. Exécutez les commandes suivantes en remplaçant l'espace réservé {ACCOUNT_ID} par votre Compte AWS identifiant :

aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID} aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
Administrateur AWS

Créez un rôle multicompte.

Vous devez fournir un rôle IAM entre comptes dans la configuration du fournisseur event-source-account Terraform AWS . Si vous n'avez pas encore créé ce rôle, procédez comme suit pour le créer :

  1. Connectez-vous à la source Compte AWS de votre événement (compte de AWS Control Tower gestion ou compte AFT) et ouvrez-la AWS CloudShell.

  2. Exécutez la commande suivante, en remplaçant l'espace réservé {ACCOUNT_ID} par l' Compte AWS identifiant que vous utilisez pour cette solution, et non par votre Compte AWS identifiant actuel :

aws iam create-role \ --role-name CrossAccountRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] }'
  1. Vérifiez le résultat de la commande et copiez le rôle Amazon Resource Name (ARN) (par exemple,arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Pour associer une politique IAM au rôle, exécutez la commande suivante :

aws iam attach-role-policy \ --role-name CrossAccountRole \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

Cet exemple utilise la politique AdministratorAccessIAM AWS gérée. Si vous préférez, vous pouvez utiliser une politique plus spécifique.

Administrateur AWS
TâcheDescriptionCompétences requises

Créez un référentiel dédié.

Cette tâche suppose que vous utilisez GitHub. Créez un référentiel dédié pour stocker le code principal de Terraform et les fichiers JSON du modèle d'ensemble d'autorisations.

DevOps ingénieur

Préparez le code du jeu d'autorisations.

Pour plus d'informations sur la manière dont vous pouvez structurer les fichiers suivants, consultez l'exemple de code dans le référentiel de solutions :

─ main.tf

─ outputs.tf

─ providers.jinja

3_─ modèles

Copiez le contenu, conservez les providers.jinja valeurs et apportez les modifications nécessaires aux autres fichiers. Par exemple, ajoutez des fichiers modèles d'ensembles d'autorisations templates ou épinglez la version du aws-ia/permission-sets/aws module dans le main.tf fichier.

DevOps ingénieur

Validez vos modifications.

Validez et envoyez les modifications au référentiel que vous avez créé précédemment. Enregistrez le nom du référentiel et son GitHub organisation, par exemplemyorg/aws-ps-pipeline.

DevOps ingénieur
TâcheDescriptionCompétences requises

Téléchargez le contenu.

Téléchargez (clonez) le contenu depuis le référentiel de solutions.

DevOps ingénieur

Renseignez les variables.

Créez un terraform.tfvars fichier et ajoutez les variables nécessaires suivantes :

  • repository_name— Nom du référentiel d'ensembles d'autorisations que vous avez créé précédemment

  • branch_name— Nom de la branche du référentiel des ensembles d'autorisations

  • vcs_provider— Votre fournisseur de VCS

  • account_lifecycle_events_source— La source des événements qui déclenchent le pipeline (AWS Control Tower ou AFT)

repository_name = "myorg/aws-ps-pipeline" branch_name = "main" vcs_provider = "github" account_lifecycle_events_source = "CT"

Pour plus d'informations sur les options de variables supplémentaires, consultez le fichier variables.tf dans le référentiel de ce modèle. GitHub

DevOps ingénieur

Ajustez la configuration du backend Terraform.

Dans le backend.tf fichier, remplacez les espaces réservés par vos propres valeurs. Utilisez la page d' AWS Control Tower accueil Région AWS et indiquez les noms du bucket Amazon S3 et de la table DynamoDB créés précédemment.

terraform { required_version = ">=1.6" backend "s3" { region = "{region}" bucket = "{bucket_name}" key = "terraform.tfstate" dynamodb_table = "{table_name}" encrypt = "true" } }

Si vous préférez, vous pouvez utiliser votre propre configuration de backend Terraform.

DevOps ingénieur

Ajustez la configuration du fournisseur Terraform.

Dans le providers.tf fichier, remplacez les espaces réservés par vos propres informations. Utilisez la région d' AWS Control Tower origine et fournissez l'ARN du rôle IAM entre comptes créé précédemment pour le event-source-account fournisseur.

provider "aws" { region = "{region}" } provider "aws" { alias = "event-source-account" region = "{region}" assume_role { role_arn = "{role_arn}" } }
DevOps ingénieur
TâcheDescriptionCompétences requises

Sélectionnez le Compte AWS.

Nous vous recommandons de déployer la solution dans le compte d'administrateur délégué d'IAM Identity Center. Toutefois, vous pouvez également le déployer dans le compte AWS Organizations de gestion.

Pour vous connecter au compte sélectionné dans la même région que l'instance IAM Identity Center, utilisez le AWS CLI. Assurez-vous que le rôle IAM que vous utilisez est autorisé à assumer le rôle spécifié pour le event-source-account fournisseur dans les étapes précédentes. De plus, ce rôle doit avoir accès aux AWS ressources utilisées dans la configuration du backend Terraform.

Administrateur AWS

Exécutez Terraform manuellement.

Pour initialiser, planifier et appliquer les configurations, exécutez les commandes Terraform suivantes dans l'ordre indiqué :

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps ingénieur

Vérifiez les résultats du déploiement.

Dans le compte d'administrateur délégué d'IAM Identity Center, vérifiez que le aws-ps-pipeline pipeline a été créé. Vérifiez également qu'il existe une AWS CodeConnections connexion avec le statut En attente.

AWS DevOps

Terminez la CodeConnections configuration.

Pour terminer la CodeConnections configuration, procédez comme suit :

  1. Accédez à CodeConnections, sélectionnez la connexion qui a été créée, puis choisissez Mettre à jour la connexion en attente.

  2. Entrez vos GitHub informations d'identification, installez une nouvelle GitHub application ou sélectionnez une application existante ayant accès au référentiel des ensembles d'autorisations, puis choisissez Connect.

Le pipeline devrait désormais avoir accès au référentiel des ensembles d'autorisations.

Pour obtenir des instructions détaillées, voir Mettre à jour une connexion en attente dans la documentation de la console Developer Tools.

AWS DevOps
TâcheDescriptionCompétences requises

Exécutez le pipeline par AWS Control Tower ou les mises à jour AFT.

Une fois qu'un compte est créé ou modifié en utilisant AWS Control Tower ou AFT (selon le type d'événements du cycle de vie que vous avez choisi), le pipeline démarre.

Administrateur AWS

Exécutez le pipeline en modifiant le code.

Après avoir modifié le code et l'avoir validé dans la main branche, le pipeline démarre.

AWS DevOps

Exécutez le pipeline manuellement.

Pour démarrer le pipeline manuellement, utilisez la fonction de modification de version dans AWS CodePipeline.

AWS DevOps

Résolution des problèmes

ProblèmeSolution

Accès refusé

Vérifiez que vous disposez des autorisations requises pour déployer la solution.

CodeConnections problèmes

  • Vérifiez que l'état de la connexion est disponible plutôt qu'en attente.

  • Vérifiez que la CodeConnections configuration est correctement terminée à l'aide des GitHub informations d'identification. Pour plus d'informations, voir Mettre à jour une connexion en attente dans la documentation de la console Developer Tools.

  • Assurez-vous que l' GitHub application dispose des autorisations d'accès appropriées au référentiel d'ensembles d'autorisations.

Problèmes d'exécution du pipeline

  • Vérifiez les CloudWatch journaux Amazon pour détecter les erreurs d'exécution du pipeline.

  • Assurez-vous que la délégation IAM Identity Center est correctement configurée. Dans le cas contraire, cela peut provoquer des défaillances du pipeline lors de la lecture Compte AWS des métadonnées.

Problèmes de déploiement des ensembles d'autorisations

  • Vérifiez que la syntaxe JSON des fichiers modèles d'ensembles d'autorisations est correcte.

  • Vérifiez que les politiques gérées par IAM référencées dans les modèles existent.

  • Vérifiez si les groupes et utilisateurs spécifiés dans les attributions existent dans IAM Identity Center.

Ressources connexes

Service AWS documentation

Autres ressources

Informations supplémentaires

Fichier JSON avec un exemple d'ensemble d'autorisations

L'exemple suivant montre comment configurer un ensemble d'autorisations à l'aide du fichier JSON du référentiel :

{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }

Pour plus d'informations, consultez le schéma JSON dans la documentation du module AWS Permission Sets sur le site Web de Terraform.

Astuces

  • Vous pouvez utiliser les blocs d'importation Terraform pour importer un ensemble d'autorisations existant dans la solution.

  • Vous pouvez utiliser AFT pour implémenter le pipeline AWS d'ensembles d'autorisations dans un compte délégué. Pour plus d'informations, consultez AFT Blueprints.