Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Résoudre les problèmes de rotation AWS Secrets Manager
Pour un grand nombre de services, Secrets Manager utilise une fonction Lambda afin d'effectuer la rotation des secrets. Pour de plus amples informations, veuillez consulter Rotation par fonction Lambda. La fonction de rotation Lambda interagit avec la base de données ou le service auquel le secret est destiné, ainsi qu'avec Secrets Manager. Lorsque la rotation ne fonctionne pas comme prévu, vous devez d'abord vérifier les CloudWatch journaux.
Note
Certains services peuvent effectuer la gestion des secrets à votre place, notamment la gestion de la rotation automatique. Pour de plus amples informations, veuillez consulter Rotation gérée pour les AWS Secrets Manager secrets.
Pour consulter les CloudWatch journaux de votre fonction Lambda
Ouvrez la console Secrets Manager à l'adresse https://console.aws.amazon.com/secretsmanager/
. -
Choisissez votre secret, puis sur la page des détails, sous Rotation configuration (Configuration de la rotation), choisissez la fonction de rotation Lambda. La console Lambda s'ouvre.
-
Dans l'onglet Surveiller, sélectionnez Journaux, puis Afficher les connexions CloudWatch.
La CloudWatch console s'ouvre et affiche les journaux de votre fonction.
Pour interpréter les journaux
- Aucune activité après « Found credentials in environment variables » (Informations d'identification trouvées dans les variables d'environnement)
- Aucune activité après « createSecret »
- Erreur : « L'accès à n'KMSest pas autorisé »
- Erreur : « La clé est absente du secret JSON »
- Erreur : « setSecret : Impossible de se connecter à la base de données »
- Erreur : « Impossible d'importer le module ''lambda_function'' »
- Mise à jour d'une fonction de rotation existante depuis Python 3.7 vers 3.9
- AWS Lambda rotation secrète en cas d'PutSecretValueéchec
Aucune activité après « Found credentials in environment variables » (Informations d'identification trouvées dans les variables d'environnement)
Si rien ne se passe après « Found credentials in environment variables » (Informations d'identification trouvées dans les variables d'environnement) et que la durée de la tâche est longue, par exemple si elle dépasse le délai Lambda par défaut de 30 000 ms, il se peut que la fonction Lambda expire alors qu'elle essaie d'atteindre le point de terminaison Secrets Manager.
Votre fonction de rotation Lambda doit être en mesure d'accéder à un point de terminaison Secrets Manager. Si votre fonction Lambda peut accéder à Internet, vous pouvez utiliser un point de terminaison public. Pour trouver un point de terminaison, consultez AWS Secrets Manager points de terminaison.
Si votre fonction Lambda s'exécute dans un environnement VPC qui n'a pas accès à Internet, nous vous recommandons de configurer les points de terminaison privés du service Secrets Manager au sein de votre. VPC VPCVous pouvez ensuite intercepter les demandes adressées au point de terminaison régional public et les rediriger vers le point de terminaison privé. Pour de plus amples informations, veuillez consulter VPCpoint final.
Vous pouvez également activer votre fonction Lambda pour accéder à un point de terminaison public de Secrets Manager en ajoutant une NATpasserelle ou une passerelle Internet à votre point de terminaisonVPC, ce qui permet au trafic en provenance de vous d'VPCatteindre le point de terminaison public. Cela vous expose VPC à davantage de risques, car l'adresse IP de la passerelle peut être attaquée depuis l'Internet public.
Aucune activité après « createSecret »
Les problèmes suivants peuvent entraîner l'arrêt de la rotation par la suite createSecret :
- Le VPC réseau ACLs n'autorise pas HTTPS le trafic entrant et sortant.
-
Pour plus d'informations, consultez la section Contrôler le trafic vers les sous-réseaux à l'aide du réseau ACLs dans le guide de VPC l'utilisateur Amazon.
- La configuration du délai d'expiration de la fonction Lambda est trop courte pour effectuer la tâche.
-
Pour plus d'informations, consultez Configuration des options de fonction Lambda dans le Guide du développeur AWS Lambda .
- Le point de VPC terminaison Secrets Manager n'autorise pas VPC CIDRs l'entrée dans les groupes de sécurité assignés.
-
Pour plus d'informations, consultez la section Contrôler le trafic vers les ressources à l'aide de groupes de sécurité dans le guide de VPC l'utilisateur Amazon.
- La politique de VPC point de terminaison de Secrets Manager n'autorise pas Lambda à utiliser le VPC point de terminaison.
-
Pour de plus amples informations, veuillez consulter Utilisation d'un AWS Secrets Manager VPC point de terminaison.
- Le secret utilise la rotation alternée des utilisateurs, le secret du superutilisateur est géré par Amazon RDS et la fonction Lambda ne peut pas accéder au. RDS API
-
Pour la rotation des utilisateurs en alternance lorsque le secret du superutilisateur est géré par un autre service AWS, la fonction de rotation Lambda doit pouvoir appeler le point de terminaison du service pour obtenir les informations de connexion à la base de données. Nous vous recommandons de configurer un VPC point de terminaison pour le service de base de données. Pour plus d’informations, consultez :
-
Amazon RDS API et les VPC points de terminaison de l'interface dans le guide de RDS l'utilisateur Amazon.
-
Utilisation des VPC points de terminaison dans le guide de gestion Amazon Redshift.
-
Erreur : « L'accès à n'KMSest pas autorisé »
Si vous voyezClientError: An error occurred (AccessDeniedException) when calling the
GetSecretValue operation: Access to KMS is not allowed
, la fonction de rotation n'est pas autorisée à déchiffrer le secret à l'aide de la KMS clé qui a été utilisée pour chiffrer le secret. La stratégie d'autorisation peut contenir une condition qui limite le contexte de chiffrement à un secret spécifique. Pour plus d'informations sur l'autorisation requise, veuillez consulter la rubrique Déclaration de stratégie pour une clé gérée par le client.
Erreur : « La clé est absente du secret JSON »
Une fonction de rotation Lambda nécessite que la valeur secrète se trouve dans une structure spécifiqueJSON. Si cette erreur s'affiche, il JSON se peut qu'il manque une touche à laquelle la fonction de rotation a tenté d'accéder. Pour plus d'informations sur la JSON structure de chaque type de secret, consultezJSONstructure de AWS Secrets Manager secrets .
Erreur : « setSecret : Impossible de se connecter à la base de données »
Les problèmes suivants peuvent entraîner cette erreur :
- La fonction de rotation ne peut pas accéder à la base de données.
-
Si la durée de la tâche est longue, par exemple plus de 5 000 ms, il est possible que la fonction de rotation Lambda ne parvienne pas à accéder à la base de données via le réseau.
Si votre base de données ou votre service s'exécute sur une EC2 instance Amazon dans unVPC, nous vous recommandons de configurer votre fonction Lambda pour qu'elle s'exécute dans cette instance. VPC La fonction de rotation peut alors communiquer directement avec votre service. Pour plus d'informations, consultez la section Configuration de VPC l'accès.
Pour permettre à la fonction Lambda d'accéder à la base de données ou au service, vous devez vous assurer que les groupes de sécurité attachés à votre fonction de rotation Lambda autorisent les connexions sortantes vers la base de données ou le service. Vous devez également vous assurer que les groupes de sécurité attachés à votre base de données ou service autorisent les connexions entrantes depuis la fonction de rotation Lambda.
- Les informations d'identification contenues dans le secret sont incorrectes.
-
Si la durée de la tâche est courte, il se peut que la fonction de rotation Lambda ne parvienne pas à s'authentifier à l'aide des informations d'identification contenues dans le secret. Vérifiez les informations d'identification en vous connectant manuellement avec les informations contenues dans les
AWSPREVIOUS
versionsAWSCURRENT
et du secret à l'aide de la AWS CLI commandeget-secret-value
. - La base de données utilise
scram-sha-256
pour crypter les mots de passe. -
Si votre base de données est Aurora Postgre SQL version 13 ou ultérieure et qu'elle est utilisée
scram-sha-256
pour chiffrer des mots de passe, mais que la fonction de rotation utilise lalibpq
version 9 ou une version antérieure qui ne le prend pas en chargescram-sha-256
, la fonction de rotation ne peut pas se connecter à la base de données.Pour déterminer quels utilisateurs de base de données utilisent le chiffrement
scram-sha-256
-
Consultez la section Vérification des utilisateurs utilisant des mots de SCRAM passe autres que des mots de passe dans le blog SCRAMAuthentication in RDS for Postgre SQL 13
.
Pour déterminer quelle version de
libpq
votre fonction de rotation utilise-
Sur un ordinateur Linux, sur la console Lambda, accédez à votre fonction de rotation et téléchargez le package de déploiement. Décompressez le fichier zip dans un répertoire de travail.
-
Dans le répertoire de travail d'une ligne de commande, exécutez :
readelf -a libpq.so.5 | grep RUNPATH
-
Si vous voyez la chaîne
, ou toute version majeure inférieure à 10, cela signifie que la fonction de rotation n'est pas prise en chargePostgreSQL-9.4.x
scram-sha-256
.-
Sortie pour une fonction de rotation qui ne prend pas en charge
scram-sha-256
:0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/
PostgreSQL-9.4.x
_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib] -
Sortie pour une fonction de rotation prenant en charge
scram-sha-256
:0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/
PostgreSQL-10.x
_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]
-
Note
Si vous avez configuré la rotation secrète automatique avant le 30 décembre 2021, votre fonction de rotation associée à une version antérieure ne sera
libpq
pas prise en chargescram-sha-256
. Afin de prendre en chargescram-sha-256
, vous devez recréer votre fonction de rotation. -
- La base de données nécessite TLS un accès SSL /.
-
Si votre base de données nécessite une TLS connexionSSL/, mais que la fonction de rotation utilise une connexion non chiffrée, elle ne peut pas se connecter à la base de données. Les fonctions de rotation pour Amazon RDS (sauf Oracle et Db2) et Amazon DocumentDB utilisent automatiquement Secure Socket Layer SSL () ou Transport Layer Security TLS () pour se connecter à votre base de données, si celle-ci est disponible. Sinon, elles utilisent une connexion non chiffrée.
Note
Si vous avez configuré la rotation secrète automatique avant le 20 décembre 2021, votre fonction de rotation est peut-être basée sur un modèle antérieur qui ne le prenait pas en chargeSSL/TLS. To support connections that use SSL/TLS. Vous devez donc recréer votre fonction de rotation.
Pour déterminer quand votre fonction de rotation a été créée
-
Dans la console Secrets Manager https://console.aws.amazon.com/secretsmanager/
, ouvrez votre secret. Dans la section Configuration de la rotation, sous Fonction de rotation Lambda, vous pouvez voir la fonction Lambda, par exemple ARN,. arn:aws:lambda:
Copiez le nom de la fonction à partir de la fin duARN, dans cet exempleaws-region
:123456789012
:function:SecretsManagerMyRotationFunction
SecretsManagerMyRotationFunction
-
Dans la AWS Lambda console https://console.aws.amazon.com/lambda/
, sous Fonctions, collez le nom de votre fonction Lambda dans le champ de recherche, choisissez Enter, puis choisissez la fonction Lambda. -
Dans la page des détails de la fonction, dans l'onglet Configuration, sous Tags (Balises), copiez la valeur à côté de la clé aws:cloudformation:stack-name.
-
Dans la AWS CloudFormation console https://console.aws.amazon.com/cloudformation
, sous Stacks, collez la valeur clé dans le champ de recherche, puis choisissez Enter. -
La liste des piles est filtrée afin que seule la pile qui a créé la fonction de rotation Lambda apparaisse. Dans la colonne Created date (Date de création), affichez la date à laquelle la pile a été créée. Il s'agit de la date à laquelle la fonction de rotation Lambda a été créée.
-
Erreur : « Impossible d'importer le module ''lambda_function'' »
Cette erreur peut s'afficher si vous exécutez une fonction Lambda antérieure qui a été automatiquement mise à niveau de Python 3.7 vers une version plus récente de Python. Pour résoudre l'erreur, vous pouvez rétablir la version de la fonction Lambda vers Python 3.7, puis Mise à jour d'une fonction de rotation existante depuis Python 3.7 vers 3.9. Pour plus d'informations, veuillez consulter la rubrique Pourquoi la rotation de ma fonction Lambda Secrets Manager a-t-elle échoué avec le message d'erreur « module pg introuvable » ?
Mise à jour d'une fonction de rotation existante depuis Python 3.7 vers 3.9
Certaines fonctions de rotation créées avant novembre 2022 utilisaient Python 3.7. AWS SDKfor Python a cessé de prendre en charge Python 3.7 en décembre 2023. Pour plus d'informations, consultez les mises à jour de la politique de support de Python pour AWS SDKs et les outils
Pour rechercher quelles fonctions de rotation Lambda utilisent Python 3.7
Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/lambda/
. -
Dans la liste des fonctions, filtrez pour
SecretsManager
. -
Dans la liste filtrée des fonctions, sous Exécution, recherchez Python 3.7.
Pour effectuer la mise à jour vers Python 3.9 :
Option 1 : recréer la fonction de rotation en utilisant AWS CloudFormation
Lorsque vous utilisez la console Secrets Manager pour activer la rotation, Secrets Manager crée AWS CloudFormation les ressources nécessaires, y compris la fonction de rotation Lambda. Si vous avez utilisé la console pour activer la rotation ou si vous avez créé la fonction de rotation à l'aide d'une AWS CloudFormation pile, vous pouvez utiliser la même AWS CloudFormation pile pour recréer la fonction de rotation sous un nouveau nom. La nouvelle fonction utilise la version la plus récente de Python.
Pour trouver la AWS CloudFormation pile qui a créé la fonction de rotation
Dans la page des détails de la fonction Lambda, sous l'onglet Configuration, choisissez Balises. Consultez la section ARN suivante : aws:cloudformation:stack-id.
Le nom de la pile est intégré dans leARN, comme indiqué dans l'exemple suivant.
ARN:
arn:aws:cloudformation:us-west-2:408736277230:stack/
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537Nom de la pile :
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
Pour recréer une fonction de rotation (AWS CloudFormation)
-
Dans AWS CloudFormation, recherchez la pile par son nom, puis choisissez Mettre à jour.
Si une boîte de dialogue vous recommande de mettre à jour la pile racine s'affiche, choisissez Accéder à la pile racine, puis choisissez Mettre à jour.
-
Sur la page Mettre à jour la pile, sous Préparer le modèle, choisissez Modifier dans Application Composer, puis sous Modifier le modèle dans Application Composer, cliquez sur le bouton Modifier dans Application Composer.
-
Dans Application Composer, procédez comme suit :
-
Dans le code du modèle, dans
SecretRotationScheduleHostedRotationLambda
, remplacez la valeur pour"functionName": "SecretsManagerTestRotationRDS"
par un nouveau nom de fonction, par exemple dansJSON,"functionName": "SecretsManagerTestRotationRDSupdated"
-
Choisissez Mettre à jour le modèle.
-
Dans la AWS CloudFormation boîte de dialogue Continuer à, choisissez Confirmer et passez à AWS CloudFormation.
-
-
Continuez à suivre le flux de travail de la AWS CloudFormation pile, puis choisissez Soumettre.
Option 2 : mettre à jour le temps d'exécution de la fonction de rotation existante à l'aide de AWS CloudFormation
Lorsque vous utilisez la console Secrets Manager pour activer la rotation, Secrets Manager crée AWS CloudFormation les ressources nécessaires, y compris la fonction de rotation Lambda. Si vous avez utilisé la console pour activer la rotation ou si vous avez créé la fonction de rotation à l'aide d'une AWS CloudFormation pile, vous pouvez utiliser la même AWS CloudFormation pile pour mettre à jour le temps d'exécution de la fonction de rotation.
Pour trouver la AWS CloudFormation pile qui a créé la fonction de rotation
Dans la page des détails de la fonction Lambda, sous l'onglet Configuration, choisissez Balises. Consultez la section ARN suivante : aws:cloudformation:stack-id.
Le nom de la pile est intégré dans leARN, comme indiqué dans l'exemple suivant.
ARN:
arn:aws:cloudformation:us-west-2:408736277230:stack/
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537Nom de la pile :
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
Pour mettre à jour l'exécution d'une fonction de rotation (AWS CloudFormation)
-
Dans AWS CloudFormation, recherchez la pile par son nom, puis choisissez Mettre à jour.
Si une boîte de dialogue vous recommande de mettre à jour la pile racine s'affiche, choisissez Accéder à la pile racine, puis choisissez Mettre à jour.
-
Sur la page Mettre à jour la pile, sous Préparer le modèle, choisissez Modifier dans Application Composer, puis sous Modifier le modèle dans Application Composer, cliquez sur le bouton Modifier dans Application Composer.
-
Dans Application Composer, procédez comme suit :
-
Dans le modèleJSON, pour le
SecretRotationScheduleHostedRotationLambda
, sousProperties
, sousParameters
, ajouter"runtime": "python3.9"
. -
Choisissez Mettre à jour le modèle.
-
Dans la AWS CloudFormation boîte de dialogue Continuer à, choisissez Confirmer et passez à AWS CloudFormation.
-
-
Continuez à suivre le flux de travail de la AWS CloudFormation pile, puis choisissez Soumettre.
Option 3 : pour les AWS CDK utilisateurs, mettez à niveau la CDK bibliothèque
Si vous avez utilisé la version 2.94.0 AWS CDK antérieure pour configurer la rotation de votre secret, vous pouvez mettre à jour la fonction Lambda en passant à la version 2.94.0 ou ultérieure. Pour plus d'informations, consultez le Guide du développeur AWS Cloud Development Kit (AWS CDK) v2.
AWS Lambda rotation secrète en cas d'PutSecretValue
échec
Si vous utilisez un rôle assumé ou une rotation entre comptes avec Secrets Manager et que vous trouvez un RotationFailed événement contenant le message suivant : La version
la rotation, vous devez mettre à jour votre fonction Lambda pour utiliser le paramètre. AWS CloudTrail VERSION_ID
secrète en attente de Secret n'SECRET_ARN
a pas été créée par LAMBDA_ARN.
Lambda. Supprimez AWSPENDING
le libellé intermédiaire et relancezRotationToken
Mettre à jour la fonction de rotation Lambda pour inclure RotationToken
-
Téléchargez le code de la fonction Lambda
-
Ouvrez la console Lambda
-
Dans le volet de navigation, sélectionnez Functions
-
Sélectionnez votre fonction de rotation secrète Lambda pour le nom de la fonction
-
Pour le téléchargement, choisissez l'une des options suivantes : code de fonction .zip, AWS SAM fichier, les deux
-
Cliquez sur OK pour enregistrer la fonction sur votre ordinateur local.
-
-
Modifier
Lambda_handler
Incluez le paramètre rotation_token dans l'étape create_secret pour la rotation entre comptes :
def lambda_handler(event, context): """Secrets Manager Rotation Template This is a template for creating an AWS Secrets Manager rotation lambda Args: event (dict): Lambda dictionary of event parameters. These keys must include the following: - SecretId: The secret ARN or identifier - ClientRequestToken: The ClientRequestToken of the secret version - Step: The rotation step (one of createSecret, setSecret, testSecret, or finishSecret) - RotationToken: the rotation token to put as parameter for PutSecretValue call context (LambdaContext): The Lambda runtime information Raises: ResourceNotFoundException: If the secret with the specified arn and stage does not exist ValueError: If the secret is not properly configured for rotation KeyError: If the event parameters do not contain the expected keys """ arn = event['SecretId'] token = event['ClientRequestToken'] step = event['Step'] # Add the rotation token rotation_token = event['RotationToken'] # Setup the client service_client = boto3.client('secretsmanager', endpoint_url=os.environ['SECRETS_MANAGER_ENDPOINT']) # Make sure the version is staged correctly metadata = service_client.describe_secret(SecretId=arn) if not metadata['RotationEnabled']: logger.error("Secret %s is not enabled for rotation" % arn) raise ValueError("Secret %s is not enabled for rotation" % arn) versions = metadata['VersionIdsToStages'] if token not in versions: logger.error("Secret version %s has no stage for rotation of secret %s." % (token, arn)) raise ValueError("Secret version %s has no stage for rotation of secret %s." % (token, arn)) if "AWSCURRENT" in versions[token]: logger.info("Secret version %s already set as AWSCURRENT for secret %s." % (token, arn)) return elif "AWSPENDING" not in versions[token]: logger.error("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn)) raise ValueError("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn)) # Use rotation_token if step == "createSecret": create_secret(service_client, arn, token, rotation_token) elif step == "setSecret": set_secret(service_client, arn, token) elif step == "testSecret": test_secret(service_client, arn, token) elif step == "finishSecret": finish_secret(service_client, arn, token) else: raise ValueError("Invalid step parameter")
-
Modifier le
create_secret
codeRévisez la
create_secret
fonction pour accepter et utiliser lerotation_token
paramètre :# Add rotation_token to the function def create_secret(service_client, arn, token, rotation_token): """Create the secret This method first checks for the existence of a secret for the passed in token. If one does not exist, it will generate a new secret and put it with the passed in token. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier token (string): The ClientRequestToken associated with the secret version rotation_token (string): the rotation token to put as parameter for PutSecretValue call Raises: ResourceNotFoundException: If the secret with the specified arn and stage does not exist """ # Make sure the current secret exists service_client.get_secret_value(SecretId=arn, VersionStage="AWSCURRENT") # Now try to get the secret version, if that fails, put a new secret try: service_client.get_secret_value(SecretId=arn, VersionId=token, VersionStage="AWSPENDING") logger.info("createSecret: Successfully retrieved secret for %s." % arn) except service_client.exceptions.ResourceNotFoundException: # Get exclude characters from environment variable exclude_characters = os.environ['EXCLUDE_CHARACTERS'] if 'EXCLUDE_CHARACTERS' in os.environ else '/@"\'\\' # Generate a random password passwd = service_client.get_random_password(ExcludeCharacters=exclude_characters) # Put the secret, using rotation_token service_client.put_secret_value(SecretId=arn, ClientRequestToken=token, SecretString=passwd['RandomPassword'], VersionStages=['AWSPENDING'], RotationToken=rotation_token) logger.info("createSecret: Successfully put secret for ARN %s and version %s." % (arn, token))
-
Téléchargez le code de fonction Lambda mis à jour
Après avoir mis à jour le code de votre fonction Lambda, téléchargez-le pour faire pivoter votre secret.