

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
<a name="rotate-secrets_lambda-functions"></a>

Dans[Rotation par fonction Lambda](rotate-secrets_lambda.md), une AWS Lambda fonction fait pivoter le secret. AWS Secrets Manager utilise des [étiquettes de mise en scène](whats-in-a-secret.md) pour identifier les versions secrètes lors de la rotation.

S'il AWS Secrets Manager ne fournit pas de [modèle de fonction de rotation](reference_available-rotation-templates.md) pour votre type secret, vous pouvez créer une fonction de rotation personnalisée. Suivez ces instructions lorsque vous écrivez votre fonction de rotation :

**Bonnes pratiques pour les fonctions de rotation personnalisées**
+ Utilisez le [modèle de rotation générique](reference_available-rotation-templates.md#OTHER_rotation_templates) comme point de départ.
+ Soyez prudent avec les instructions de débogage ou de journalisation. Ils peuvent écrire des informations sur Amazon CloudWatch Logs. Assurez-vous que les journaux ne contiennent pas d'informations sensibles.

  Pour des exemples d'instructions de journal, consultez le code [AWS Secrets Manager modèles de fonctions de rotation](reference_available-rotation-templates.md) source.
+ Pour des raisons de sécurité, AWS Secrets Manager seule une fonction de rotation Lambda permet à une fonction de rotation Lambda de faire pivoter directement le secret. La fonction de rotation ne peut pas appeler une autre fonction Lambda pour faire pivoter le secret.
+ Pour obtenir des conseils de débogage, consultez la section [Tester et déboguer des applications sans serveur](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-test-and-debug.html).
+ Si vous utilisez des binaires et des bibliothèques externes, par exemple pour vous connecter à une ressource, il vous incombe de les corriger et de les mettre à jour.
+ Package votre fonction de rotation et toutes les dépendances dans un fichier ZIP, tel que*my-function.zip*.

**Avertissement**  
La définition du paramètre de simultanéité provisionné sur une valeur inférieure à 10 peut entraîner un ralentissement dû à un nombre insuffisant de threads d'exécution pour la fonction Lambda. Pour plus d'informations, consultez la section [Comprendre la simultanéité réservée et la simultanéité provisionnée dans le Guide](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned) du AWS Lambda AWS Lambda développeur.

## Quatre étapes d'une fonction de rotation
<a name="rotate-secrets_lambda-functions-code"></a>

**Topics**
+ [`createSecret`: crée une nouvelle version du secret](#w2aac21c11c29c11b5)
+ [**setSecret**: modifiez les informations d'identification dans la base de données ou le service](#w2aac21c11c29c11b7)
+ [**testSecret**: Testez la nouvelle version secrète](#w2aac21c11c29c11b9)
+ [**finishSecret**: Terminez la rotation](#w2aac21c11c29c11c11)

### `createSecret`: crée une nouvelle version du secret
<a name="w2aac21c11c29c11b5"></a>

La méthode vérifie d'`createSecret`abord si un secret existe en appelant [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value)avec le mot transmis`ClientRequestToken`. S'il n'y a pas de secret, il en crée un nouveau avec [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret)le jeton comme`VersionId`. Il génère ensuite une nouvelle valeur secrète avec [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password). Ensuite, il appelle [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value)pour le stocker avec l'étiquette de mise en scène`AWSPENDING`. 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 ?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/).

**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 [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)and look at`VersionIdsToStages`.
+ 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. MySQL version 5.7 et versions ultérieures prend en charge les noms d'utilisateur jusqu'à 32 caractères, mais Secrets Manager ajoute « \$1clone » (six caractères) à la fin du nom d'utilisateur. Vous devez donc limiter le nom d'utilisateur à 26 caractères maximum.

### **setSecret**: modifiez les informations d'identification dans la base de données ou le service
<a name="w2aac21c11c29c11b7"></a>

La méthode `setSecret` 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 site Web](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) de l'*OWASP*.
+ 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), 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](https://www.postgresql.org/docs/8.0/runtime-config.html) 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`. 

### **testSecret**: Testez la nouvelle version secrète
<a name="w2aac21c11c29c11b9"></a>

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](reference_available-rotation-templates.md) du nouveau secret en utilisant l'accès en lecture. 

### **finishSecret**: Terminez la rotation
<a name="w2aac21c11c29c11c11"></a>

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'étiquette `AWSPENDING` dans le même appel d'API. 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\$1secret** permet [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage)de 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 appel d'API distinct, 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](troubleshoot_rotation.md).