Comment puis-je effectuer la rotation d'un secret AWS Secrets Manager dans un VPC privé ?

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

J'ai essayé de faire la rotation d'un secret AWS Secrets Manager pour un service AWS dans un Amazon Virtual Private Cloud (Amazon VPC). Toutefois, l'opération a échoué et Amazon CloudWatch Logs indique que la tâche AWS Lambda a expiré.

Brève description

Secrets Manager ne peut pas effectuer une rotation des secrets des services AWS exécutés dans les sous-réseaux privés Amazon VPC car ces sous-réseaux n'ont pas accès à Internet.

Solution

Suivez ces instructions pour configurer un point de terminaison d'interface d'Amazon VPC afin d'accéder à votre fonction Lambda Secrets Manager et à votre instance Amazon RDS privée. Dans l'exemple suivant, une instance Aurora RDS privée dans Amazon VPC nommée vpc-0abb11f5a28a8abe7 est utilisée.

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

Créer des groupes de sécurité pour le point de terminaison d'un VPC Secrets Manager, l'instance Amazon RDS et la fonction de rotation Lambda

Suivez ces instructions pour créer des groupes de sécurité à l'aide de AWS CLI. Les étapes que vous suivez sont similaires aux commandes suivantes :

1.    Groupe de sécurité pour le point de terminaison d'un VPC Amazon Secrets Manager :

Remarque : remplacez vpc-id vpc-0abb11f5a28a8abe7 par votre ID de VPC.

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name SMVPCEndpointSG --description "secretsmanager VPCEndpoint SG"
{
    "GroupId": "sg-0bacf4bbed67e4df5"
}

2.    Groupe de sécurité pour la fonction de rotation Lambda :  

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name LambdaFunctionSG --description "Lambda Rotation Function SG"
{
    "GroupId": "sg-0aed64f81acc4c037"
}

3.    (Facultatif) Créez un groupe de sécurité pour l'instance Amazon RDS :

Remarque : cette étape est nécessaire si votre instance RDS utilise uniquement le groupe de sécurité par défaut.  

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name RDSInstanceSG --description "RDS Instance SG"
{
    "GroupId": "sg-0d06795dffa052563"
}

Créer un point de terminaison d'interface Amazon VPC pour le service Secrets Manager et l'associer à un groupe de sécurité

Suivez les instructions de création d'un point de terminaison d'interface similaire à ce qui suit :

Remarque : remplacez your-region par votre région AWS et les ID de sous-réseau utilisés pour votre instance RDS.

$ aws ec2 create-vpc-endpoint --vpc-id  vpc-0abb11f5a28a8abe7 --vpc-endpoint-type Interface \
--service-name com.amazonaws.your-region.secretsmanager  --subnet-ids subnet-076c28105d486f3bd subnet-0af00c796ccdc725f \
--security-group-ids sg-0bacf4bbed67e4df5

Important : votre Amazon VPC doit avoir des noms d'hôte DNS et des attributs de résolution DNS activés. Pour plus d'informations, consultez Affichage et mise à jour de DNS Support pour votre VPC.

Ajouter des règles au point de terminaison Amazon VPC et aux groupes de sécurité d'instance Amazon RDS

1.    Configurez les règles de groupe de sécurité pour le point de terminaison Amazon VPC afin d'autoriser le trafic entrant à partir du groupe de sécurité de la fonction Lambda sur le port 443 :

$ aws ec2 authorize-security-group-ingress --group-id sg-0bacf4bbed67e4df5 --protocol tcp --port 443 --source-group sg-0aed64f81acc4c037

2.    Le groupe de sécurité de l'instance Amazon RDS autorise la connexion entrante à partir du groupe de sécurité de la fonction Lambda sur le port 3306 :

Remarque : remplacez your-rds-security-group par votre groupe de sécurité (soit un groupe de sécurité existant, soit l'instance RDS facultative SG).

$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port 3306 --source-group sg-0aed64f81acc4c037

Attacher des groupes de sécurité aux ressources AWS

1.    Si vous avez créé l'instance RDS facultative SG, modifiez la configuration de l'instance RDS comme suit :

Remarque : remplacez your-existing rds-security-groups par le groupe ou les groupes attachés à l'instance RDS.

$ aws rds modify-db-instance --db-instance-identifier your-rds-instance --vpc-security-group-ids sg-0d06795dffa052563 your-existing-rds-security-groups

2.    Suivez les instructions pour mettre à jour la configuration de la fonction Lambda comme suit :

$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037

Vérifier que Secrets Manager peut effectuer une rotation du secret

1.    Suivez les instructions de rotation du secret Secrets Manager comme suit :

Remarque : remplacez your-secret par votre secret Secrets Manager.

$ aws secretsmanager rotate-secret --secret-id your-secret

Secrets Manager tente de relancer la rotation précédente.

Remarque : étant donné que les tentatives précédentes de rotation du mot de passe ont échoué, vous recevez une sortie similaire à ce qui suit :

An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn't complete. That rotation will be reattempted.

2.    Surveillez la fonction dans la console AWS Lambda. Si la rotation aboutit, les flux de journaux Amazon CloudWatch contiennent une entrée similaire à ce qui suit :

[INFO] 2019-10-22T07:59:32.627Z 96179023-5b67-4e98-a057-885f68bc69f2 finishSecret: Successfully set AWSCURRENT stage to version 175b5e38-341f-4cd0-8c58-2b1e49769642 for secret arn:aws:secretsmanager:your-region:your-account:secret:your-secret

3.    Récupérez le secret Secrets Manager pour confirmer qu'il a effectué une rotation réussie, comme suit :

Remarque : remplacez your-secret-arn par votre ARN secret Secrets Manager.

aws secretsmanager get-secret-value --secret-id your-secret-arn

Remarque : la fonction de rotation Secrets Manager s'exécute de manière asynchrone en arrière-plan et peut prendre plusieurs minutes.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?