Faites pivoter automatiquement les clés IAM d'accès des utilisateurs à grande échelle avec AWS Organizations and AWS Secrets Manager - 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.

Faites pivoter automatiquement les clés IAM d'accès des utilisateurs à grande échelle avec AWS Organizations and AWS Secrets Manager

Créé par Tracy Hickey (AWS), Gaurav Verma (AWS), Laura Seletos (), Michael Davie (AWS) et Arvind Patel () AWS AWS

Récapitulatif

Important

Il est AWSrecommandé d'utiliser des rôles AWS Identity and Access Management (IAM) plutôt que des IAM utilisateurs dotés d'informations d'identification à long terme, telles que des clés d'accès. L'approche décrite dans ce modèle est destinée uniquement aux implémentations existantes qui nécessitent des informations d'identification de longue durée AWSAPI. Pour ces implémentations, nous vous recommandons tout de même d'envisager des options d'utilisation d'informations d'identification à court terme, telles que l'utilisation de profils d'instance Amazon Elastic Compute Cloud (AmazonEC2) ou de IAMRoles Anywhere. L'approche décrite dans cet article concerne uniquement les cas où vous ne pouvez pas passer immédiatement à l'utilisation d'informations d'identification à court terme et où vous avez besoin d'une rotation des informations d'identification à long terme selon un calendrier. Avec cette approche, vous êtes responsable de la mise à jour périodique du code ou de la configuration de votre ancienne application afin d'utiliser les API informations d'identification modifiées.

Les clés d'accès sont des informations d'identification à long terme pour un IAM utilisateur. La rotation régulière de vos IAM informations d'identification permet d'empêcher un ensemble de clés d'IAMaccès compromis d'accéder aux composants de votre AWS compte. La rotation IAM des informations d'identification est également un élément important des meilleures pratiques de sécurité dans IAM.

Ce modèle vous permet de faire pivoter automatiquement les clés d'IAMaccès à l'aide de AWS CloudFormation modèles fournis dans le référentiel de rotation des GitHub IAM clés.

Le modèle prend en charge le déploiement dans un ou plusieurs comptes. Si vous utilisez AWS Organizations, cette solution identifie tous les AWS comptes de votre IDs organisation et évolue dynamiquement à mesure que des comptes sont supprimés ou que de nouveaux comptes sont créés. La fonction AWS Lambda centralisée utilise un IAM rôle assumé pour exécuter localement les fonctions de rotation sur plusieurs comptes que vous sélectionnez.

  • Les nouvelles clés IAM d'accès sont générées lorsque les clés d'accès existantes datent de 90 jours. 

  • Les nouvelles clés d'accès sont stockées en tant que secret dans AWS Secrets Manager. Une politique basée sur les ressources permet uniquement au IAMprincipal spécifié d'accéder au secret et de le récupérer. Si vous choisissez de stocker les clés dans le compte de gestion, les clés de tous les comptes sont stockées dans le compte de gestion.

  • L'adresse e-mail attribuée au propriétaire du AWS compte sur lequel les nouvelles clés d'accès ont été créées reçoit une notification.

  • Les clés d'accès précédentes sont désactivées à 100 jours, puis supprimées à 110 jours.

  • Une notification centralisée par e-mail est envoyée au propriétaire du AWS compte.

Les fonctions Lambda et Amazon exécutent CloudWatch automatiquement ces actions. Vous pouvez ensuite récupérer la nouvelle paire de clés d'accès et la remplacer dans votre code ou dans vos applications. Les périodes de rotation, de suppression et de désactivation peuvent être personnalisées.

