Fonctions de rotation Lambda - AWS Secrets Manager

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.

Fonctions de rotation Lambda

DansRotation par fonction Lambda, une fonction Lambda fait le travail de rotation du secret. Secrets Manager utilise des étiquettes intermédiaires pour étiqueter les versions d'un secret pendant la rotation.

Si Secrets Manager ne fournit pas de modèle de fonction de rotation pour votre type de secret, vous pouvez créer une fonction de rotation. Lorsque vous écrivez une fonction de rotation, suivez les instructions pour chaque étape.

Conseils pour écrire votre propre fonction de rotation
  • Utilisez le modèle de rotation générique comme point de départ pour écrire votre propre fonction de rotation.

  • Si vous créez votre fonction, faites attention lorsque vous incluez des instructions de débogage ou de journalisation. Ces instructions peuvent entraîner l'écriture d'informations de votre fonction sur Amazon CloudWatch. Vous devez donc vous assurer que le journal n'inclut aucune information sensible collectée pendant le développement.

    Pour obtenir des exemples d'instructions de journal, consultez le code source des AWS Secrets Manager modèles de fonctions de rotation.

  • Pour des raisons de sécurité, Secrets Manager n'autorise qu'une fonction de rotation Lambda à faire pivoter le secret directement. La fonction de rotation ne peut pas appeler une deuxième fonction Lambda pour faire pivoter le secret.

  • Pour obtenir des suggestions de débogage, consultez Test et débogage d'applications sans serveur.

  • Si vous utilisez des binaires et des bibliothèques externes, par exemple pour vous connecter à une ressource, vous devez gérer l'application de correctifs et leur conservation. up-to-date

  • Enregistrez votre fonction de rotation dans un ZIP fichier my-function.zip ainsi que toutes les dépendances requises.

Quatre étapes d'une fonction de rotation

create_secret: crée une nouvelle version du secret

La méthode vérifie d'create_secretabord si un secret existe en appelant get_secret_valueavec le mot transmisClientRequestToken. S'il n'y a pas de secret, il en crée un nouveau avec create_secretle jeton commeVersionId. Il génère ensuite une nouvelle valeur secrète avec get_random_password. Ensuite, il appelle put_secret_valuepour le stocker avec l'étiquette de mise en scèneAWSPENDING. Le stockage de la nouvelle valeur de secret dans AWSPENDING permet de garantir l'idempotence. Si la rotation échoue pour une raison quelconque, vous pouvez vous référer à cette valeur de secret lors des appels suivants. Veuillez consulter Comment puis-je rendre ma fonction Lambda idempotente ?.

Conseils pour écrire votre propre fonction de rotation
  • Assurez-vous que la nouvelle valeur secrète inclut uniquement des caractères valides pour la base de données ou le service. Excluez des caractères à l'aide du paramètre ExcludeCharacters.

  • Lorsque vous testez votre fonction, utilisez le AWS CLI pour voir les étapes de version : call describe-secretand look atVersionIdsToStages.

  • Pour Amazon RDS MySQL, lors de la rotation alternée des utilisateurs, Secrets Manager crée un utilisateur cloné dont le nom ne dépasse pas 16 caractères. Vous pouvez modifier la fonction de rotation pour autoriser des noms d'utilisateur plus longs. Ma SQL version 5.7 et supérieure prend en charge les noms d'utilisateur jusqu'à 32 caractères, mais Secrets Manager ajoute « _clone » (six caractères) à la fin du nom d'utilisateur. Vous devez donc conserver le nom d'utilisateur à un maximum de 26 caractères.

set_secret: modifiez les informations d'identification dans la base de données ou le service

La méthode set_secret modifie les informations d'identification dans la base de données ou le service pour qu'elles correspondent à la nouvelle valeur secrète de la AWSPENDING version du secret.

Conseils pour écrire votre propre fonction de rotation
  • Si vous transmettez des instructions à un service qui interprète des instructions, comme une base de données, utilisez le paramétrage des requêtes. Pour plus d'informations, consultez le aide-mémoire sur le paramétrage des requêtes sur le OWASP site Web.

  • La fonction de rotation est un adjoint privilégié autorisé à accéder aux informations d'identification des clients et à les modifier à la fois dans le secret Secrets Manager et dans la ressource cible. Pour éviter une éventuelle attaque d'adjoint confus, vous devez vous assurer que les pirates ne peuvent pas utiliser la fonction afin d'accéder à d'autres ressources. Avant de mettre à jour les informations d'identification :

    • Vérifiez que les informations d'identification figurant dans la version AWSCURRENT du secret sont valides. Si les informations d'identification AWSCURRENT ne sont pas valides, abandonnez la tentative de rotation.

    • Vérifiez que les valeurs de secret AWSPENDING et AWSCURRENT concernent la même ressource. Pour un nom d'utilisateur et un mot de passe, vérifiez que les noms d'utilisateur AWSCURRENT et AWSPENDING sont identiques.

    • Vérifiez également que la ressource du service de destination est identique. Pour une base de données, vérifiez que les noms d'hôte AWSCURRENT et AWSPENDING sont identiques.

  • Dans de rares cas, vous souhaiterez peut-être personnaliser une fonction de rotation existante pour une base de données. Par exemple, avec une rotation des utilisateurs en alternance, Secrets Manager crée l'utilisateur cloné en copiant les paramètres de configuration d'exécution du premier utilisateur. Si vous souhaitez inclure d'autres attributs ou modifier ceux qui sont accordés à l'utilisateur cloné, vous devez mettre à jour le code de la fonction set_secret.

test_secret: Testez la nouvelle version secrète

Ensuite, la fonction de rotation Lambda teste la version AWSPENDING du secret en l'utilisant pour accéder à la base de données ou au service. Fonctions de rotation basées sur le test Modèles de fonctions de rotation du nouveau secret en utilisant l'accès en lecture.

finish_secret: Terminez la rotation

Enfin, la fonction de rotation Lambda déplace l'étiquette AWSCURRENT de la version secrète précédente vers cette version, qui supprime également l'AWSPENDINGétiquette lors du même API appel. Secrets Manager ajoute l'étiquette intermédiaire AWSPREVIOUS à la version précédente, de sorte que vous conservez la dernière bonne version connue du secret.

La méthode finish_secret permet update_secret_version_stagede déplacer l'étiquette intermédiaire AWSCURRENT de la version secrète précédente vers la nouvelle version secrète. Secrets Manager ajoute automatiquement l'étiquette intermédiaire AWSPREVIOUS à la version précédente, de sorte que vous conservez la dernière bonne version connue du secret.

Conseils pour écrire votre propre fonction de rotation
  • Ne le supprimez pas AWSPENDING avant ce point, et ne le supprimez pas en utilisant un API appel séparé, car cela peut indiquer à Secrets Manager que la rotation ne s'est pas terminée correctement. Secrets Manager ajoute l'étiquette intermédiaire AWSPREVIOUS à la version précédente, de sorte que vous conservez la dernière bonne version connue du secret.

Lorsque la rotation est réussie, l'étiquette AWSPENDING de transit peut être attachée à la même version que la version AWSCURRENT, ou elle peut ne pas être attachée à aucune version. Si l'étiquette de transit AWSPENDING est présente, mais n'est pas attachée à la même version AWSCURRENT, toute invocation ultérieure à la rotation suppose qu'une demande de rotation précédente est toujours en cours et renvoie une erreur. Lorsque la rotation échoue, l'étiquette AWSPENDING intermédiaire peut être attachée à une version secrète vide. Pour de plus amples informations, veuillez consulter Résolution des problèmes de rotation.