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). Cependant, 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 d’Amazon VPC, car ces sous-réseaux n’ont pas accès à Internet.
Résolution
Suivez ces instructions pour configurer un point de terminaison d’interface Amazon VPC afin d’accéder à votre fonction Lambda de Secrets Manager et à votre instance privée Amazon Relational Database Service (Amazon RDS). Dans l’exemple suivant, une instance privée Aurora RDS dans Amazon VPC nommée vpc-0abb11f5a28a8abe7 est utilisée.
Important :
Créez des SG pour le point de terminaison d’un VPC de Secrets Manager, l’instance RDS et la fonction de rotation Lambda
Suivez ces instructions pour créer des groupes de sécurité (SG) à l’aide de l’AWS CLI.
1. Groupe de sécurité pour le point de terminaison d’Amazon VPC de 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-vpc-endpoint"
}
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-lambda-function"
}
3. (Facultatif) Créez un SG pour l’instance RDS :
Remarque : cette étape est requise 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-rds-instance"
}
Ajouter des règles aux SG du point de terminaison d’Amazon VPC et de l’instance RDS
1. Obtenez la plage d’adresses 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 du groupe de sécurité pour le point de terminaison d’Amazon VPC afin d’autoriser le trafic entrant sur le port 443 depuis votre VPC :
$ aws ec2 authorize-security-group-ingress --group-id sg-vpc-endpoint --protocol tcp --port 443 --cidr 10.0.0.0/16
3. Configurez le SG de l’instance RDS pour autoriser les connexions entrantes en provenance du groupe de sécurité de la fonction Lambda :
Remarque :
- remplacez your-rds-security-group par votre SG (soit un SG existant ou le SG de l’instance RDS facultatif).
- Remplacez your-db-port par le port dont votre base de données est configurée pour l’utiliser.
$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port your-db-port --source-group sg-lambda-function
Associez des SG aux ressources AWS
1. Si vous avez créé le SG de l’instance RDS facultative, modifiez la configuration de l’instance RDS :
Remarque : remplacez your-existing-rds-security-groups par le ou les groupes attachés à l’instance RDS.
$ aws rds modify-db-instance --db-instance-identifier your-rds-instance --vpc-security-group-ids sg-rds-instance your-existing-rds-security-groups
2. Suivez les instructions pour mettre à jour la configuration de la fonction Lambda :
$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-lambda-function
Créez un point de terminaison d’interface Amazon VPC pour le service Secrets Manager et associez-le à un SG
Suivez les instructions pour créer un point de terminaison d’interface :
Remarque : remplacez your-region par votre Région AWS et les ID de sous-réseaux 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-vpc-endpoint
Important : Les noms d’hôte DNS et les attributs de résolution DNS doivent être activés sur votre Amazon VPC. Pour plus d’informations, consultez la section Affichage et mise à jour de la prise en charge de DNS pour votre VPC.
Vérifier que le Secrets Manager peut effectuer une rotation du secret
1. Suivez les instructions de rotation du secret du Secrets Manager :
Remarque : remplacez your-secret par le secret de votre Secrets Manager.
$ aws secretsmanager rotate-secret --secret-id your-secret
Le Secrets Manager tente de nouveau 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 est réussie, les flux de journaux d’Amazon CloudWatch contiennent une entrée similaire à la suivante :
[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 du Secrets Manager pour confirmer que la rotation a été effectuée :
Remarque : remplacez your-secret-arn par votre ARN secret de Secrets Manager.
aws secretsmanager get-secret-value --secret-id your-secret-arn
Remarque : la fonction de rotation de Secrets Manager s’exécute de manière asynchrone en arrière-plan. L’exécution de la fonction de rotation peut prendre plusieurs minutes.
Informations connexes
Comment effectuer la rotation d’un secret AWS Secrets Manager pour une connexion à la base de données qui nécessite SSL ?