Conditions préalables et limitations

  • Au moins un AWS compte actif.

  • AWSOrganisations, configurées et configurées (voir didacticiel).

  • Autorisations permettant d'interroger AWS des Organisations depuis votre compte de gestion. Pour plus d'informations, consultez la section AWSOrganizations and service-linked roles dans la documentation AWS Organizations.

  • IAMPrincipal autorisé à lancer le AWS CloudFormation modèle et les ressources associées. Pour plus d'informations, consultez la section Accorder des autorisations autogérées dans la AWS CloudFormation documentation.

  • Un compartiment Amazon Simple Storage Service (Amazon S3) existant pour déployer les ressources.

  • Amazon Simple Email Service (AmazonSES) est sorti du sandbox. Pour plus d'informations, consultez la section Moving out of the Amazon SES sandbox dans la SES documentation Amazon.

  • Si vous choisissez d'exécuter Lambda dans un cloud privé virtuel (VPC), les ressources suivantes, qui doivent être créées avant d'exécuter le modèle principal CloudFormation  :

    • Une VPC.

    • Un sous-réseau

    • Points de terminaison pour AmazonSES, AWS Systems Manager, AWS Security Token Service (AWSSTS), Amazon S3 et AWS Secrets Manager. (Vous pouvez exécuter le modèle de point de terminaison fourni dans le référentiel de rotation des GitHub IAM clés pour créer ces points de terminaison.)

  • L'utilisateur et le mot de passe du Simple Mail Transfer Protocol (SMTP) sont stockés dans les paramètres (SSMparamètres) de AWS Systems Manager. Les paramètres doivent correspondre aux paramètres du CloudFormation modèle principal.

Architecture

Pile technologique

  • Amazon CloudWatch

  • Amazon EventBridge

  • IAM

  • AWS Lambda

  • AWS Organizations 

  • Amazon S3

Architecture

Les diagrammes suivants montrent les composants et les flux de travail de ce modèle. La solution prend en charge deux scénarios de stockage des informations d'identification : dans un compte membre et dans le compte de gestion.

Option 1 : Stocker les informations d'identification dans un compte membre

Stockage des IAM informations d'identification dans un compte membre

Option 2 : Stocker les informations d'identification dans le compte de gestion

Stockage des IAM informations d'identification dans le compte de gestion

