

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.

# Rotation par fonction Lambda
<a name="rotate-secrets_lambda"></a>

Pour de nombreux types de secrets, Secrets Manager utilise une AWS Lambda fonction pour mettre à jour le secret et la base de données ou le service. Pour plus d'informations sur les coûts d'utilisation d'une fonction Lambda, consultez [Tarification](intro.md#asm_pricing).

Pour certains [Secrets gérés par d'autres services](service-linked-secrets.md), vous utilisez la *rotation gérée*. Pour utiliser [Rotation gérée](rotate-secrets_managed.md), vous devez d'abord créer le secret via le service de gestion.

Pendant la rotation, Secrets Manager enregistre les événements qui indiquent l'état de rotation. Pour de plus amples informations, veuillez consulter [Enregistrez AWS Secrets Manager les événements avec AWS CloudTrail](monitoring-cloudtrail.md).

Pour faire pivoter un secret, Secrets Manager appelle une [fonction Lambda](rotate-secrets_lambda-functions.md) selon le calendrier de rotation que vous avez défini. Si vous mettez manuellement à jour votre valeur secrète alors que la rotation automatique est configurée, Secrets Manager considère qu'il s'agit d'une rotation valide lorsqu'il calcule la date de rotation suivante. 

Au cours de la rotation, Secrets Manager appelle la même fonction plusieurs fois, avec des paramètres différents à chaque fois. Secrets Manager appelle la fonction avec la structure de demande JSON de paramètres suivante : 

```
{
    "Step" : "request.type",
    "SecretId" : "string",
    "ClientRequestToken" : "string",
    "RotationToken" : "string"
}
```

**Paramètres :**
+ **Étape** — L'étape de rotation : `create_secret``set_secret`,`test_secret`, ou`finish_secret`. Pour de plus amples informations, veuillez consulter [Quatre étapes d'une fonction de rotation](rotate-secrets_lambda-functions.md#rotate-secrets_lambda-functions-code).
+ **SecretId**— L'ARN du secret à faire pivoter.
+ **ClientRequestToken**— Un identifiant unique pour la nouvelle version du secret. Cette valeur permet de garantir l'idempuissance. Pour plus d'informations, voir [PutSecretValue: ClientRequestToken](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html#SecretsManager-PutSecretValue-request-ClientRequestToken) dans la *référence de AWS Secrets Manager l'API*.
+ **RotationToken**— Un identifiant unique qui indique la source de la demande. Nécessaire pour une rotation secrète utilisant un rôle assumé ou une rotation entre comptes, dans laquelle vous faites pivoter un secret dans un compte en utilisant une fonction de rotation Lambda dans un autre compte. Dans les deux cas, la fonction de rotation assume un rôle IAM pour appeler Secrets Manager, puis Secrets Manager utilise le jeton de rotation pour valider l'identité du rôle IAM. 

Si une étape de la rotation échoue, Secrets Manager retente l'intégralité du processus de rotation plusieurs fois.

**Topics**
+ [Rotation automatique pour les secrets de base de données (console)](rotate-secrets_turn-on-for-db.md)
+ [Rotation automatique pour les secrets non liés à la base de données (console)](rotate-secrets_turn-on-for-other.md)
+ [Rotation automatique (AWS CLI)](rotate-secrets_turn-on-cli.md)
+ [Stratégies de rotation des fonctions Lambda](rotation-strategy.md)
+ [Fonctions de rotation Lambda](rotate-secrets_lambda-functions.md)
+ [Modèles de fonctions de rotation](reference_available-rotation-templates.md)
+ [Autorisations de rotation](rotating-secrets-required-permissions-function.md)
+ [Accès au réseau pour la fonction AWS Lambda de rotation](rotation-function-network-access.md)
+ [Résolution des problèmes de rotation](troubleshoot_rotation.md)

# Configurer la rotation automatique pour les secrets Amazon RDS, Amazon Aurora, Amazon Redshift ou Amazon DocumentDB
<a name="rotate-secrets_turn-on-for-db"></a>

Ce didacticiel explique comment configurer les secrets [Rotation par fonction Lambda](rotate-secrets_lambda.md) de base de données. La Rotation est le processus de mise à jour périodique d'un secret. Lorsque vous effectuez une rotation de secret, vous mettez à jour les informations d'identification dans le secret et la base de données. Dans Secrets Manager, vous pouvez définir la rotation automatique de vos secrets de base de données.

Pour configurer la rotation à l'aide de la console, vous devez d'abord choisir une stratégie de rotation. Vous configurez ensuite le secret pour la rotation, ce qui crée une fonction de rotation Lambda si vous n'en avez pas déjà une. La console définit également les autorisations pour le rôle d'exécution de la fonction Lambda. La dernière étape consiste à s'assurer que la fonction de rotation Lambda peut accéder à la fois à Secrets Manager et à votre base de données via le réseau.

**Avertissement**  
Pour activer la rotation automatique, vous devez être autorisé à créer un rôle d'exécution IAM pour la fonction de rotation Lambda et à y associer une politique d'autorisation. Vous avez besoin des deux autorisations `iam:CreateRole` et `iam:AttachRolePolicy`. L'octroi de ces autorisations permet à une identité de s'octroyer toutes les autorisations.

**Topics**
+ [Étape 1 : choisir une stratégie de rotation et (éventuellement) créer un secret de super-utilisateur](#rotate-secrets_turn-on-for-db_step1)
+ [Étape 2 : configurer la rotation et créer une fonction de rotation](#rotate-secrets_turn-on-for-db_step2)
+ [Étape 3 : (facultative) définir des conditions d'autorisation supplémentaires pour la fonction de rotation](#rotate-secrets_turn-on-for-db_step3)
+ [Étape 4 : configurer l'accès au réseau pour la fonction de rotation](#rotate-secrets_turn-on-for-db_step4)
+ [Étapes suivantes](#rotate-secrets_turn-on-for-db_stepnext)

## Étape 1 : choisir une stratégie de rotation et (éventuellement) créer un secret de super-utilisateur
<a name="rotate-secrets_turn-on-for-db_step1"></a>

Pour plus d'informations sur les stratégies proposées par Secrets Manager, consultez[Stratégies de rotation des fonctions Lambda](rotation-strategy.md).

Si vous choisissez la *stratégie des utilisateurs en alternance*, vous devez [Créez des secrets](create_secret.md) et y stocker les informations d'identification du super-utilisateur de la base de données. Vous avez besoin d'un code secret avec les informations d'identification du super-utilisateur, car la rotation clone le premier utilisateur, et la plupart des utilisateurs ne disposent pas de cette autorisation. Notez qu'Amazon RDS Proxy ne prend pas en charge la stratégie des utilisateurs alternatifs.

## Étape 2 : configurer la rotation et créer une fonction de rotation
<a name="rotate-secrets_turn-on-for-db_step2"></a>

**Pour activer la rotation d'un secret Amazon RDS, Amazon DocumentDB ou Amazon Redshift**

1. Ouvrez la console Secrets Manager à l'adresse [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Sur la page **Secrets**, choisissez votre secret.

1. Sur la page **Secret details (Détails du secret)**, dans la section **Rotation configuration (Configuration de la rotation)**, choisissez **Edit rotation (Modifier la rotation)**.

1. Dans la boîte de dialogue **Edit rotation configuration (Modifier la configuration de la rotation)**, suivez la procédure suivante :

   1. Activez **Automatic rotation** (Rotation automatique).

   1. Sous **Rotation schedule** (Planification de la rotation), saisissez votre planification dans le fuseau horaire UTC dans le **Schedule expression builder** (Générateur d'expressions de planification) ou sous la forme d'une **Schedule expression** (Expression de planification). Secrets Manager stocke votre planification sous la forme d'une expression `rate()` ou `cron()`. La fenêtre de rotation démarre automatiquement à minuit, sauf si vous spécifiez une **Start time** (Heure de début). Vous pouvez effectuer la rotation d'un secret toutes les quatre heures. Pour de plus amples informations, veuillez consulter [Horaires de rotation](rotate-secrets_schedule.md).

   1. (Facultatif) Pour **Window duration** (Durée de la fenêtre), choisissez la durée de la fenêtre pendant laquelle vous souhaitez que Secrets Manager effectue une rotation de votre secret, par exemple, **3h** pour une fenêtre de trois heures. La fenêtre ne doit pas s'étendre jusqu'à la fenêtre de rotation suivante. Si vous ne spécifiez pas **la durée de la fenêtre**, la fenêtre se ferme automatiquement au bout d'une heure si le programme de rotation est défini en heures. Pour un programme de rotation en jours, la fenêtre se ferme automatiquement à la fin de la journée. 

   1. (Facultatif) Sélectionnez **Rotate immediately when the secret is stored** (Effectuer immédiatement une rotation lorsque le secret est stocké) pour effectuer une rotation de votre secret lorsque vous enregistrez vos modifications. Si vous décochez la case, la première rotation commencera selon la planification que vous avez définie.

      Si la rotation échoue, par exemple parce que les étapes 3 et 4 ne sont pas encore terminées, Secrets Manager tente à nouveau le processus de rotation plusieurs fois.

   1. Sous **Rotation function** (Fonction de rotation), effectuez l'une des actions suivantes :
      + Sélectionnez **Create a new Lambda function** (Créer une fonction Lambda) et saisissez le nom de votre fonction. Secrets Manager ajoute `SecretsManager` au début du nom de votre fonction. Secrets Manager crée la fonction en se basant sur le [modèle](reference_available-rotation-templates.md) approprié et définit les [autorisations](rotating-secrets-required-permissions-function.md) nécessaires pour le rôle d'exécution Lambda.
      + Choisissez **Use an existing Lambda function** (Utiliser une fonction Lambda existante) pour réutiliser une fonction de rotation que vous avez utilisée pour un autre secret. Les fonctions de rotation répertoriées sous **Recommended VPC configurations** (Configurations de VPC recommandées) ont le même VPC et le même groupe de sécurité que la base de données, ce qui permet à la fonction d'accéder à la base de données.

   1. Pour la **Stratégie de rotation**, choisissez la stratégie **Utilisateur unique** ou **Utilisateurs en alternance**. Pour de plus amples informations, veuillez consulter [Étape 1 : choisir une stratégie de rotation et (éventuellement) créer un secret de super-utilisateur](#rotate-secrets_turn-on-for-db_step1).

1. Choisissez **Enregistrer**.

## Étape 3 : (facultative) définir des conditions d'autorisation supplémentaires pour la fonction de rotation
<a name="rotate-secrets_turn-on-for-db_step3"></a>

Dans la stratégie de ressources de votre fonction de rotation, nous vous recommandons d'inclure la clé de contexte [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) afin d'éviter que Lambda ne soit utilisé comme un [adjoint confus](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Pour certains AWS services, afin d'éviter toute confusion dans le scénario adjoint, il est AWS recommandé d'utiliser à la fois les clés de condition [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)et les clés de condition [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)globale. Cependant, si vous incluez la condition `aws:SourceArn` dans votre stratégie de fonction de rotation Lambda, la fonction de rotation ne peut être utilisée que pour effectuer la rotation du secret spécifié par cet ARN. Nous vous recommandons d'inclure uniquement la clé de contexte `aws:SourceAccount` afin de pouvoir utiliser la fonction de rotation pour plusieurs secrets. 

**Pour mettre à jour la stratégie de ressources de votre fonction de rotation**

1. Dans la console Secrets Manager, 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.

1. Suivez les instructions de la rubrique [Utilisation de stratégies basées sur les ressources pour Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) pour ajouter une condition `aws:sourceAccount`.

   ```
   "Condition": {
       "StringEquals": {
           "AWS:SourceAccount": "123456789012"
       }
   },
   ```

Si le secret est chiffré avec une clé KMS autre que la Clé gérée par AWS `aws/secretsmanager`, Secrets Manager accorde au rôle d'exécution Lambda l'autorisation d'utiliser la clé. Vous pouvez utiliser le [contexte de chiffrement SecretARN](security-encryption.md#security-encryption-encryption-context) pour limiter l'utilisation de la fonction de déchiffrement, de sorte que le rôle de la fonction de rotation n'ait accès que pour déchiffrer le secret qu'il est chargé de faire pivoter.

**Pour mettre à jour le rôle d'exécution de votre fonction de rotation**

1. Dans la fonction de rotation Lambda, choisissez **Configuration**, puis sous **Rôle d'exécution**, choisissez le **Nom du rôle**. 

1. Suivez les instructions de la rubrique [Modification de la stratégie d'autorisations d'un rôle](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy) pour ajouter une condition `kms:EncryptionContext:SecretARN`.

   ```
   "Condition": {
       "StringEquals": {
           "kms:EncryptionContext:SecretARN": "SecretARN"
       }
   },
   ```

## Étape 4 : configurer l'accès au réseau pour la fonction de rotation
<a name="rotate-secrets_turn-on-for-db_step4"></a>

Pour de plus amples informations, veuillez consulter [Accès au réseau pour la fonction AWS Lambda de rotation](rotation-function-network-access.md).

## Étapes suivantes
<a name="rotate-secrets_turn-on-for-db_stepnext"></a>

Consultez [Résoudre les problèmes de rotation AWS Secrets Manager](troubleshoot_rotation.md).

# Configurer la rotation automatique pour les secrets non liés à la base de données AWS Secrets Manager
<a name="rotate-secrets_turn-on-for-other"></a>

Ce didacticiel explique comment configurer les secrets autres que [Rotation par fonction Lambda](rotate-secrets_lambda.md) ceux de base de données. La Rotation est le processus de mise à jour périodique d'un secret. Lorsque vous effectuez une rotation de secret, vous mettez à jour les informations d'identification dans le secret et dans la base de données ou le service que le secret concerne.

Pour les secrets de base de données, consultez [Rotation automatique pour les secrets de base de données (console)](rotate-secrets_turn-on-for-db.md).

**Avertissement**  
Pour activer la rotation automatique, vous devez être autorisé à créer un rôle d'exécution IAM pour la fonction de rotation Lambda et à y associer une politique d'autorisation. Vous avez besoin des deux autorisations `iam:CreateRole` et `iam:AttachRolePolicy`. L'octroi de ces autorisations permet à une identité de s'octroyer toutes les autorisations.

**Topics**
+ [Étape 1 : Création d'une fonction de rotation générique](#rotate-secrets_turn-on-for-other_create)
+ [Étape 2 : écrire le code de la fonction de rotation](#rotate-secrets_turn-on-for-other_write)
+ [Étape 3 : Configuration du secret pour la rotation](#rotate-secrets_turn-on-for-other_configure)
+ [Étape 4 : Autoriser la fonction de rotation à accéder à Secrets Manager et à votre base de données ou à votre service](#rotate-secrets_turn-on-for-other_perms)
+ [Étape 5 : Autoriser Secrets Manager à invoquer la fonction de rotation](#rotate-secrets_turn-on-for-other_perms2)
+ [Étape 6 : Configuration de l'accès au réseau pour la fonction de rotation](#rotate-secrets_turn-on-for-other_network)
+ [Étapes suivantes](#rotate-secrets_turn-on-for-other_stepnext)

## Étape 1 : Création d'une fonction de rotation générique
<a name="rotate-secrets_turn-on-for-other_create"></a>

Pour commencer, créez une fonction de rotation Lambda. Il ne contiendra pas le code nécessaire pour faire pivoter votre secret, vous l'écrirez donc ultérieurement. Pour plus d'informations sur le fonctionnement d'une fonction de rotation, consultez[Fonctions de rotation Lambda](rotate-secrets_lambda-functions.md).

Dans les régions prises en charge, vous pouvez l'utiliser AWS Serverless Application Repository pour créer la fonction à partir d'un modèle. Pour obtenir une liste des régions prises en charge, consultez [AWS Serverless Application Repository FAQs](https://aws.amazon.com/serverless/serverlessrepo/faqs/). Dans d'autres régions, vous créez la fonction à partir de zéro et vous copiez le code du modèle dans la fonction.

**Pour créer une fonction de rotation générique**

1. Pour déterminer s'il AWS Serverless Application Repository est pris en charge dans votre région, consultez la section [AWS Serverless Application Repository Points de terminaison et quotas](https://docs.aws.amazon.com/general/latest/gr/serverlessrepo.html) dans le Guide de *référence AWS général*. 

1. Effectuez l’une des actions suivantes :
   + S'il AWS Serverless Application Repository est pris en charge dans votre région :

     1. Dans la console Lambda, choisissez **Applications**, puis **Create** application.

     1. Sur la page **Créer une application**, choisissez l'onglet **Application sans serveur**.

     1. Dans le champ de recherche sous **Applications publiques**, entrez**SecretsManagerRotationTemplate**.

     1. Sélectionnez **Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés**.

     1. Choisissez la vignette **SecretsManagerRotationTemplate**.

     1. Sur la page **Révision, configuration et déploiement**, dans la vignette **Paramètres de l'application**, renseignez les champs obligatoires. 
        + Pour **point de terminaison**, entrez le point de terminaison de votre région, y compris**https://**. Pour obtenir la liste des points de terminaison , consultez [AWS Secrets Manager points de terminaison](asm_access.md#endpoints).
        + **Pour placer la fonction Lambda dans un VPC, incluez les identifiants et. vpcSecurityGroup **vpcSubnetIds****

     1. Choisissez **Déployer**.
   + S'il AWS Serverless Application Repository n'est pas pris en charge dans votre région :

     1. Dans la console Lambda, choisissez **Functions**, puis **Create** function.

     1. Sur la page **Create function** (Créer une fonction), procédez de la façon suivante :

        1. Choisissez **Créer à partir de zéro**.

        1. Dans **Function name** (Nom de la fonction), saisissez un nom pour votre fonction de rotation.

        1. Pour **Runtime**, choisissez **Python 3.10**.

        1. Choisissez **Créer une fonction**.

## Étape 2 : écrire le code de la fonction de rotation
<a name="rotate-secrets_turn-on-for-other_write"></a>

Au cours de cette étape, vous écrivez le code qui met à jour le secret et le service ou la base de données auxquels le secret est destiné. Pour plus d'informations sur le fonctionnement d'une fonction de rotation, y compris des conseils sur l'écriture de votre propre fonction de rotation, consultez[Fonctions de rotation Lambda](rotate-secrets_lambda-functions.md). Vous pouvez également utiliser le [Modèles de fonctions de rotation](reference_available-rotation-templates.md) comme référence.

## Étape 3 : Configuration du secret pour la rotation
<a name="rotate-secrets_turn-on-for-other_configure"></a>

Au cours de cette étape, vous définissez un calendrier de rotation pour votre secret et connectez la fonction de rotation au secret. 

**Pour configurer la rotation et créer une fonction de rotation vide**

1. Ouvrez la console Secrets Manager à l'adresse [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Sur la page **Secrets**, choisissez votre secret.

1. Sur la page **Secret details (Détails du secret)**, dans la section **Rotation configuration (Configuration de la rotation)**, choisissez **Edit rotation (Modifier la rotation)**. Dans la boîte de dialogue **Edit rotation configuration (Modifier la configuration de la rotation)**, suivez la procédure suivante :

   1. Activez **Automatic rotation** (Rotation automatique).

   1. Sous **Rotation schedule** (Planification de la rotation), saisissez votre planification dans le fuseau horaire UTC dans le **Schedule expression builder** (Générateur d'expressions de planification) ou sous la forme d'une **Schedule expression** (Expression de planification). Secrets Manager stocke votre planification sous la forme d'une expression `rate()` ou `cron()`. La fenêtre de rotation démarre automatiquement à minuit, sauf si vous spécifiez une **Start time** (Heure de début). Vous pouvez effectuer la rotation d’un secret toutes les quatre heures. Pour de plus amples informations, veuillez consulter [Horaires de rotation](rotate-secrets_schedule.md).

   1. (Facultatif) Pour **Window duration** (Durée de la fenêtre), choisissez la durée de la fenêtre pendant laquelle vous souhaitez que Secrets Manager effectue une rotation de votre secret, par exemple, **3h** pour une fenêtre de trois heures. La fenêtre ne doit pas s'étendre jusqu'à la fenêtre de rotation suivante. Si vous ne spécifiez pas **la durée de la fenêtre**, la fenêtre se ferme automatiquement au bout d'une heure si le programme de rotation est défini en heures. Pour un programme de rotation en jours, la fenêtre se ferme automatiquement à la fin de la journée. 

   1. (Facultatif) Sélectionnez **Rotate immediately when the secret is stored** (Effectuer immédiatement une rotation lorsque le secret est stocké) pour effectuer une rotation de votre secret lorsque vous enregistrez vos modifications. Si vous décochez la case, la première rotation commencera selon la planification que vous avez définie.

   1. Sous **Fonction de rotation**, choisissez la fonction Lambda que vous avez créée à l'étape 1.

   1. Choisissez **Enregistrer**.

## Étape 4 : Autoriser la fonction de rotation à accéder à Secrets Manager et à votre base de données ou à votre service
<a name="rotate-secrets_turn-on-for-other_perms"></a>

La fonction de rotation Lambda a besoin d'une autorisation pour accéder au secret dans Secrets Manager, ainsi que pour accéder à votre base de données ou à votre service. Au cours de cette étape, vous accordez ces autorisations au rôle d'exécution Lambda. Si le secret est chiffré avec une clé KMS autre que la Clé gérée par AWS `aws/secretsmanager`, vous devez accorder au rôle d'exécution Lambda l'autorisation d'utiliser la clé. Vous pouvez utiliser le [contexte de chiffrement SecretARN](security-encryption.md#security-encryption-encryption-context) pour limiter l'utilisation de la fonction de déchiffrement, de sorte que le rôle de la fonction de rotation n'ait accès que pour déchiffrer le secret qu'il est chargé de faire pivoter. Pour obtenir des exemples de stratégie, consultez [Autorisations de rotation](rotating-secrets-required-permissions-function.md).

Pour obtenir des instructions, consultez [Rôle d'exécution Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) dans le *Guide du développeur AWS Lambda *.

## Étape 5 : Autoriser Secrets Manager à invoquer la fonction de rotation
<a name="rotate-secrets_turn-on-for-other_perms2"></a>

Pour permettre à Secrets Manager d'invoquer la fonction de rotation selon le calendrier de rotation que vous avez défini, vous devez `lambda:InvokeFunction` autoriser le responsable du service Secrets Manager dans la politique de ressources de la fonction Lambda.

Dans la stratégie de ressources de votre fonction de rotation, nous vous recommandons d'inclure la clé de contexte [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) afin d'éviter que Lambda ne soit utilisé comme un [adjoint confus](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Pour certains AWS services, afin d'éviter toute confusion dans le scénario adjoint, il est AWS recommandé d'utiliser à la fois les clés de condition [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)et les clés de condition [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)globale. Cependant, si vous incluez la condition `aws:SourceArn` dans votre stratégie de fonction de rotation Lambda, la fonction de rotation ne peut être utilisée que pour effectuer la rotation du secret spécifié par cet ARN. Nous vous recommandons d'inclure uniquement la clé de contexte `aws:SourceAccount` afin de pouvoir utiliser la fonction de rotation pour plusieurs secrets. 

Pour attacher une stratégie de ressources à une fonction Lambda, consultez [Utilisation de stratégies basées sur les ressources pour Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html).

La politique suivante permet à Secrets Manager d'appeler une fonction Lambda.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "default",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": "secretsmanager.amazonaws.com"
            },
        "Action": "lambda:InvokeFunction",
        "Condition": {
            "StringEquals": {
                "AWS:SourceAccount": "123456789012"
            }
        },
        "Resource": "arn:aws:lambda:us-east-1:123456789012:function:function-name"
    }
    ]
}
```

------

## Étape 6 : Configuration de l'accès au réseau pour la fonction de rotation
<a name="rotate-secrets_turn-on-for-other_network"></a>

Au cours de cette étape, vous autorisez la fonction de rotation à se connecter à la fois à Secrets Manager et au service ou à la base de données auxquels le secret est destiné. La fonction de rotation doit avoir accès aux deux pour pouvoir faire pivoter le secret. Consultez [Accès au réseau pour la fonction AWS Lambda de rotation](rotation-function-network-access.md).

## Étapes suivantes
<a name="rotate-secrets_turn-on-for-other_stepnext"></a>

Lorsque vous avez configuré la rotation à l'étape 3, vous définissez un calendrier pour la rotation du secret. Si la rotation échoue lorsqu'elle est planifiée, Secrets Manager essaiera de la faire plusieurs fois. Vous pouvez également démarrer une rotation immédiatement en suivant les instructions figurant dans[Mettre immédiatement un secret en rotation](rotate-secrets_now.md).

Si la rotation échoue, voir[Résolution des problèmes de rotation](troubleshoot_rotation.md).

# Configurez la rotation automatique à l'aide du AWS CLI
<a name="rotate-secrets_turn-on-cli"></a>

Ce didacticiel explique comment procéder à la configuration [Rotation par fonction Lambda](rotate-secrets_lambda.md) à l'aide du AWS CLI. Lorsque vous effectuez une rotation de secret, vous mettez à jour les informations d'identification dans le secret et dans la base de données ou le service que le secret concerne. 

Vous pouvez également configurer la rotation à l'aide de la console. Pour les secrets de base de données, consultez [Rotation automatique pour les secrets de base de données (console)](rotate-secrets_turn-on-for-db.md). Pour tout autre type de secrets, consultez [Rotation automatique pour les secrets non liés à la base de données (console)](rotate-secrets_turn-on-for-other.md).

Pour configurer la rotation à l'aide du AWS CLI, si vous faites pivoter un secret de base de données, vous devez d'abord choisir une stratégie de rotation. Si vous choisissez la stratégie des utilisateurs en alternance, vous devez stocker un secret distinct avec les informations d'identification d'un super-utilisateur de la base de données. Ensuite, vous écrivez le code de la fonction de rotation. Secrets Manager fournit des modèles de base pour écrire votre fonction. Vous créez ensuite une fonction Lambda avec votre code et définissez des autorisations pour la fonction Lambda et le rôle d'exécution Lambda. L'étape suivante consiste à s'assurer que la fonction Lambda peut accéder à la fois à Secrets Manager et à votre base de données ou à votre service via le réseau. Enfin, vous configurez le secret de la rotation.

**Topics**
+ [Prérequis pour les secrets de base de données : Choisissez une stratégie de rotation](#rotate-secrets_turn-on-cli_step1)
+ [Étape 1 : Écrire le code de la fonction de rotation](#rotate-secrets_turn-on-cli_write)
+ [Étape 2 : Création de la fonction Lambda](#w2aac21c11c25c15)
+ [Étape 3 : configurer l'accès au réseau](#w2aac21c11c25c17)
+ [Étape 4 : Configuration du secret pour la rotation](#w2aac21c11c25c19)
+ [Étapes suivantes](#w2aac21c11c25c21)

## Prérequis pour les secrets de base de données : Choisissez une stratégie de rotation
<a name="rotate-secrets_turn-on-cli_step1"></a>

Pour plus d'informations sur les stratégies proposées par Secrets Manager, consultez[Stratégies de rotation des fonctions Lambda](rotation-strategy.md).

### Option 1 : stratégie utilisateur unique
<a name="w2aac21c11c25c11b5"></a>

Si vous choisissez la *stratégie utilisateur unique*, vous pouvez passer à l'étape 1. 

### Option 2 : stratégie d'utilisation alternée
<a name="w2aac21c11c25c11b7"></a>

Si vous optez pour la *stratégie d'alternance des utilisateurs*, vous devez :
+ [Créez un secret et stockez-y](create_secret.md#create_secret_cli) les informations d'identification du superutilisateur de la base de données. Vous avez besoin d'un secret avec des informations d'identification de superutilisateur, car la rotation des utilisateurs permet de cloner le premier utilisateur, et la plupart des utilisateurs n'ont pas cette autorisation. 
+ Ajoutez l'ARN du secret du superutilisateur au secret d'origine. Pour de plus amples informations, veuillez consulter [Structure JSON des AWS Secrets Manager secrets](reference_secret_json_structure.md). 

Notez qu'Amazon RDS Proxy ne prend pas en charge la stratégie des utilisateurs alternatifs.

## Étape 1 : Écrire le code de la fonction de rotation
<a name="rotate-secrets_turn-on-cli_write"></a>

Pour effectuer la rotation d'un secret, vous avez besoin d'une fonction de rotation. Une fonction de rotation est une fonction Lambda que Secrets Manager appelle pour effectuer la rotation de votre secret. Pour de plus amples informations, veuillez consulter [Rotation par fonction Lambda](rotate-secrets_lambda.md). Au cours de cette étape, vous écrivez le code qui met à jour le secret et le service ou la base de données auxquels le secret est destiné.

Secrets Manager fournit des modèles pour les secrets de base de données Amazon RDS, Amazon Aurora, Amazon Redshift et Amazon DocumentDB dans. [Modèles de fonctions de rotation](reference_available-rotation-templates.md) 

**Pour écrire le code de la fonction de rotation**

1. Effectuez l’une des actions suivantes :
   + Consultez la liste des [modèles de fonctions de rotation](reference_available-rotation-templates.md). S'il y en a un qui correspond à votre stratégie de service et de rotation, copiez-le. 
   + Pour les autres types de secrets, vous écrivez votre propre fonction de rotation. Pour obtenir des instructions, veuillez consulter [Fonctions de rotation Lambda](rotate-secrets_lambda-functions.md). 

1. Enregistrez le fichier dans un fichier ZIP *my-function.zip* avec toutes les dépendances requises.

## Étape 2 : Création de la fonction Lambda
<a name="w2aac21c11c25c15"></a>

Au cours de cette étape, vous allez créer la fonction Lambda à l'aide du fichier ZIP que vous avez créé à l'étape 1. Vous définissez également le [rôle d'exécution Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), qui est le rôle que Lambda assume lorsque la fonction est invoquée.

**Pour créer une fonction de rotation Lambda et un rôle d'exécution**

1. Créez une stratégie d'approbation pour le rôle d'exécution Lambda et enregistrez-la dans un fichier JSON. Pour plus d’informations et d’exemples, consultez [Autorisations de rôle d'exécution de la fonction de rotation Lambda pour AWS Secrets Manager](rotating-secrets-required-permissions-function.md). La stratégie doit :
   + autoriser le rôle à appeler les opérations Secrets Manager sur le secret ; 
   + Autorisez le rôle à appeler le service auquel le secret est destiné, par exemple, pour créer un nouveau mot de passe. 

1. Créez le rôle d'exécution Lambda et appliquez la politique de confiance que vous avez créée à l'étape précédente en appelant. [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)

   ```
   aws iam create-role \
       --role-name rotation-lambda-role \
       --assume-role-policy-document file://trust-policy.json
   ```

1. Créez la fonction Lambda à partir du fichier ZIP en appelant [https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html).

   ```
   aws lambda create-function \
     --function-name my-rotation-function \
     --runtime python3.7 \
     --zip-file fileb://my-function.zip \
     --handler .handler \
     --role arn:aws:iam::123456789012:role/service-role/rotation-lambda-role
   ```

1. Définissez une stratégie de ressources sur la fonction Lambda afin de permettre à Secrets Manager de l'invoquer en appelant [https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html).

   ```
   aws lambda add-permission \
     --function-name my-rotation-function \
     --action lambda:InvokeFunction \
     --statement-id SecretsManager \
     --principal secretsmanager.amazonaws.com \
     --source-account 123456789012
   ```

## Étape 3 : configurer l'accès au réseau
<a name="w2aac21c11c25c17"></a>

Pour de plus amples informations, veuillez consulter [Accès au réseau pour la fonction AWS Lambda de rotation](rotation-function-network-access.md).

## Étape 4 : Configuration du secret pour la rotation
<a name="w2aac21c11c25c19"></a>

Pour activer la rotation automatique de votre secret, appelez [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html). Vous pouvez définir une planification de rotation avec une expression de planification `cron()` ou `rate()`, et définir la durée d'une fenêtre de rotation. Pour de plus amples informations, veuillez consulter [Horaires de rotation](rotate-secrets_schedule.md).

```
aws secretsmanager rotate-secret \
    --secret-id MySecret \
    --rotation-lambda-arn arn:aws:lambda:Region:123456789012:function:my-rotation-function \
    --rotation-rules "{\"ScheduleExpression\": \"cron(0 16 1,15 * ? *)\", \"Duration\": \"2h\"}"
```

## Étapes suivantes
<a name="w2aac21c11c25c21"></a>

Consultez [Résoudre les problèmes de rotation AWS Secrets Manager](troubleshoot_rotation.md).

# Stratégies de rotation des fonctions Lambda
<a name="rotation-strategy"></a>

En [Rotation par fonction Lambda](rotate-secrets_lambda.md) ce qui concerne les secrets de base de données, Secrets Manager propose deux stratégies de rotation.

## Stratégie de rotation : utilisateur unique
<a name="rotating-secrets-one-user-one-password"></a>

Cette stratégie met à jour les informations d'identification d'un utilisateur dans un seul secret. Pour les instances Amazon RDS Db2, étant donné que les utilisateurs ne peuvent pas modifier leurs propres mots de passe, vous devez fournir des informations d'identification d'administrateur dans un secret distinct. **Il s'agit de la stratégie de rotation la plus simple, qui convient à la plupart des cas d'utilisation.** Nous vous recommandons en particulier d'utiliser cette stratégie pour les informations d'identification des utilisateurs ponctuels (ad hoc) ou interactifs.

Lorsque le secret effectue une rotation, les connexions de base de données ouvertes ne sont pas supprimées. Pendant la rotation, peu de temps s'écoule entre le moment où le mot de passe dans la base de données change et le moment où le secret est mis à jour. Pendant cette durée, le risque que la base de données refuse les appels utilisant les informations d'identification mises en rotation est faible. Pour pallier ce risque, vous pouvez utiliser une [stratégie de nouvelle tentative appropriée](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/). Après la rotation, les nouvelles connexions utilisent les nouvelles informations d'identification. 

## Stratégie de rotation : utilisateurs en alternance
<a name="rotating-secrets-two-users"></a>

Cette stratégie met à jour les informations d'identification de deux utilisateurs dans un seul secret. Vous créez le premier utilisateur et lors de la première rotation, la fonction de rotation le clone pour créer le second utilisateur. Chaque fois que le secret effectue une rotation, la fonction de rotation alterne l'utilisateur dont elle met à jour le mot de passe. Comme la plupart des utilisateurs n'ont pas l'autorisation de se cloner eux-mêmes, vous devez fournir les informations d'identification pour un `superuser` dans un autre secret. Nous recommandons d'utiliser la stratégie de rotation d'utilisateur unique lorsque les utilisateurs clonés de votre base de données ne disposent pas des mêmes autorisations que l'utilisateur d'origine, ainsi que pour les informations d'identification des utilisateurs ponctuels (ad hoc) ou interactifs.

Cette stratégie est appropriée pour les bases de données avec modèles d'autorisations où un rôle possède les tables de base de données et un second rôle est autorisé à accéder aux tables de la base de données. Elle convient également aux applications qui requièrent une haute disponibilité. Si une application récupère le secret pendant la rotation, elle obtient quand même un ensemble d'informations d'identification valide. Après la rotation, les informations d'identification `user` et `user_clone` sont valides. Il y a même moins de chances que les applications obtiennent un refus pendant ce type de rotation qu'avec la rotation utilisateur unique. Si la base de données est hébergée sur une batterie de serveurs où la propagation de la modification du mot de passe à tous les serveurs prend du temps, la base de données risque de refuser les appels utilisant les nouvelles informations d'identification. Pour pallier ce risque, vous pouvez utiliser une [stratégie de nouvelle tentative appropriée](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/).

Secrets Manager crée l'utilisateur cloné avec les mêmes autorisations que l'utilisateur d'origine. Si vous modifiez les autorisations de l'utilisateur d'origine après la création du clone, vous devez également modifier les autorisations de l'utilisateur cloné.

Par exemple, si vous créez un secret avec les informations d'identification d'un utilisateur de base de données, le secret contient une version avec ces informations d'identification.

 ![\[The secret contains one secret version labeled AWSCURRENT. The username for the AWSCURRENT version is MyUser.\]](http://docs.aws.amazon.com/fr_fr/secretsmanager/latest/userguide/images/AlternatingUsers1.png) 

**Première rotation** — La fonction de rotation crée un clone de votre utilisateur avec un mot de passe généré, et ces informations d'identification deviennent la version secrète actuelle.

 ![\[The secret contains two secret versions, one labeled AWSCURRENT and one labeled AWSPREVIOUS. The username for the AWSCURRENT version is MyUser_clone.\]](http://docs.aws.amazon.com/fr_fr/secretsmanager/latest/userguide/images/AlternatingUsers2.png) 

**Deuxième rotation** — La fonction de rotation met à jour le mot de passe de l'utilisateur d'origine.

 ![\[The secret contains two secret versions, one labeled AWSCURRENT and one labeled AWSPREVIOUS. The username for the AWSCURRENT version is MyUser.\]](http://docs.aws.amazon.com/fr_fr/secretsmanager/latest/userguide/images/AlternatingUsers3.png) 

**Troisième rotation** — La fonction de rotation met à jour le mot de passe de l'utilisateur cloné.

 ![\[The secret contains two secret versions, one labeled AWSCURRENT and one labeled AWSPREVIOUS. The username for the AWSCURRENT version is MyUser_clone.\]](http://docs.aws.amazon.com/fr_fr/secretsmanager/latest/userguide/images/AlternatingUsers4.png) 

# 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).

# AWS Secrets Manager modèles de fonctions de rotation
<a name="reference_available-rotation-templates"></a>

AWS Secrets Manager fournit un ensemble de modèles de fonctions de rotation qui aident à automatiser la gestion sécurisée des informations d'identification pour différents systèmes et services de base de données. Les modèles sont des fonctions ready-to-use Lambda qui mettent en œuvre les meilleures pratiques en matière de rotation des informations d'identification, vous aidant ainsi à maintenir votre niveau de sécurité sans intervention manuelle.

Les modèles prennent en charge deux stratégies de rotation principales :
+ *Rotation mono-utilisateur* qui met à jour les informations d'identification d'un seul utilisateur.
+ *Rotation des utilisateurs alternés* qui permet de maintenir deux utilisateurs distincts afin d'éliminer les temps d'arrêt lors des changements d'informations d'identification.

Secrets Manager fournit également un modèle générique qui sert de point de départ pour tout type de secret.

Pour utiliser les modèles, consultez :
+ [Rotation automatique pour les secrets de base de données (console)](rotate-secrets_turn-on-for-db.md)
+ [Rotation automatique pour les secrets non liés à la base de données (console)](rotate-secrets_turn-on-for-other.md)

Pour écrire votre propre fonction de rotation, voir [Écrire une fonction de rotation](rotate-secrets_lambda-functions.md).

**Contents**
+ [Amazon RDS et Amazon Aurora](#RDS_rotation_templates)
  + [Amazon RDS Db2 pour un utilisateur unique](#sar-template-db2-singleuser)
  + [Amazon RDS Db2 pour des utilisateurs en alternance](#sar-template-db2-multiuser)
  + [Amazon RDS MariaDB pour un utilisateur unique](#sar-template-mariadb-singleuser)
  + [Amazon RDS MariaDB pour des utilisateurs en alternance](#sar-template-mariadb-multiuser)
  + [Amazon RDS et Amazon Aurora MySQL pour un utilisateur unique](#sar-template-mysql-singleuser)
  + [Utilisateurs en alternance Amazon RDS et Amazon Aurora MySQL](#sar-template-mysql-multiuser)
  + [Amazon RDS Oracle pour un utilisateur unique](#sar-template-oracle-singleuser)
  + [Amazon RDS Oracle pour des utilisateurs en alternance](#sar-template-oracle-multiuser)
  + [Amazon RDS et Amazon Aurora PostgreSQL pour un utilisateur unique](#sar-template-postgre-singleuser)
  + [Amazon RDS et Amazon Aurora PostgreSQL pour des utilisateurs en alternance](#sar-template-postgre-multiuser)
  + [Amazon RDS Microsoft (utilisateur SQLServer unique)](#sar-template-sqlserver-singleuser)
  + [Utilisateurs SQLServer alternatifs d'Amazon RDS Microsoft](#sar-template-sqlserver-multiuser)
+ [Amazon DocumentDB (compatible avec MongoDB)](#NON-RDS_rotation_templates)
  + [Amazon DocumentDB pour un utilisateur unique](#sar-template-mongodb-singleuser)
  + [Amazon DocumentDB pour des utilisateurs en alternance](#sar-template-mongodb-multiuser)
+ [Amazon Redshift](#template-redshift)
  + [Amazon Redshift pour un utilisateur unique](#sar-template-redshift-singleuser)
  + [Amazon Redshift pour des utilisateurs en alternance](#sar-template-redshift-multiuser)
+ [Amazon Timestream pour InfluxDB](#template-TimeStream)
  + [Amazon Timestream pour InfluxDB en mode mono-utilisateur](#template-TimeStream-singleuser)
  + [Amazon Timestream pour les utilisateurs alternatifs d'InfluxDB](#template-TimeStream-multiuser)
+ [Amazon ElastiCache](#template-ELC)
+ [Active Directory](#template-AD)
  + [Informations d'identification Active Directory](#template-AD-password)
  + [Tab clavier Active Directory](#template-AD-keytab)
+ [Autres types de secrets](#OTHER_rotation_templates)

## Amazon RDS et Amazon Aurora
<a name="RDS_rotation_templates"></a>

### Amazon RDS Db2 pour un utilisateur unique
<a name="sar-template-db2-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSDb2 RotationSingleUser
+ **Stratégie de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Structure `SecretString` : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSDb2RotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSDb2RotationSingleUser/lambda_function.py)
+ **Dépendance : **[python-ibmdb](https://github.com/ibmdb/python-ibmdb)

### Amazon RDS Db2 pour des utilisateurs en alternance
<a name="sar-template-db2-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSDb2 RotationMultiUser
+ **Stratégie de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **Structure `SecretString` : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSDb2RotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSDb2RotationMultiUser/lambda_function.py)
+ **Dépendance : **[python-ibmdb](https://github.com/ibmdb/python-ibmdb)

### Amazon RDS MariaDB pour un utilisateur unique
<a name="sar-template-mariadb-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSMaria DBRotation SingleUser
+ **Stratégie de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Structure `SecretString` : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSMariaDBRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSMariaDBRotationSingleUser/lambda_function.py)
+ **Dépendance :** PyMy SQL 1.0.2. Si vous utilisez le mot de passe sha256 pour l'authentification, PyMy SQL [rsa]. Pour plus d'informations sur l'utilisation de packages avec du code compilé dans un environnement d'exécution Lambda, voir [Comment ajouter des packages Python avec des fichiers binaires compilés à mon package de déploiement et rendre le package compatible avec](https://repost.aws/knowledge-center/lambda-python-package-compatible) Lambda ? dans le *AWS Knowledge Center*.

### Amazon RDS MariaDB pour des utilisateurs en alternance
<a name="sar-template-mariadb-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSMaria DBRotation MultiUser
+ **Stratégie de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **Structure `SecretString` : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSMariaDBRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSMariaDBRotationMultiUser/lambda_function.py)
+ **Dépendance :** PyMy SQL 1.0.2. Si vous utilisez le mot de passe sha256 pour l'authentification, PyMy SQL [rsa]. Pour plus d'informations sur l'utilisation de packages avec du code compilé dans un environnement d'exécution Lambda, voir [Comment ajouter des packages Python avec des fichiers binaires compilés à mon package de déploiement et rendre le package compatible avec](https://repost.aws/knowledge-center/lambda-python-package-compatible) Lambda ? dans le *AWS Knowledge Center*.

### Amazon RDS et Amazon Aurora MySQL pour un utilisateur unique
<a name="sar-template-mysql-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSMy SQLRotation SingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSMySQLRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSMySQLRotationSingleUser/lambda_function.py)
+ **Dépendance :** PyMy SQL 1.0.2. Si vous utilisez le mot de passe sha256 pour l'authentification, PyMy SQL [rsa]. Pour plus d'informations sur l'utilisation de packages avec du code compilé dans un environnement d'exécution Lambda, voir [Comment ajouter des packages Python avec des fichiers binaires compilés à mon package de déploiement et rendre le package compatible avec](https://repost.aws/knowledge-center/lambda-python-package-compatible) Lambda ? dans le *AWS Knowledge Center*.

### Utilisateurs en alternance Amazon RDS et Amazon Aurora MySQL
<a name="sar-template-mysql-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSMy SQLRotation MultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSMySQLRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSMySQLRotationMultiUser/lambda_function.py)
+ **Dépendance :** PyMy SQL 1.0.2. Si vous utilisez le mot de passe sha256 pour l'authentification, PyMy SQL [rsa]. Pour plus d'informations sur l'utilisation de packages avec du code compilé dans un environnement d'exécution Lambda, voir [Comment ajouter des packages Python avec des fichiers binaires compilés à mon package de déploiement et rendre le package compatible avec](https://repost.aws/knowledge-center/lambda-python-package-compatible) Lambda ? dans le *AWS Knowledge Center*.

### Amazon RDS Oracle pour un utilisateur unique
<a name="sar-template-oracle-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSOracle RotationSingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSOracleRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSOracleRotationSingleUser/lambda_function.py)
+ **Dépendance :** [python-oracledb 2.4.1](https://github.com/oracle/python-oracledb)

### Amazon RDS Oracle pour des utilisateurs en alternance
<a name="sar-template-oracle-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSOracle RotationMultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSOracleRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSOracleRotationMultiUser/lambda_function.py)
+ **Dépendance :** [python-oracledb 2.4.1](https://github.com/oracle/python-oracledb)

### Amazon RDS et Amazon Aurora PostgreSQL pour un utilisateur unique
<a name="sar-template-postgre-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSPostgre SQLRotation SingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSPostgreSQLRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSPostgreSQLRotationSingleUser/lambda_function.py)
+ **Dépendance :** PyGre SQL 5.2.5

### Amazon RDS et Amazon Aurora PostgreSQL pour des utilisateurs en alternance
<a name="sar-template-postgre-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSPostgre SQLRotation MultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSPostgreSQLRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSPostgreSQLRotationMultiUser/lambda_function.py)
+ **Dépendance :** PyGre SQL 5.2.5

### Amazon RDS Microsoft (utilisateur SQLServer unique)
<a name="sar-template-sqlserver-singleuser"></a>
+ **Nom du modèle :** SecretsManager RDSSQLServer RotationSingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSSQLServerRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSSQLServerRotationSingleUser/lambda_function.py)
+ **Dépendance : **Pymssql 2.2.2

### Utilisateurs SQLServer alternatifs d'Amazon RDS Microsoft
<a name="sar-template-sqlserver-multiuser"></a>
+ **Nom du modèle :** SecretsManager RDSSQLServer RotationMultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon RDS et Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRDSSQLServerRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRDSSQLServerRotationMultiUser/lambda_function.py)
+ **Dépendance : **Pymssql 2.2.2

## Amazon DocumentDB (compatible avec MongoDB)
<a name="NON-RDS_rotation_templates"></a>

### Amazon DocumentDB pour un utilisateur unique
<a name="sar-template-mongodb-singleuser"></a>
+ **Nom du modèle :** SecretsManagerMongo DBRotation SingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon DocumentDB](reference_secret_json_structure.md#reference_secret_json_structure_docdb).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerMongoDBRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerMongoDBRotationSingleUser/lambda_function.py)
+ **Dépendance :** PyMongo 4.2.0

### Amazon DocumentDB pour des utilisateurs en alternance
<a name="sar-template-mongodb-multiuser"></a>
+ **Nom du modèle :** SecretsManagerMongo DBRotation MultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon DocumentDB](reference_secret_json_structure.md#reference_secret_json_structure_docdb).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerMongoDBRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerMongoDBRotationMultiUser/lambda_function.py)
+ **Dépendance :** PyMongo 4.2.0

## Amazon Redshift
<a name="template-redshift"></a>

### Amazon Redshift pour un utilisateur unique
<a name="sar-template-redshift-singleuser"></a>
+ **Nom du modèle :** SecretsManagerRedshiftRotationSingleUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateur unique](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon Redshift](reference_secret_json_structure.md#reference_secret_json_structure_RS).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRedshiftRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRedshiftRotationSingleUser/lambda_function.py)
+ **Dépendance :** PyGre SQL 5.2.5

### Amazon Redshift pour des utilisateurs en alternance
<a name="sar-template-redshift-multiuser"></a>
+ **Nom du modèle :** SecretsManagerRedshiftRotationMultiUser
+ **Stratégies de rotation : ** [Stratégie de rotation : utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users).
+ **`SecretString`Structure attendue : ** [Informations d'identification Amazon Redshift](reference_secret_json_structure.md#reference_secret_json_structure_RS).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRedshiftRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRedshiftRotationMultiUser/lambda_function.py)
+ **Dépendance :** PyGre SQL 5.2.5

## Amazon Timestream pour InfluxDB
<a name="template-TimeStream"></a>

*Pour utiliser ces modèles, consultez [Comment Amazon Timestream pour InfluxDB utilise les secrets dans](https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-security-db-secrets.html) le manuel du développeur Amazon Timestream.*

### Amazon Timestream pour InfluxDB en mode mono-utilisateur
<a name="template-TimeStream-singleuser"></a>
+ **Nom du modèle :** SecretsManager  Influx DBRotation SingleUser
+ **`SecretString`Structure attendue : ** [Structure secrète d'Amazon Timestream pour InfluxDB](reference_secret_json_structure.md#reference_secret_json_structure_TIME).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerInfluxDBRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerInfluxDBRotationSingleUser/lambda_function.py)
+ **Dépendance :** client python InfluxDB 2.0

### Amazon Timestream pour les utilisateurs alternatifs d'InfluxDB
<a name="template-TimeStream-multiuser"></a>
+ **Nom du modèle :** SecretsManagerInflux DBRotation MultiUser
+ **`SecretString`Structure attendue : ** [Structure secrète d'Amazon Timestream pour InfluxDB](reference_secret_json_structure.md#reference_secret_json_structure_TIME).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerInfluxDBRotationMultiUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerInfluxDBRotationMultiUser/lambda_function.py)
+ **Dépendance :** client python InfluxDB 2.0

## Amazon ElastiCache
<a name="template-ELC"></a>

Pour utiliser ce modèle, consultez [Rotation automatique des mots de passe pour les utilisateurs](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/User-Secrets-Manager.html) dans le *guide de ElastiCache l'utilisateur Amazon*.
+ **Nom du modèle :** SecretsManagerElasticacheUserRotation
+ **`SecretString`Structure attendue : ** [ElastiCache Informations d'identification Amazon](reference_secret_json_structure.md#reference_secret_json_structure_ELC).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerElasticacheUserRotation/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerElasticacheUserRotation/lambda_function.py)

## Active Directory
<a name="template-AD"></a>

### Informations d'identification Active Directory
<a name="template-AD-password"></a>
+ **Nom du modèle :** SecretsManagerActiveDirectoryRotationSingleUser
+ **`SecretString`Structure attendue : ** [Informations d'identification Active Directory](reference_secret_json_structure.md#reference_secret_json_structure_AD).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerActiveDirectoryRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerActiveDirectoryRotationSingleUser/lambda_function.py)

### Tab clavier Active Directory
<a name="template-AD-keytab"></a>
+ **Nom du modèle :** SecretsManagerActiveDirectoryAndKeytabRotationSingleUser
+ **`SecretString`Structure attendue : ** [Informations d'identification Active Directory](reference_secret_json_structure.md#reference_secret_json_structure_AD).
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerActiveDirectoryAndKeytabRotationSingleUser/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerActiveDirectoryAndKeytabRotationSingleUser/lambda_function.py)
+ **Dépendances : msktutil**

## Autres types de secrets
<a name="OTHER_rotation_templates"></a>

Secrets Manager fournit ce modèle comme point de départ pour créer une fonction de rotation pour tout type de secret.
+ **Nom du modèle :** SecretsManagerRotationTemplate
+ **Code source : https://github.com/aws-samples/** [aws-secrets-manager-rotation- lambdas/tree/master/SecretsManagerRotationTemplate/lambda \$1function.py](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/tree/master/SecretsManagerRotationTemplate/lambda_function.py)

# Autorisations de rôle d'exécution de la fonction de rotation Lambda pour AWS Secrets Manager
<a name="rotating-secrets-required-permissions-function"></a>

En effet[Rotation par fonction Lambda](rotate-secrets_lambda.md), lorsque Secrets Manager utilise une fonction Lambda pour faire pivoter un secret, Lambda assume un [rôle d'exécution IAM](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) et fournit ces informations d'identification au code de la fonction Lambda. Pour obtenir des instructions sur la configuration de la rotation automatique, voir : 
+ [Rotation automatique pour les secrets de base de données (console)](rotate-secrets_turn-on-for-db.md)
+ [Rotation automatique pour les secrets non liés à la base de données (console)](rotate-secrets_turn-on-for-other.md)
+ [Rotation automatique (AWS CLI)](rotate-secrets_turn-on-cli.md)

Les exemples suivants présentent des stratégies en ligne pour les rôles d'exécution de fonctions de rotation Lambda. Pour créer un rôle d'exécution et attacher une politique d'autorisations, consultez [Rôle d'exécution AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html).

**Topics**
+ [Stratégie pour un rôle d'exécution de fonction de rotation Lambda](#rotating-secrets-required-permissions-function-example)
+ [Déclaration de stratégie pour une clé gérée par le client](#rotating-secrets-required-permissions-function-cust-key-example)
+ [Déclaration de stratégie pour une stratégie d'utilisateurs en alternance](#rotating-secrets-required-permissions-function-alternating-example)

## Stratégie pour un rôle d'exécution de fonction de rotation Lambda
<a name="rotating-secrets-required-permissions-function-example"></a>

L'exemple de stratégie suivant autorise la fonction de rotation à :
+ Exécutez les opérations de Secrets Manager pour*SecretARN*.
+ Créer un nouveau mot de passe.
+ Mettre en place la configuration requise si votre base de données ou votre service s'exécute dans un VPC. Consultez [Configuration d'une fonction Lambda pour accéder aux ressources d'un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword"
            ],
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

## Déclaration de stratégie pour une clé gérée par le client
<a name="rotating-secrets-required-permissions-function-cust-key-example"></a>

Si le secret est chiffré avec une clé KMS autre que la Clé gérée par AWS `aws/secretsmanager`, vous devez accorder au rôle d'exécution Lambda l'autorisation d'utiliser la clé. Vous pouvez utiliser le [contexte de chiffrement SecretARN](security-encryption.md#security-encryption-encryption-context) pour limiter l'utilisation de la fonction de déchiffrement, de sorte que le rôle de la fonction de rotation n'ait accès que pour déchiffrer le secret qu'il est chargé de faire pivoter. L'exemple suivant montre une instruction à ajouter à la stratégie de rôle d'exécution pour déchiffrer le secret à l'aide de la clé KMS.

```
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "KMSKeyARN",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:SecretARN": "SecretARN"
                }
            }
        }
```

Pour utiliser la fonction de rotation pour plusieurs secrets chiffrés à l'aide d'une clé gérée par le client, ajoutez une instruction comme dans l'exemple suivant pour autoriser le rôle d'exécution à déchiffrer le secret.

```
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "KMSKeyARN",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:SecretARN": [
                        "arn1",
                        "arn2"
                    ]
                }
            }
        }
```

## Déclaration de stratégie pour une stratégie d'utilisateurs en alternance
<a name="rotating-secrets-required-permissions-function-alternating-example"></a>

Pour plus d'informations sur la *stratégie de rotation des utilisateurs en alternance*, consultez [Stratégies de rotation des fonctions Lambda](rotation-strategy.md).

Pour un secret contenant des informations d'identification Amazon RDS, si vous utilisez la stratégie des utilisateurs alternatifs et que le secret du superutilisateur est [géré par Amazon RDS](rotate-secrets_managed.md), vous devez également autoriser la fonction de rotation à appeler en lecture seule APIs sur Amazon RDS afin qu'elle puisse obtenir les informations de connexion à la base de données. Nous vous recommandons de joindre la politique AWS gérée [Amazon RDSRead OnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSReadOnlyAccess.html).

L'exemple de politique suivant autorise la fonction à :
+ Exécutez les opérations de Secrets Manager pour*SecretARN*.
+ Récupérez les informations d'identification dans le secret du super-utilisateur. Secrets Manager utilise les informations d'identification du secret du super-utilisateur pour mettre à jour les informations d'identification dans le secret faisant l'objet d'une rotation.
+ Créer un nouveau mot de passe.
+ Mettre en place la configuration requise si votre base de données ou votre service s'exécute dans un VPC. Pour de plus amples informations, veuillez consulter [Configuration d'une fonction Lambda pour accéder aux ressources d'accès dans un VPC](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword"
            ],
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

# Accès au réseau pour la fonction AWS Lambda de rotation
<a name="rotation-function-network-access"></a>

En [Rotation par fonction Lambda](rotate-secrets_lambda.md) effet, lorsque Secrets Manager utilise une fonction Lambda pour faire pivoter un secret, la fonction de rotation Lambda doit pouvoir accéder au secret. Si votre secret contient des informations d'identification, la fonction Lambda doit également être en mesure d'accéder à la source de ces informations d'identification, telle qu'une base de données ou un service.

**Pour accéder à un secret**  
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](asm_access.md#endpoints).  
Si votre fonction Lambda s'exécute dans un VPC qui ne dispose pas d'un accès Internet, nous vous recommandons de configurer les points de terminaison privés du service Secrets Manager dans votre VPC. Votre VPC peut 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 [Points de terminaison de VPC (AWS PrivateLink)](vpc-endpoint-overview.md).  
Vous pouvez accorder à votre fonction Lambda un accès au point de terminaison public Secrets Manager en ajoutant une [Passerelle NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) ou une [passerelle Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) à votre VPC, ce qui permet au trafic de votre VPC d'atteindre le point de terminaison public. En procédant ainsi, votre VPC est exposé à certains risques dans la mesure où une adresse IP pour la passerelle peut être attaquée depuis le réseau Internet public.

**(Facultatif) Pour accéder à la base de données ou au service**  
Pour les secrets tels que les clés d'API, il n'y a pas de base de données ou de service source à mettre à jour en même temps que le secret.  
Si votre base de données ou votre service s'exécute sur une EC2 instance Amazon dans un VPC, nous vous recommandons de configurer votre fonction Lambda pour qu'elle s'exécute dans le même VPC. La fonction de rotation peut alors communiquer directement avec votre service. Pour plus d'informations, consultez [Configuring VPC access (Configuration de l'accès VPC)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring).  
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. 

# Résoudre les problèmes de rotation AWS Secrets Manager
<a name="troubleshoot_rotation"></a>

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](rotate-secrets_lambda.md). 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](rotate-secrets_managed.md).

**Topics**
+ [Comment résoudre les défaillances de rotation secrètes dans les fonctions AWS Lambda](#troubleshooting-secret-rotation-failures)
+ [Aucune activité après « Found credentials in environment variables » (Informations d'identification trouvées dans les variables d'environnement)](#troubleshoot_rotation_timing-out)
+ [Aucune activité après « createSecret »](#troubleshoot_rotation_createSecret)
+ [Erreur : « L'accès à KMS n'est pas autorisé »](#troubleshoot_rotation_kms-key)
+ [Erreur : « Key is missing from secret JSON » (Le fichier JSON secret ne contient pas de clé)](#tshoot-lambda-mismatched-secretvalue)
+ [Erreur : « SetSecret: Unable to log into database » (SetSecret : connexion à la base de données impossible)](#troubleshoot_rotation_setSecret)
+ [Erreur : « Impossible d'importer le module ''lambda\$1function'' »](#tshoot-python-version)
+ [Mise à jour d'une fonction de rotation existante depuis Python 3.7 vers 3.9](#troubleshoot_rotation_python39)
+ [Mettre à niveau une fonction de rotation existante de Python 3.9 à 3.10](#troubleshoot_rotation_python_310)
+ [AWS Lambda rotation secrète en cas d'`PutSecretValue`échec](#troubleshoot_rotation_putsecretvalue)
+ [Erreur : « Erreur lors de l'exécution de Lambda *<arn>* pendant l'*<a rotation>*étape »](#concurrency-related-failures)

## Comment résoudre les défaillances de rotation secrètes dans les fonctions AWS Lambda
<a name="troubleshooting-secret-rotation-failures"></a>

Si vous rencontrez des échecs de rotation secrets avec vos fonctions Lambda, suivez les étapes ci-dessous pour résoudre le problème.

### Causes possibles :
<a name="possible-causes"></a>
+ Exécutions simultanées insuffisantes pour la fonction Lambda
+ Conditions de course dues aux multiples appels d'API pendant la rotation
+ Logique de fonction Lambda incorrecte
+ Problèmes de mise en réseau entre la fonction Lambda et la base de données

### Étapes générales de résolution des problèmes
<a name="general-troubleshooting-steps"></a>

1. Analyser CloudWatch les journaux :
   + Recherchez des messages d'erreur spécifiques ou des comportements inattendus dans les journaux des fonctions Lambda
   + Vérifiez que toutes les étapes de rotation (**CreateSecret****SetSecret**,**TestSecret**,,**FinishSecret**) sont tentées

1. Passez en revue les appels d'API pendant la rotation :
   + Évitez d'effectuer des appels d'API mutants sur le secret pendant la rotation Lambda
   + Assurez-vous qu'il n'y a aucune condition raciale entre les **PutSecretValue** appels **RotateSecret** et

1. Vérifiez la logique de la fonction Lambda :
   + Vérifiez que vous utilisez le dernier AWS exemple de code pour la rotation secrète
   + Si vous utilisez un code personnalisé, consultez-le pour gérer correctement toutes les étapes de rotation

1. Vérifiez la configuration du réseau :
   + Vérifiez que les règles du groupe de sécurité autorisent la fonction Lambda à accéder à la base de données
   + Garantir un accès approprié au point de terminaison VPC ou au point de terminaison public pour Secrets Manager

1. Testez les versions secrètes :
   + Vérifiez que la AWSCURRENT version du secret autorise l'accès à la base de données
   + Vérifiez si AWSPREVIOUS nos AWSPENDING versions sont valides

1. Effacer les rotations en attente :
   + Si la rotation échoue systématiquement, effacez l'étiquette de AWSPENDING mise en scène et réessayez la rotation

1. Vérifiez les paramètres de simultanéité Lambda :
   + Vérifiez que les paramètres de simultanéité sont adaptés à votre charge de travail
   + Si vous suspectez des problèmes de simultanéité, consultez la section « Résolution des problèmes de rotation liés à la simultanéité »

## Aucune activité après « Found credentials in environment variables » (Informations d'identification trouvées dans les variables d'environnement)
<a name="troubleshoot_rotation_timing-out"></a>

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](asm_access.md#endpoints).

Si votre fonction Lambda s'exécute dans un VPC qui ne dispose pas d'un accès Internet, nous vous recommandons de configurer les points de terminaison privés du service Secrets Manager dans votre VPC. Votre VPC peut 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 [Points de terminaison de VPC (AWS PrivateLink)](vpc-endpoint-overview.md).

Vous pouvez accorder à votre fonction Lambda un accès au point de terminaison public Secrets Manager en ajoutant une [Passerelle NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) ou une [passerelle Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) à votre VPC, ce qui permet au trafic de votre VPC d'atteindre le point de terminaison public. En procédant ainsi, votre VPC est exposé à certains risques dans la mesure où une adresse IP pour la passerelle peut être attaquée depuis le réseau Internet public.

## Aucune activité après « createSecret »
<a name="troubleshoot_rotation_createSecret"></a>

Les problèmes suivants peuvent entraîner l'arrêt de la rotation après createSecret :

**Le réseau VPC n'autorise ACLs pas le trafic HTTPS 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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) dans le guide de l'*utilisateur Amazon VPC.*

**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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) dans le *Guide du développeur AWS Lambda *.

**Le point de terminaison VPC Secrets Manager n'autorise pas l'entrée du VPC dans CIDRs les groupes de sécurité assignés. **  
Pour plus d'informations, consultez la rubrique [Contrôler le trafic vers les ressources à l'aide de groupes de sécurité](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) dans le *Guide de l'utilisateur Amazon VPC*.

**La stratégie de point de terminaison d'un VPC Secrets Manager n'autorise pas Lambda à utiliser le point de terminaison d'un VPC. **  
Pour de plus amples informations, veuillez consulter [Utilisation d'un point de AWS Secrets Manager terminaison VPC](vpc-endpoint-overview.md).

**Le secret utilise la rotation des utilisateurs en alternance, le secret du superutilisateur est géré par Amazon RDS et la fonction Lambda ne peut pas accéder à l'API RDS.**  
Pour la [rotation des utilisateurs en alternance](rotation-strategy.md#rotating-secrets-two-users) lorsque le secret du superutilisateur est [géré par un autre service AWS](service-linked-secrets.md), 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 point de terminaison d'un VPC pour le service de base de données. Pour en savoir plus, consultez :  
+  [API Amazon RDS et points de terminaison d'un VPC d'interface](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html) dans le *Guide de l'utilisateur Amazon RDS*.
+ [Utilisation des points de terminaison VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-working-with-endpoints.html) dans le *Guide de gestion Amazon Redshift*.

## Erreur : « L'accès à KMS n'est pas autorisé »
<a name="troubleshoot_rotation_kms-key"></a>

Si vous voyez `ClientError: 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 clé KMS qui a été utilisée pour le chiffrer. 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](rotating-secrets-required-permissions-function.md#rotating-secrets-required-permissions-function-cust-key-example).

## Erreur : « Key is missing from secret JSON » (Le fichier JSON secret ne contient pas de clé)
<a name="tshoot-lambda-mismatched-secretvalue"></a>

Une fonction de rotation Lambda nécessite que la valeur de secret se trouve dans une structure JSON spécifique. Si vous voyez cette erreur, il se peut que le fichier JSON ne dispose pas d'une clé à laquelle la fonction de rotation a essayé d'accéder. Pour plus d'informations sur la structure JSON de chaque type de secret, consultez [Structure JSON des AWS Secrets Manager secrets](reference_secret_json_structure.md).

## Erreur : « SetSecret: Unable to log into database » (SetSecret : connexion à la base de données impossible)
<a name="troubleshoot_rotation_setSecret"></a>

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 est en cours d'exécution sur une instance Amazon EC2 dans un VPC, nous vous recommandons de configurer votre fonction Lambda de sorte qu'elle s'exécute dans le même VPC. La fonction de rotation peut alors communiquer directement avec votre service. Pour plus d'informations, consultez [Configuring VPC access (Configuration de l'accès VPC)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring).  
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` versions `AWSCURRENT` et du secret à l'aide de la AWS CLI commande [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html).

**La base de données utilise `scram-sha-256` pour crypter les mots de passe.**  
Si votre base de données est Aurora PostgreSQL version 13 ou une version plus récente et utilise `scram-sha-256` pour crypter les mots de passe, mais que la fonction de rotation utilise la `libpq` version 9 ou une version moins récente qui ne prend pas en charge `scram-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 de la présence d'utilisateurs utilisant des mots de passe* (français non garanti) dans le journal [SCRAM Authentication (Authentification SCRAM ) dans RDS pour PostgreSQL 13](https://aws.amazon.com/blogs/database/scram-authentication-in-rds-for-postgresql-13/) (français non garanti).

**Pour déterminer quelle version de `libpq` votre fonction de rotation utilise**

1. 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.

1. Dans le répertoire de travail d'une ligne de commande, exécutez :

   `readelf -a libpq.so.5 | grep RUNPATH`

1. Si vous voyez la chaîne *`PostgreSQL-9.4.x`*, ou toute version majeure inférieure à 10, cela signifie que la fonction de rotation n'est pas prise en charge `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]`
   + Sortie pour une fonction de rotation prenant en charge `scram-sha-256` :

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c /workspace/build/PostgreSQL/PostgreSQL-14.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- 14.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]`
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 charge`scram-sha-256`. Afin de prendre en charge `scram-sha-256`, vous devez [recréer votre fonction de rotation](rotate-secrets_turn-on-for-db.md). 

**La base de données nécessite un SSL/TLS accès.**  
Si votre base de données nécessite une SSL/TLS connexion, 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 le protocole SSL (Secure Socket Layer) ou le protocole TLS (Transport Layer Security) pour se connecter à votre base de données, si elle est disponible. Sinon, elles utilisent une connexion non chiffrée.  
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](rotate-secrets_turn-on-for-db.md). 

**Pour déterminer quand votre fonction de rotation a été créée**

1. Dans la console Secrets Manager [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/), ouvrez votre secret. Dans la section **Rotation configuration** (Configuration de la rotation), sous **Lambda rotation function** (Fonction de rotation Lambda), vous pouvez voir **Lambda function ARN** (ARN de la fonction Lambda), par exemple, `arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction `. Copiez le nom de la fonction à partir de la fin de l'ARN. Dans l'exemple présent, il s'agit de ` SecretsManagerMyRotationFunction `. 

1. Dans la AWS Lambda console [https://console.aws.amazon.com/lambda/](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. 

1. 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**. 

1. Dans la AWS CloudFormation console [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/), sous **Stacks**, collez la valeur clé dans le champ de recherche, puis choisissez Enter.

1. 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\$1function'' »
<a name="tshoot-python-version"></a>

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](#troubleshoot_rotation_python39). 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 » ?](https://repost.aws/knowledge-center/secrets-manager-lambda-rotation) dans *AWS  re:Post*.

## Mise à jour d'une fonction de rotation existante depuis Python 3.7 vers 3.9
<a name="troubleshoot_rotation_python39"></a>

Certaines fonctions de rotation créées avant novembre 2022 utilisaient Python 3.7. Le AWS SDK pour 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](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/). Pour passer à une nouvelle fonction de rotation utilisant Python 3.9, vous pouvez ajouter une propriété d'exécution à une fonction de rotation existante ou recréer la fonction de rotation.

**Pour rechercher quelles fonctions de rotation Lambda utilisent Python 3.7**

1. Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Dans la liste des **fonctions**, filtrez pour **SecretsManager**.

1. Dans la liste filtrée des fonctions, sous **Exécution**, recherchez Python 3.7.

**Topics**
+ [Option 1 : recréer la fonction de rotation en utilisant CloudFormation](#update-python-opt-1)
+ [Option 2 : mettre à jour le temps d'exécution de la fonction de rotation existante à l'aide de CloudFormation](#update-python-opt-2)
+ [Option 3 : pour les AWS CDK utilisateurs, mettez à niveau la bibliothèque CDK](#update-python-opt-3)

### Option 1 : recréer la fonction de rotation en utilisant CloudFormation
<a name="update-python-opt-1"></a>

Lorsque vous utilisez la console Secrets Manager pour activer la rotation, Secrets Manager crée 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 CloudFormation pile, vous pouvez utiliser la même 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 CloudFormation pile à l'origine de la fonction de rotation**
+ Dans la page des détails de la fonction Lambda, sous l'onglet **Configuration**, choisissez **Balises**. Afficher l'ARN en regard de **aws:cloudformation:stack-id**.

  Le nom de la pile est intégré dans l'ARN, comme illustré dans l'exemple suivant.
  + ARN : `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nom de la pile : **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Pour recréer une fonction de rotation (CloudFormation)**

1. Dans 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**.

1. 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**.

1. Dans Application Composer, procédez comme suit :

   1. Dans le code du modèle, dans`SecretRotationScheduleHostedRotationLambda`, remplacez la valeur pour `"functionName": "SecretsManagerTestRotationRDS"` par un nouveau nom de fonction, par exemple en JSON, `"functionName": "SecretsManagerTestRotationRDSupdated"` 

   1. Choisissez **Mettre à jour le modèle**.

   1. Dans la CloudFormation boîte **de dialogue Continuer à**, choisissez **Confirmer et passez à CloudFormation**.

1. Poursuivez le flux de travail de la CloudFormation pile, puis choisissez **Soumettre**.

### Option 2 : mettre à jour le temps d'exécution de la fonction de rotation existante à l'aide de CloudFormation
<a name="update-python-opt-2"></a>

Lorsque vous utilisez la console Secrets Manager pour activer la rotation, Secrets Manager crée 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 CloudFormation pile, vous pouvez utiliser la même CloudFormation pile pour mettre à jour le temps d'exécution de la fonction de rotation.

**Pour trouver la CloudFormation pile à l'origine de la fonction de rotation**
+ Dans la page des détails de la fonction Lambda, sous l'onglet **Configuration**, choisissez **Balises**. Afficher l'ARN en regard de **aws:cloudformation:stack-id**.

  Le nom de la pile est intégré dans l'ARN, comme illustré dans l'exemple suivant.
  + ARN : `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nom de la pile : **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Pour mettre à jour l'exécution d'une fonction de rotation (CloudFormation)**

1. Dans 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**.

1. 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**.

1. Dans Application Composer, procédez comme suit :

   1. Dans le modèle JSON, pour le`SecretRotationScheduleHostedRotationLambda`, under`Properties`, under`Parameters`, add**"runtime": "python3.9"**.

   1. Choisissez **Mettre à jour le modèle**.

   1. Dans la CloudFormation boîte **de dialogue Continuer à**, choisissez **Confirmer et passez à CloudFormation**.

1. Poursuivez le flux de travail de la CloudFormation pile, puis choisissez **Soumettre**.

### Option 3 : pour les AWS CDK utilisateurs, mettez à niveau la bibliothèque CDK
<a name="update-python-opt-3"></a>

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](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

## Mettre à niveau une fonction de rotation existante de Python 3.9 à 3.10
<a name="troubleshoot_rotation_python_310"></a>

Secrets Manager est en train de passer de Python 3.9 à 3.10 pour les fonctions de rotation Lambda. Pour passer à une nouvelle fonction de rotation utilisant Python 3.10, vous devez suivre le chemin de mise à niveau en fonction de votre méthode de déploiement. Utilisez les procédures suivantes pour mettre à niveau la version Python et les dépendances sous-jacentes.

**Pour déterminer quelles fonctions de rotation Lambda, utilisez Python 3.9**

1. Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Dans la liste des **fonctions**, filtrez pour **SecretsManager**.

1. Dans la liste filtrée des fonctions, sous **Runtime**, recherchez**Python 3.9**.

### Mettre à jour les chemins par méthode de déploiement
<a name="update-python-3.9-paths"></a>

Les fonctions de rotation Lambda identifiées dans cette liste peuvent être déployées via la console Secrets Manager, les AWS Serverless Application Repository applications ou CloudFormation les transformations. Chacune de ces stratégies de déploiement possède un chemin de mise à jour distinct. 

Utilisez l'une des procédures suivantes pour mettre à jour vos fonctions de rotation Lambda, en fonction de la manière dont votre fonction a été déployée.

------
#### [ AWS Secrets Manager console-deployed functions ]

Une nouvelle fonction Lambda doit être déployée via la AWS Secrets Manager console car vous ne pouvez pas mettre à jour manuellement les dépendances des fonctions Lambda existantes.

Utilisez la procédure suivante pour mettre à niveau les fonctions AWS Secrets Manager déployées sur la console.

1. Ouvrez la console Secrets Manager à l'adresse [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Sous **AWS Secrets Manager**, sélectionnez **Secrets**. Sélectionnez le secret qui utilise la fonction Lambda que vous souhaitez mettre à jour.

1. Accédez à l'onglet **Rotations** et sélectionnez l'option **Mettre à jour les configurations de rotation**.

1. Sous **Fonctions de rotation**, choisissez **Créer une nouvelle fonction** et entrez un nouveau nom pour la fonction de rotation Lambda.

   1. (Facultatif) Une fois la mise à jour terminée, vous pouvez tester la fonction Lambda mise à jour pour confirmer qu'elle fonctionne comme prévu. Sous l'onglet **Rotation**, sélectionnez **Rotate Secret Immediately** pour lancer une rotation immédiate.

   1. (Facultatif) Vous pouvez consulter les journaux de vos fonctions et la version de Python utilisée lors de l'exécution sur Amazon CloudWatch. Pour plus d'informations, consultez la section [Affichage CloudWatch des journaux pour les fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-view.html#monitoring-cloudwatchlogs-console) dans le Guide du *AWS Lambda développeur*.

1. Une fois la nouvelle fonction de rotation configurée, vous pouvez supprimer l'ancienne fonction de rotation.

------
#### [ AWS Serverless Application Repository deployments ]

La procédure suivante indique comment mettre à niveau les AWS Serverless Application Repository déploiements. Les fonctions Lambda AWS Serverless Application Repository déployées par le biais d'une bannière indiquant qu'`This function belongs to an application. Click here to manage it.`elles incluent un lien vers l'application Lambda à laquelle appartient la fonction.

**Important**  
AWS Serverless Application Repository la disponibilité Région AWS dépend.

Utilisez la procédure suivante pour mettre à jour les fonctions AWS Serverless Application Repository déployées.

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Accédez à l'onglet **Configurations** de la fonction Lambda qui doit être mise à jour.

   1. Vous aurez besoin des informations suivantes concernant votre fonction lors de la mise à jour de l' AWS Serverless Application Repository application déployée. Vous pouvez trouver ces informations dans la console Lambda.
     + **Nom de l'application Lambda**
       + Le nom de l'application Lambda peut être trouvé en utilisant le lien dans la bannière. Par exemple, la bannière indique ce qui suit`serverlessrepo-SecretsManagerRedshiftRotationSingleUser`. Dans cet exemple, le nom est`SecretsManagerRedshiftRotationSingleUser`.
     + **Nom de la fonction de rotation Lambda**
     + **Point de terminaison Secrets Manager**
       + Le point de terminaison se trouve sous les onglets **Configurations** et **Variables d'environnement** affectés à la variable **SECRETS\$1MANAGER\$1ENDPOINT**.

1. Pour mettre à niveau Python, vous devez mettre à jour la version sémantique de l'application sans serveur. Consultez la section [Mise à jour des applications](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-consume-new-version.html#update-applications) dans le *guide du AWS Serverless Application Repository développeur*.

------
#### [ Custom Lambda rotation functions ]

Si vous avez créé des fonctions de rotation Lambda personnalisées, vous devrez mettre à niveau les dépendances et les temps d'exécution de chaque package pour ces fonctions. Pour plus d'informations, voir [Mettre à niveau l'environnement d'exécution de la fonction Lambda vers la dernière version](https://repost.aws/knowledge-center/lambda-upgrade-function-runtime).

------
#### [ AWS::SecretsManager-2024-09-16 transform macro ]

Si la fonction Lambda est déployée via cette transformation, [la mise à jour des piles à l'aide d'un modèle existant](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) vous permettra d'utiliser le runtime Lambda mis à jour. 

Utilisez la procédure suivante pour mettre à jour la CloudFormation pile à l'aide d'un modèle existant.

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Sur la page **Stacks**, sélectionnez la pile que vous souhaitez mettre à jour.

1. Choisissez **Mettre à jour** dans le volet des détails de la pile.

1. Pour **Choisir une méthode de mise à jour du modèle**, sélectionnez **Mise à jour directe**.

1. Sur la page **Spécifier le modèle**, sélectionnez **Utiliser le modèle existant**.

1. Conservez les valeurs par défaut de toutes les autres options, puis choisissez **Update stack**.

Si vous rencontrez des problèmes lors de la mise à jour de la pile, consultez [la section Déterminer la cause d'une défaillance de la pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) dans le *Guide de CloudFormation l'utilisateur*.

------
#### [ AWS::SecretsManager-2020-07-23 transform macro ]

Nous vous recommandons de migrer vers la nouvelle version de transformation si vous utilisez`AWS::SecretsManager-2020-07-23`. Pour plus d'informations, consultez la section [Présentation d'une version améliorée de la AWS Secrets Manager transformation AWS : : : SecretsManager -2024-09-16](https://aws.amazon.com/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/) dans le blog sur la *AWS sécurité*. Si vous continuez à l'utiliser`AWS::SecretsManager-2020-07-23`, vous pouvez rencontrer une erreur de non-concordance entre votre version d'exécution et les artefacts du code de fonction Lambda. Pour plus d'informations, voir [AWS: : SecretsManager : : RotationSchedule HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-runtime) dans la *référence du CloudFormation modèle*. 

Si vous rencontrez des problèmes lors de la mise à jour de la pile, [déterminez la cause d'une défaillance de la pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) dans le *Guide de CloudFormation l'utilisateur*.

------

**Vérifier la mise à niveau de Python**  
Pour vérifier la mise à niveau de Python, ouvrez la console Lambda ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) et accédez à la page **Function**. Sélectionnez la fonction que vous avez mise à jour. Dans la section **Source du code**, passez en revue les fichiers inclus dans le répertoire et assurez-vous que le fichier Python .so est bien la version`3.10`.

## AWS Lambda rotation secrète en cas d'`PutSecretValue`échec
<a name="troubleshoot_rotation_putsecretvalue"></a>

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 *VERSION\$1ID * secrète en attente de Secret n'*SECRET\$1ARN *a pas été créée par *LAMBDA\$1ARN.* Lambda. Supprimez `AWSPENDING` l'étiquette intermédiaire et relancez la rotation, vous devez mettre à jour votre fonction Lambda pour utiliser le paramètre. CloudTrail `RotationToken`<a name="troubleshoot_rotation_procedure"></a>

## Mettre à jour la fonction de rotation Lambda pour inclure `RotationToken`
<a name="troubleshoot_rotation_procedure"></a>

1. 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.

1. Modifier `Lambda_handler`

   Incluez le paramètre rotation\$1token dans l'étape create\$1secret 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")
   ```

1. Modifier le `create_secret` code

   Révisez la `create_secret` fonction pour accepter et utiliser le `rotation_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))
   ```

1. 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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update).

## Erreur : « Erreur lors de l'exécution de Lambda *<arn>* pendant l'*<a rotation>*étape »
<a name="concurrency-related-failures"></a>

Si vous rencontrez des échecs de rotation secrète intermittents lorsque votre fonction Lambda est bloquée dans une boucle d'ensembles, par exemple entre **CreateSecret** et**SetSecret**, le problème peut être lié aux paramètres de simultanéité.

### Étapes de résolution des problèmes de simultanéité
<a name="concurrency-troubleshooting-steps"></a>

**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.

1. Vérifiez et ajustez les paramètres de simultanéité Lambda :
   + Vérifiez que ce `reserved_concurrent_executions` paramètre n'est pas trop bas (par exemple, 1)
   + Si vous utilisez la simultanéité réservée, réglez-la sur au moins 10
   + Envisagez d'utiliser la simultanéité sans réserve pour plus de flexibilité

1. Pour la simultanéité provisionnée :
   + Ne définissez pas explicitement le paramètre de simultanéité provisionné (par exemple, dans Terraform).
   + Si vous devez le définir, utilisez une valeur d'au moins 10.
   + Effectuez des tests approfondis pour vous assurer que la valeur choisie convient à votre cas d'utilisation.

1. Surveillez et réglez la simultanéité :
   + Calculez la simultanéité à l'aide de cette formule : Concurrence = (nombre moyen de demandes par seconde) \$1 (durée moyenne des demandes en secondes). Pour plus d'informations, voir [Estimation de la simultanéité réservée](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#estimating-reserved-concurrency).
   + Observez et enregistrez les valeurs pendant les rotations afin de déterminer les paramètres de simultanéité appropriés.
   + Soyez prudent lorsque vous définissez de faibles valeurs de simultanéité. Ils peuvent provoquer un ralentissement s'il n'y a pas suffisamment de threads d'exécution disponibles.

Pour plus d'informations sur la configuration de la simultanéité Lambda, consultez les sections Configuration de [la simultanéité réservée et Configuration de la simultanéité](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) [provisionnée](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) dans le Guide du développeur. AWS Lambda 