Le Blog Amazon Web Services

AWS Secrets Manager : Stocker, distribuer et renouveler les informations d’identification en toute sécurité

AWS Secrets Manager permet de stocker et de récupérer facilement vos secrets via l’API ou l’interface de ligne de commande (CLI) AWS et de faire la rotation de vos identifiants grâce à des fonctions AWS Lambda intégrées ou personnalisées. La gestion des secrets des applications, tels que les informations d’identification des bases de données, les mots de passe ou les clés API, reste aisée lorsque vous travaillez localement avec une machine et une application. À mesure que vous vous développez et que vous évoluez vers de nombreux micro-services distribués, la tâche de stocker, de distribuer, de faire la rotation et de consommer des secrets en toute sécurité devient de plus en plus difficile. Auparavant, les clients devaient fournir et maintenir une infrastructure supplémentaire uniquement pour la gestion des secrets, ce qui pouvait entraîner des coûts et introduire des complexités inutiles aux systèmes. AWS Secrets Manager vous permet de répondre à cette complexité en vous fournissant une solution pour stocker, accéder et gérer facilement vos secrets afin de réduire considérablement les risques associés.

AWS Secrets Manager

Imaginez que j’ai une application qui prend les tweets provenant de Twitter et les stocke dans une base de données Amazon Aurora. Sans AWS Secrets Manager, je dois demander un nom d’utilisateur et un mot de passe à mon administrateur de base de données et intégrer ces informations dans des variables d’environnement ou, pendant ma mise en production, dans l’application elle-même. J’aurais également dû demander à mon responsable des médias sociaux de créer les identifiants sur l’API Twitter et trouver comment les stocker. C’est un processus assez manuel, impliquant plusieurs personnes, et que je dois relancer chaque fois que je veux faire la rotation de ces identifiants. Grâce à AWS Secrets Manager, mon administrateur de base de données peut fournir une seule fois les informations d’identification dans AWS Secrets Manager et s’appuyer ensuite sur une fonction AWS Lambda fournie par AWS Secrets Manager pour mettre à jour et faire la rotation de ces informations de façon automatique. Mon responsable des médias sociaux peut placer les clés de l’API Twitter dans AWS Secrets Manager, auquel je peux ensuite accéder en utilisant un simple appel d’API et aussi faire une rotation programmatique avec une fonction lambda personnalisée utilisant l’API Twitter. Mes secrets sont chiffrés avec la clé AWS KMS de mon choix, et chacun de ces administrateurs peut explicitement accorder l’accès à ces secrets avec des politiques AWS Identity and Access Management (IAM) granulaires pour des rôles ou des utilisateurs individuels.

Voyons comment stocker un secret en utilisant la console AWS Secrets Manager. Tout d’abord, je clique sur Stocker un nouveau secret pour accéder à l’assistant de création de nouveaux secrets. Pour mon instance RDS Aurora, il est simple de sélectionner l’instance et de fournir le nom d’utilisateur et le mot de passe initiaux pour se connecter à la base de données.

Ensuite, je dois saisir un nom et une description pour accéder à mon secret. Vous pouvez utiliser le système de dénomination que vous souhaitez.

Ensuite, nous allons configurer la rotation du secret pour utiliser la fonction AWS Lambda fournie par AWS Secrets Manager pour faire la rotation de notre mot de passe tous les 10 jours.

Finalement, nous allons revoir les détails et vérifier notre exemple de code permettant de stocker et de récupérer notre secret.

Enfin, je peux revoir les détails de mes secrets dans la console.

À partir de maintenant, si j’ai besoin d’accéder à ces secrets, je ferais simplement un appel d’API. Voyez ensuite un exemple de comment accéder à vos secrets en utilisant le Kit SDK AWS pour Python (Boto3).

import json
import boto3
import json
secrets = boto3.client("secretsmanager")
rds = json.dumps(secrets.get_secret_value(SecretId="prod/TwitterApp/database")['SecretString'])
print(rds)

Ce qui me donnerait les valeurs suivantes :

{
  'engine': 'mysql',
  'host': 'database-aurora-twitter.abcdefg.eu-west-3.rds.amazonaws.com',
  'password': '-)Kw>THISISAFAKEPASSWORD:lg{&sad+Canr',
  'port': 3306,
  'username': 'mydbadmin'
 }

Plus que des mots de passe

AWS Secrets Manager peut être utilisé pour bien plus que des mots de passe. Je peux stocker des identifiants OAuth, des données binaires, et encore plus. Voyons comment stocker les clés OAuth de mon application Twitter.

Maintenant, je peux définir la rotation de mes identifiants OAuth tiers avec une fonction Lambda AWS personnalisée qui peut faire appel à l’API de Twitter chaque fois que nous avons besoin de faire une rotation de ces identifiants.

Rotation personnalisée

L’une des fonctionnalités les plus intéressantes d’AWS Secrets Manager est l’utilisation d’une fonction AWS Lambda personnalisée pour effectuer la rotation des informations d’identification. Cela vous permet de définir des workflow entièrement personnalisés pour vos informations d’identification. AWS Secrets Manager appelle votre fonction AWS Lambda avec une charge utile ou “payload” qui comprend un Step qui spécifie dans quelle étape de la rotation vous êtes, un SecretId qui spécifie pour quel secret la rotation est faite, et surtout un ClientRequestToken qui est utilisé pour assurer l’idempotence dans toute modification du secret concerné.

Lorsque vous faites la rotation des secrets, vous passez par différentes étapes :

  1. createSecret
  2. setSecret
  3. testSecret
  4. finishSecret

L’avantage de ces étapes est que vous pouvez ajouter tout type de procédure d’approbation que vous souhaitez pour chaque phase de la rotation. Pour plus de détails sur la rotation personnalisée, consultez la documentation d’AWS Secrets Manager.

 

Article original rédigé en anglais par Randall Hunt, Senior Software Engineer et Technical Evangelist chez AWS, et traduit par Bruno Medeiros de Barros, Solutions Architect dans l’équipe AWS France, LinkedIn.