Les diagrammes montrent le flux de travail suivant :

  1. Un EventBridge événement lance une fonction account_inventory Lambda toutes les 24 heures.

  2. Cette fonction Lambda interroge les AWS Organisations pour obtenir une liste de tous les AWS comptesIDs, noms de comptes et e-mails relatifs aux comptes. 

  3. La fonction account_inventory Lambda lance une fonction access_key_auto_rotation Lambda pour chaque ID de AWS compte et lui transmet les métadonnées pour un traitement supplémentaire.

  4. La fonction access_key_auto_rotation Lambda utilise un IAM rôle supposé pour accéder à l'ID du AWS compte. Le script Lambda exécute un audit auprès de tous les utilisateurs et de leurs clés IAM d'accès dans le compte. 

  5. Si l'âge de la clé d'IAMaccès n'a pas dépassé le seuil des meilleures pratiques, la fonction Lambda n'entreprend aucune autre action.

  6. Si l'âge de la clé d'IAMaccès dépasse le seuil des meilleures pratiques, la fonction access_key_auto_rotation Lambda détermine l'action de rotation à effectuer.

  7. Lorsqu'une action est requise, la fonction access_key_auto_rotation Lambda crée et met à jour un secret dans AWS Secrets Manager si une nouvelle clé est générée. Une politique basée sur les ressources est également créée pour autoriser uniquement le IAM principal spécifié à accéder au secret et à le récupérer. Dans le cas de l'option 1, les informations d'identification sont stockées dans Secrets Manager du compte correspondant. Dans le cas de l'option 2 (si l'StoreSecretsInCentralAccountindicateur est défini sur True), les informations d'identification sont stockées dans Secrets Manager du compte de gestion. 

  8. Une fonction notifier Lambda est lancée pour informer le propriétaire du compte de l'activité de rotation. Cette fonction reçoit l'identifiant du AWS compte, le nom du compte, l'adresse e-mail du compte et les actions de rotation effectuées. 

  9. La fonction notifier Lambda interroge le compartiment S3 de déploiement pour un modèle d'e-mail et le met à jour dynamiquement avec les métadonnées d'activité pertinentes. L'e-mail est ensuite envoyé à l'adresse e-mail du propriétaire du compte.

Remarques :

  • Cette solution prend en charge la résilience dans plusieurs zones de disponibilité. Cependant, il ne prend pas en charge la résilience dans plusieurs AWS régions. Pour bénéficier d'une assistance dans plusieurs régions, vous pouvez déployer la solution dans la deuxième région et désactiver la EventBridge règle de rotation des clés. Vous pouvez ensuite activer la règle lorsque vous souhaitez exécuter la solution dans la deuxième région.

  • Vous pouvez exécuter cette solution en mode audit. En mode audit, les clés IAM d'accès ne sont pas modifiées, mais un e-mail est envoyé pour informer les utilisateurs. Pour exécuter la solution en mode audit, définissez l'DryRunFlagindicateur sur True lorsque vous exécutez le modèle de rotation des clés ou dans la variable d'environnement de la fonction access_key_auto_rotation Lambda.

Automatisation et mise à l'échelle

Les CloudFormation modèles qui automatisent cette solution sont fournis dans le référentiel de rotation des GitHub IAM clés et répertoriés dans la section Code. Dans AWS Organizations, vous pouvez CloudFormation StackSetsdéployer le ASA-iam-key-auto-rotation-iam-assumed-roles.yaml CloudFormation modèle dans plusieurs comptes au lieu de déployer la solution individuellement sur chaque compte membre. 

Outils

Services AWS

  • Amazon vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.

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

  • AWSLambda est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à 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.

  • AWSOrganizations est un service de gestion de comptes qui vous aide à consolider plusieurs AWS comptes au sein d'une organisation que vous créez et gérez de manière centralisée.

  • AWSSecrets Manager vous permet de remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un API appel à Secrets Manager pour récupérer le secret par programmation.

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

  • Amazon Simple Email Service (AmazonSES) vous aide à envoyer et à recevoir des e-mails en utilisant vos propres adresses e-mail et domaines.

  • Amazon Simple Notification Service (AmazonSNS) 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.

  • Amazon Virtual Private Cloud (AmazonVPC) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d'AWS. 

  • VPCLes points de terminaison Amazon fournissent une interface permettant de se connecter à des services alimentés par AWS PrivateLink, notamment de nombreux AWS services. Pour chaque sous-réseau que vous spécifiez à partir de votreVPC, une interface réseau de point de terminaison est créée dans le sous-réseau et une adresse IP privée est attribuée à partir de la plage d'adresses du sous-réseau. 

Code

Les AWS CloudFormation modèles, les scripts Python et la documentation du runbook requis sont disponibles dans le référentiel de rotation des GitHub IAM clés. Les modèles sont déployés comme suit.

Modèle

Déployer dans

Remarques

ASA-iam-key-auto-rotation-and-notifier-solution.yaml

Compte de déploiement

Il s'agit du modèle principal de la solution.

ASA-iam-key-auto-rotation-iam-assumed-roles.yaml

Comptes à un ou plusieurs membres pour lesquels vous souhaitez alterner les informations d'identification

Vous pouvez utiliser des ensembles de CloudFormation piles pour déployer ce modèle sur plusieurs comptes.

ASA-iam-key-auto-rotation-list-accounts-role.yaml

Compte central/de gestion

Utilisez ce modèle pour tenir un inventaire des comptes dans AWS Organizations.

ASA-iam-key-auto-rotation-vpc-endpoints.yaml

Compte de déploiement

Utilisez ce modèle pour automatiser la création de points de terminaison uniquement si vous souhaitez exécuter les fonctions Lambda dans VPC un (définissez RunLambdaInVPC le paramètre sur True dans le modèle principal).

Épopées

TâcheDescriptionCompétences requises

Choisissez votre compartiment S3 de déploiement.

Connectez-vous à la console AWS de gestion de votre compte, ouvrez la console Amazon S3, puis choisissez le compartiment S3 pour votre déploiement. Si vous souhaitez implémenter la solution pour plusieurs comptes dans AWS Organizations, connectez-vous au compte de gestion de votre organisation.

Architecte du cloud

Pour cloner le référentiel.

Clonez le référentiel de rotation des GitHub IAM clés sur votre bureau local.

Architecte du cloud

Téléchargez les fichiers dans le compartiment S3.

Téléchargez les fichiers clonés dans votre compartiment S3. Utilisez la structure de dossiers par défaut suivante pour copier et coller tous les fichiers et répertoires clonés : asa/asa-iam-rotation

Note

Vous pouvez personnaliser cette structure de dossiers dans les CloudFormation modèles.

Architecte du cloud

Modifiez le modèle d'e-mail.

Modifiez le modèle d'iam-auto-key-rotation-enforcement.htmle-mail (situé dans le template dossier) en fonction de vos besoins. Remplacez [Department Name Here] à la fin du modèle par le nom de votre département.

Architecte du cloud
TâcheDescriptionCompétences requises

Lancez le CloudFormation modèle pour la rotation des clés.

  1. Lancez le ASA-iam-key-auto-rotation-and-notifier-solution.yaml modèle dans le compte de déploiement. Pour plus d'informations, consultez la section Sélection d'un modèle de pile dans la CloudFormation documentation.

  2. Spécifiez les valeurs des paramètres, notamment :

    • CloudFormation Nom du compartiment S3 (S3BucketName) : nom du compartiment S3 de déploiement qui contient votre code Lambda.

    • CloudFormation Préfixe du compartiment S3 (S3BucketPrefix) : préfixe du compartiment S3.

    • Nom de IAM rôle supposé (IAMRoleName) : nom du rôle que la fonction key-rotation Lambda adoptera pour faire pivoter les touches.

    • IAMNom du rôle d'exécution (ExecutionRoleName) : nom du rôle IAM d'exécution utilisé par la fonction key-rotation Lambda.

    • Nom du rôle d'exécution de l'inventaire (InventoryExecutionRoleName) : nom du rôle IAM d'exécution utilisé par la fonction account_inventory Lambda.

    • Indicateur Dry Run (mode audit) (DryRunFlag) : défini sur True pour activer le mode audit (par défaut). Réglez la valeur sur False pour activer le mode d'application.

    • Compte pour répertorier les comptes de l'organisation (OrgListAccount) : ID de compte du compte central/de gestion qui sera utilisé pour répertorier les comptes de l'organisation.

    • Nom du rôle des comptes de liste (OrgListRole) : nom du rôle qui sera utilisé pour répertorier les comptes de l'organisation.

    • Drapeau Secrets Store pour le compte central (StoreSecretsInCentralAccount) : défini sur True pour stocker les secrets dans le compte central. Définissez cette valeur sur False pour enregistrer les secrets dans le compte correspondant.

    • Régions pour répliquer les informations d'identification (CredentialReplicationRegions) : AWS régions dans lesquelles vous souhaitez répliquer les informations d'identification (Secrets Manager), séparées par des virgules ; par exemple,. us-east-2,us-west-1,us-west-2 Ignorez la région dans laquelle vous créez la pile.

    • Exécuter Lambda in VPC (RunLambdaInVpc) : défini sur True pour exécuter des fonctions Lambda dans un environnement spécifié. VPC Vous devez avoir créé des VPC points de terminaison et associer une NAT passerelle au sous-réseau qui contient la fonction Lambda. Pour plus d'informations, consultez l'article Re:Post qui traite de cette option.

    • VPCID pour les fonctions Lambda (VpcId), VPCCIDRpour la règle du groupe de sécurité (VpcCidr) et ID de sous-réseau pour les fonctions Lambda (SubnetId) — Fournissez des informations sur le VPCCIDR, et le sous-réseau si vous définissez sur True. RunLambdaInVpc

    • Adresse e-mail de l'administrateur (AdminEmailAddress) : adresse e-mail valide à laquelle envoyer des notifications.

    • AWSID d'organisation (AWSOrgID) — L'identifiant unique de votre organisation. Cet identifiant commence par o- et est suivi de 10 à 32 lettres minuscules ou chiffres.

    • Nom du fichier du modèle d'e-mail [Mode audit] (EmailTemplateAudit) et [Mode d'application] (EmailTemplateEnforce) — Nom du fichier du HTML modèle d'e-mail à envoyer par le notifier module pour le mode audit et le mode d'application.

    • SMTPNom du SSM paramètre utilisateur (SMTPUserParamName) et nom du SSM paramètre du SMTP mot de passe (SMTPPasswordParamName) : informations relatives à l'utilisateur et au mot de passe pour le protocole Simple Mail Transfer (SMTP). 

