Comment puis-je créer une fonction permettant de renouveler le secret AWS Secrets Manager d'une base de données non prise en charge ?

Date de la dernière mise à jour : 26/02/2020

Comment puis-je créer une fonction AWS Lambda pour renouveler les secrets AWS Secrets Manager d'autres bases de données ou services tiers ?

Courte description

La fonction Lambda est automatiquement créée avec les secrets Secrets Manager générés pour les bases de données prises en charge par Amazon Relational Database Service (Amazon RDS) et d'autres services AWS. Pour les bases de données et services AWS non pris en charge, vous pouvez créer manuellement la fonction Lambda.

Solution

Utilisez le modèle générique pour renouveler les secrets. Avant de renouveler le secret d'une autre base de données ou d'un autre service, vous devez créer le code correspondant à la fonction Lambda.

Création d'un jeu de modifications AWS CloudFormation basé sur le modèle générique

Important : avant de commencer, assurez-vous d'avoir installé et configuré l'interface en ligne de commande AWS.

Exécutez la commande create-cloud-formation-change-set pour ces valeurs :

-stack-name Nom de la pile AWS CloudFormation concernée

--parameter-override URL du point de terminaison AWS Secrets Manager pour votre région, et nom de la fonction Lambda créée par le modèle

aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:us-east-1:123456789012:applications/SecretsManagerRotationTemplate --stack-name MyLambdaCreationStack --parameter-overrides Name=endpoint,Value=https://secretsmanager.REGION.amazonaws.com Name=functionName,Value=MySecretsManagerRotationFunction --capabilities CAPABILITY_IAM CAPABILITY_RESOURCE_POLICY

Un jeu de modifications AWS CloudFormation est créé. Le nom de la pile AWS CloudFormation commence par aws-serverless-repository- et le code de statut de la pile est défini sur REVIEW_IN_PROGRESS.

Mise à jour d'une pile à l'aide du jeu de modifications

La commande create-cloud-formation-change-set renvoie les valeurs ApplicationId, ChangeSetId, SemanticVersion et StackId. Pour mettre à jour le statut de la pile, vous devez indiquer la valeur ChangeSetId pour la commande change-set-name. La commande change-set-name ne produit aucun résultat et entraîne le remplacement du code de statut de la pile par CREATE_COMPLETE. La pile AWS CloudFormation crée la fonction Lambda et un rôle IAM associé à cette dernière avec les autorisations requises.

Exécutez la commande suivante dans l'interface en ligne de commande AWS :

aws cloudformation execute-change-set --change-set-name arn:aws:cloudformation:region:123456789012:changeSet/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE

Vérification de la création de la fonction Lambda

Exécutez la commande suivante dans l'interface en ligne de commande AWS :

aws lambda list-functions

Output
{
    ...
    "FunctionName": "MySecretsManagerRotationFunction",
    ...
    "FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction",
    ... 
}

Remarque : le nom de la fonction Lambda correspond à la valeur du nom de la fonction spécifiée dans --parameter-overrides.

Configuration de la fonction Lambda pour l'accès à Amazon Virtual Private Cloud (Amazon VPC)

Si votre base de données ou votre service est hébergé(e) dans un VPC Amazon, exécutez la commande suivante. La commande update-function-configuration permet de configurer la fonction Lambda à exécuter dans le VPC. Indiquez les ID du sous-réseau et du groupe de sécurité du VPC. Pour obtenir plus d'informations, consultez la section Configuration d'une fonction Lambda pour accéder aux ressources d'un VPC Amazon.

Remarque : si votre base de données ou service n'est pas hébergé(e) dans un VPC Amazon, ignorez cette étape.

aws lambda update-function-configuration --function-name MySecretsManagerRotationFunction --vpc-config SubnetIds=COMMA SEPARATED LIST OF VPC SUBNET IDS,SecurityGroupIds=COMMA SEPARATED LIST OF SECURITY GROUP IDs

Création du point de terminaison d'un VPC pour le service Secrets Manager

Si le VPC associé à votre base de données ou service et à la fonction Lambda n'a pas accès à Internet, configurez-le avec un point de terminaison privé pour Secrets Manager. Cela permet à la fonction d'accéder à Secrets Manager au niveau d'un point de terminaison au sein du VPC. Exécutez la commande create-vpc-endpoint suivante dans l'interface en ligne de commande AWS :

Remarque : si votre base de données ou service n'est pas hébergé(e) dans un VPC Amazon, ignorez cette étape.

aws ec2 create-vpc-endpoint --vpc-id VPC ID --vpc-endpoint-type Interface --service-name com.amazonaws.REGION.secretsmanager --subnet-ids SPACE SEPARATED LIST OF VPC SUBNET IDS --security-group-ids SPACE SEPARATED LIST OF SECURITY GROUP IDs --private-dns-enabled

Personnalisation de la fonction de renouvellement

Vous pouvez personnaliser la fonction de renouvellement. Pour obtenir plus d'informations, consultez la section Présentation de la fonction Lambda et personnalisation de celle-ci.

Activation du renouvellement de votre secret

1.    Le renouvellement de votre secret doit être activé. Pour obtenir plus d'informations, consultez la section Activation du renouvellement d'un secret pour une autre base de données ou un autre service.

2.    Spécifiez le nombre de jours entre les renouvellements à l'aide des paramètres --rotation rules et AutomaticallyAfterDays :

aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --rotation-lambda-arn arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction --rotation-rules AutomaticallyAfterDays=7