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

Dernière mise à jour : 29/10/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 :

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"
}

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

1.    Obtenez la plage CIDR pour votre VPC :

$ aws ec2 describe-vpcs --vpc-ids vpc-0a05c93c7ef7a8a1c --query 'Vpcs[].CidrBlock' --output text
10.0.0.0/16

2.    Configurez les règles de groupe de sécurité pour le point de terminaison Amazon VPC afin d'autoriser le trafic entrant sur le port 443 à partir de votre VPC

$ aws ec2 authorize-security-group-ingress --group-id sg-0bacf4bbed67e4df5 --protocol tcp --port 443 --cidr 10.0.0.0/16

Associez des groupes de sécurité aux ressources AWS

1.    Si vous avez créé le groupe de sécurité de l'instance RDS facultative, 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 :

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 lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037

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 la prise en charge de DNS pour votre VPC.

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?


Besoin d'aide pour une question technique ou de facturation ?