Architecte du cloud

Lancez le CloudFormation modèle pour les rôles assumés.

  1. Dans la AWS CloudFormation console, lancez le ASA-iam-key-auto-rotation-iam-assumed-roles.yaml modèle pour chaque compte sur lequel vous souhaitez faire pivoter les clés. Si vous avez plusieurs comptes, vous pouvez déployer le CloudFormation modèle principal de votre compte de gestion sous forme de pile et déployer le ASA-iam-key-auto-rotation-iam-assumed-roles.yaml modèle avec des ensembles de CloudFormation piles sur tous les comptes requis. Pour plus d'informations, consultez la section Travailler avec AWS CloudFormation StackSets dans la CloudFormation documentation.

  2. Spécifiez les valeurs des paramètres suivants :

    • Nom de IAM rôle supposé (IAMRoleName) : nom du IAM rôle qui sera assumé par la fonction Lambdaaccess_key_auto_rotation. Vous pouvez conserver la valeur par défaut.

    • IAMNom du rôle d'exécution (ExecutionRoleName) : IAM rôle qui assumera le rôle de sous-compte pour exécuter la fonction Lambda.

    • ID de AWS compte principal (PrimaryAccountID) : ID du AWS compte sur lequel le modèle principal sera déployé. 

    • IAMGroupe d'exemption (IAMExemptionGroup) : nom du IAM groupe utilisé pour faciliter les IAM comptes que vous souhaitez exclure de la rotation automatique des clés.

Architecte du cloud

Lancez le CloudFormation modèle d'inventaire des comptes.

  1. Lancez le ASA-iam-key-auto-rotation-list-accounts-role.yaml modèle dans le compte de gestion/central

  2. Spécifiez les valeurs des paramètres suivants :

    • Nom de IAM rôle supposé (IAMRoleName) : nom du IAM rôle que la access_key_auto_rotation fonction Lambda assumera.

    • IAMNom du rôle d'exécution pour le compte Lambda (AccountExecutionRoleName) : nom du IAM rôle que la fonction Lambda assumeranotifier.

    • IAMNom du rôle d'exécution pour la rotation Lambda (RotationExecutionRoleName) : nom du IAM rôle que la fonction Lambda assumeraaccess_key_auto_rotation.

    • ID de AWS compte principal (PrimaryAccountID) : ID du AWS compte sur lequel le modèle principal sera déployé.

Architecte du cloud

Lancez le CloudFormation modèle pour les VPC points de terminaison.

Cette tâche est facultative.

  1. Lancez le ASA-iam-key-auto-rotation-vpc-endpoints.yaml modèle dans le compte de déploiement. 

  2. Spécifiez les valeurs des paramètres suivants :

    • VPCID (pVpcId), ID de sous-réseau (pSubnetId) et CIDRplage pour VPC (pVPCCidr) : fournissez des informations sur le VPCCIDR, et le sous-réseau.

    • Définissez le paramètre de chaque VPC point de terminaison sur True. Si vous avez déjà des points de terminaison, vous pouvez choisir False.

Architecte du cloud

Ressources connexes