

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Rotación con función de Lambda
<a name="rotate-secrets_lambda"></a>

Para muchos tipos de secretos, Secrets Manager utiliza una AWS Lambda función para actualizar el secreto y la base de datos o el servicio. Para obtener información sobre los costos por usar una función de Lambda, consulte [Precios](intro.md#asm_pricing).

En algunos [Secretos gestionados por otros servicios](service-linked-secrets.md), se utiliza la *rotación administrada*. Para utilizar [Rotación administrada](rotate-secrets_managed.md), primero se debe crear el secreto a través del servicio de administración.

Durante la rotación, Secrets Manager registra los eventos que indican el estado de rotación. Para obtener más información, consulte [AWS Secrets Manager Registra eventos con AWS CloudTrail](monitoring-cloudtrail.md).

Para rotar un secreto, Secrets Manager llama a una [función de Lambda](rotate-secrets_lambda-functions.md) según la programación de rotación que haya configurado. Si también se actualiza manualmente el valor de secreto mientras está configurada la rotación automática, Secrets Manager la considerará una rotación válida cuando calcule la próxima fecha de rotación. 

Durante la rotación, Secrets Manager llama a la misma función varias veces, cada una con diferentes parámetros. Secrets Manager invoca la función con la siguiente estructura de parámetros de solicitud JSON: 

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

**Parámetros:**
+ **Step**: el paso de rotación (`create_secret`, `set_secret`, `test_secret` o `finish_secret`). Para obtener más información, consulte [Cuatro pasos en una función de rotación](rotate-secrets_lambda-functions.md#rotate-secrets_lambda-functions-code).
+ **SecretId**— El ARN del secreto para girar.
+ **ClientRequestToken**— Un identificador único para la nueva versión del secreto. Este valor ayuda a garantizar la idempotencia. Para obtener más información, consulte [PutSecretValue: ClientRequestToken](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html#SecretsManager-PutSecretValue-request-ClientRequestToken) en la *referencia de la AWS Secrets Manager API*.
+ **RotationToken**— Un identificador único que indica el origen de la solicitud. Este es obligatorio para la rotación de secretos mediante un rol asumido o la rotación entre cuentas, en la que se rota un secreto en una cuenta con una función de rotación de Lambda en otra cuenta. En ambos casos, la función de rotación asume un rol de IAM para llamar a Secrets Manager y, a continuación, Secrets Manager utiliza el token de rotación para validar la identidad del rol de IAM. 

Si algún paso de la rotación falla, Secrets Manager vuelve a intentar todo el proceso de rotación varias veces.

**Topics**
+ [Rotación automática de secretos de bases de datos (consola)](rotate-secrets_turn-on-for-db.md)
+ [Rotación automática para secretos que no son de bases de datos (consola)](rotate-secrets_turn-on-for-other.md)
+ [Rotación automática (AWS CLI)](rotate-secrets_turn-on-cli.md)
+ [Estrategias de rotación de la función de Lambda](rotation-strategy.md)
+ [Funciones de rotación de Lambda](rotate-secrets_lambda-functions.md)
+ [Plantillas de función de rotación](reference_available-rotation-templates.md)
+ [Permisos para rotación](rotating-secrets-required-permissions-function.md)
+ [Acceso a la red para la función AWS Lambda de rotación](rotation-function-network-access.md)
+ [Solución de problemas de rotación](troubleshoot_rotation.md)

# Configurar la rotación automática de secretos de Amazon RDS, Amazon Aurora, Amazon Redshift o Amazon DocumentDB
<a name="rotate-secrets_turn-on-for-db"></a>

En este tutorial, se describe cómo configurar [Rotación con función de Lambda](rotate-secrets_lambda.md) para los secretos de bases de datos. La rotación es el proceso de actualización periódica de un secreto. Cuando se rota un secreto, se actualizan las credenciales tanto en el secreto como en la base de datos. En Secrets Manager, puede configurar la rotación automática de sus secretos de bases de datos.

Para configurar la rotación con la consola, primero debe elegir una estrategia de rotación. A continuación, configure el secreto para la rotación, lo que crea una función de rotación de Lambda si aún no la tiene. La consola también establece los permisos para el rol de ejecución de la función de Lambda. El último paso consiste en asegurarse de que la función de rotación de Lambda pueda acceder tanto a Secrets Manager como a su base de datos a través de la red.

**aviso**  
Para activar la rotación automática, debe tener permisos para crear el rol de ejecución de IAM para la función de rotación de Lambda y adjuntarle una política de permisos. Necesita ambos permisos, `iam:CreateRole` y `iam:AttachRolePolicy`. Conceder estos permisos permite que una identidad se conceda a sí misma cualquier permiso.

**Topics**
+ [Paso 1: elegir una estrategia de rotación y (opcionalmente) crear un secreto de superusuario](#rotate-secrets_turn-on-for-db_step1)
+ [Paso 2: configurar la rotación y crear una función de rotación](#rotate-secrets_turn-on-for-db_step2)
+ [Paso 3 (opcional): establecer condiciones de permisos adicionales en la función de rotación](#rotate-secrets_turn-on-for-db_step3)
+ [Paso 4: configurar el acceso a la red para la función de rotación](#rotate-secrets_turn-on-for-db_step4)
+ [Siguientes pasos](#rotate-secrets_turn-on-for-db_stepnext)

## Paso 1: elegir una estrategia de rotación y (opcionalmente) crear un secreto de superusuario
<a name="rotate-secrets_turn-on-for-db_step1"></a>

Para obtener información sobre las estrategias que ofrece Secrets Manager, consulte [Estrategias de rotación de la función de Lambda](rotation-strategy.md).

Si elige la *estrategia de usuarios alternativos*, debe [Crear secretos](create_secret.md) y almacenar en él las credenciales de superusuario de la base de datos. Necesita un secreto con credenciales de superusuario porque la rotación clona el primer usuario y la mayoría de los usuarios no tienen ese permiso. Tenga en cuenta que Amazon RDS Proxy no admite la estrategia de usuarios alternos.

## Paso 2: configurar la rotación y crear una función de rotación
<a name="rotate-secrets_turn-on-for-db_step2"></a>

**Activar la rotación de un secreto de Amazon RDS, Amazon DocumentDB o Amazon Redshift**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En la página **Secrets** (Secretos), elija el secreto.

1. En la página **Secret details** (Detalles del secreto), en la sección **Rotation configuration** (Configuración de la rotación), elija **Edit rotation** (Editar rotación).

1. En el cuadro de diálogo **Edit rotation configuration** (Configuración para editar la rotación), haga lo siguiente:

   1. Active **Automatic rotation** (Rotación automática).

   1. En **Rotation schedule** (Programación de rotación), ingrese la programación en zona horaria UTC en **Schedule expression builder** (Generador de expresiones de programación) o como una **expresión de programación**. Secrets Manager almacena su programación como una expresión `rate()` o `cron()`. El periodo de rotación se inicia a medianoche de forma automática, excepto si se especifica una **Start time** (Hora de inicio). Se puede rotar un secreto con una frecuencia máxima de cuatro horas. Para obtener más información, consulte [Programación de rotación](rotate-secrets_schedule.md).

   1. (Opcional) En **Window duration** (Duración del periodo), elija el tiempo durante el cual desea que Secrets Manager rote su secreto, por ejemplo, **3h**, para un periodo de tres horas. El periodo no debe prolongarse hasta el siguiente periodo de rotación. Si no se especifica **Window duration** (Duración del periodo) para una programación de rotación en horas, el periodo concluye automáticamente al cabo de una hora. Para una programación de rotación en días, el periodo concluye automáticamente al final del día. 

   1. (Opcional) Elija **Rotate immediately when the secret is stored** (Rotar inmediatamente cuando se almacene el secreto) a fin de rotar su secreto en cuanto guarde los cambios. Si desmarca la casilla de verificación, la primera rotación comenzará conforme a la programación establecida.

      Si se produce un error en la rotación (por ejemplo, porque los pasos 3 y 4 aún no se han completado), Secrets Manager reintenta el proceso de rotación varias veces.

   1. En **Rotation function** (Función de rotación), realice una de las siguientes operaciones:
      + Elija **Create a new Lambda function** (Crear una nueva función de Lambda) y luego ingrese un nombre para la nueva función. Secrets Manager agrega `SecretsManager` al principio del nombre de la función. Secrets Manager crea la función a partir de la [plantilla](reference_available-rotation-templates.md) adecuada y establece los [permisos](rotating-secrets-required-permissions-function.md) necesarios para el rol de ejecución de Lambda.
      + Seleccione **Use an existing Lambda function** (Usar una función de Lambda existente) para reutilizar una función de rotación utilizada para otro secreto. Las funciones de rotación enumeradas en **Recommended VPC configurations** (Configuraciones recomendadas de VPC) tienen la misma VPC y el mismo grupo de seguridad que la base de datos, lo que facilita a la función el acceso a la base de datos.

   1. Para **la estrategia de rotación**, elija la estrategia **de usuario único** o la de **usuarios alternos**. Para obtener más información, consulte [Paso 1: elegir una estrategia de rotación y (opcionalmente) crear un secreto de superusuario](#rotate-secrets_turn-on-for-db_step1).

1. Seleccione **Save**.

## Paso 3 (opcional): establecer condiciones de permisos adicionales en la función de rotación
<a name="rotate-secrets_turn-on-for-db_step3"></a>

En la política de recursos de la función de rotación, se recomienda incluir la clave de contexto [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) para poder evitar que Lambda se utilice como [suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). En el caso de algunos AWS servicios, para evitar el confuso escenario adjunto, se AWS recomienda utilizar tanto la clave de condición como la [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)clave de condición [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)global. No obstante, si se incluye la condición `aws:SourceArn` en la política de la función de rotación, la función de rotación solo se puede utilizar para rotar el secreto especificado por ese ARN. Se recomienda incluir solo la clave de contexto `aws:SourceAccount`, para poder utilizar la función de rotación para varios secretos. 

**Actualizar la política de recursos de la función de rotación**

1. En la consola de Secrets Manager, elija el secreto y, a continuación, en la página de detalles, en **Rotation configuration** (Configuración de la rotación), elija la función de rotación de Lambda. Se abre la consola de Lambda.

1. Siga las instrucciones que se describen en [Uso de políticas basadas en recursos para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) para agregar una condición `aws:sourceAccount`.

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

Si el secreto está cifrado con una clave de KMS distinta de Clave administrada de AWS `aws/secretsmanager`, Secrets Manager concede permiso al rol de ejecución de Lambda para utilizar la clave. Puede utilizar el [contexto de cifrado SecretARN](security-encryption.md#security-encryption-encryption-context) para limitar el uso de la función de descifrado, de modo que el rol de la función de rotación solo tenga acceso para descifrar el secreto que es responsable de rotar.

**Para actualizar el rol de ejecución de la función de rotación**

1. En la función de rotación de Lambda, elija **Configuración** y, a continuación, en **Rol de ejecución**, elija el **Nombre del rol**. 

1. Siga las instrucciones que se indican en [Modificación de una política de permisos de rol](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy) para agregar una condición `kms:EncryptionContext:SecretARN`.

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

## Paso 4: configurar el acceso a la red para la función de rotación
<a name="rotate-secrets_turn-on-for-db_step4"></a>

Para obtener más información, consulte [Acceso a la red para la función AWS Lambda de rotación](rotation-function-network-access.md).

## Siguientes pasos
<a name="rotate-secrets_turn-on-for-db_stepnext"></a>

Consulte [Solucionar problemas de rotación AWS Secrets Manager](troubleshoot_rotation.md).

# Configurar la rotación automática para secretos que no son de bases de datos AWS Secrets Manager
<a name="rotate-secrets_turn-on-for-other"></a>

En este tutorial, se describe cómo configurar los secretos de [Rotación con función de Lambda](rotate-secrets_lambda.md) que no son de bases de datos. La rotación es el proceso de actualización periódica de un secreto. Cuando se rota un secreto, se actualizan las credenciales tanto en el secreto como en la base de datos o el servicio para el que está destinado el secreto.

En el caso de los secretos de bases de datos, consulte [Rotación automática de secretos de bases de datos (consola)](rotate-secrets_turn-on-for-db.md).

**aviso**  
Para activar la rotación automática, debe tener permisos para crear el rol de ejecución de IAM para la función de rotación de Lambda y adjuntarle una política de permisos. Necesita ambos permisos, `iam:CreateRole` y `iam:AttachRolePolicy`. Conceder estos permisos permite que una identidad se conceda a sí misma cualquier permiso.

**Topics**
+ [Paso 1: crear una función de rotación genérica](#rotate-secrets_turn-on-for-other_create)
+ [Paso 2: escribir el código de la función de rotación](#rotate-secrets_turn-on-for-other_write)
+ [Paso 3: configurar el secreto para la rotación](#rotate-secrets_turn-on-for-other_configure)
+ [Paso 4: permitir que la función de rotación acceda a Secrets Manager y a la base de datos o al servicio](#rotate-secrets_turn-on-for-other_perms)
+ [Paso 5: permitir que Secrets Manager invoque la función de rotación](#rotate-secrets_turn-on-for-other_perms2)
+ [Paso 6: configurar el acceso a la red para la función de rotación](#rotate-secrets_turn-on-for-other_network)
+ [Siguientes pasos](#rotate-secrets_turn-on-for-other_stepnext)

## Paso 1: crear una función de rotación genérica
<a name="rotate-secrets_turn-on-for-other_create"></a>

Para comenzar, cree una función de rotación de Lambda. No tendrá el código para rotar su secreto, por lo que tendrá que escribirlo en un paso posterior. Para obtener más información sobre cómo funciona una función de rotación, consulte [Funciones de rotación de Lambda](rotate-secrets_lambda-functions.md).

En las regiones compatibles, puede utilizarla AWS Serverless Application Repository para crear la función a partir de una plantilla. Para obtener una lista de las regiones admitidas, consulte [AWS Serverless Application Repository FAQs](https://aws.amazon.com/serverless/serverlessrepo/faqs/). En otras regiones, se crea la función desde cero y se copia el código de la plantilla en la función.

**Crear una función de rotación genérica**

1. Para determinar si AWS Serverless Application Repository es compatible en su región, consulte los [AWS Serverless Application Repository puntos finales y las cuotas](https://docs.aws.amazon.com/general/latest/gr/serverlessrepo.html) en la *Referencia AWS general*. 

1. Realice una de las siguientes acciones:
   + Si AWS Serverless Application Repository es compatible en tu región:

     1. En la consola de Lambda, elija **Aplicaciones** y, a continuación, seleccione **Crear aplicación**.

     1. En la página **Crear aplicación**, seleccione la pestaña **Aplicación sin servidor**.

     1. En el cuadro de búsqueda, en **Aplicaciones públicas**, escriba **SecretsManagerRotationTemplate**.

     1. Seleccione **Mostrar aplicaciones que crean roles de IAM personalizados o políticas de recursos**.

     1. Elija el mosaico **SecretsManagerRotationTemplate**.

     1. En la página **Revisar, configurar e implementar**, en el mosaico **Configuración de la aplicación**, complete los campos obligatorios. 
        + Para el **punto de conexión**, introduzca el punto de conexión de su región, incluido **https://**. Para obtener una lista de puntos de enlace , consulte [AWS Secrets Manager puntos finales](asm_access.md#endpoints).
        + **Para colocar la función Lambda en una VPC, incluya los identificadores y. vpcSecurityGroup **vpcSubnetIds****

     1. Elija **Implementar**.
   + Si AWS Serverless Application Repository no es compatible en tu región:

     1. En la consola de Lambda, seleccione **Funciones** y elija **Crear función**.

     1. En la página **Create function (Crear función)**, proceda del modo siguiente:

        1. Elija **Crear desde cero**.

        1. En **Function name** (Nombre de la función), ingrese un nombre para la función de rotación.

        1. Para **Runtime**, elija **Python 3.10**.

        1. Seleccione **Creación de función**.

## Paso 2: escribir el código de la función de rotación
<a name="rotate-secrets_turn-on-for-other_write"></a>

En este paso, se escribe el código que actualiza el secreto y el servicio o la base de datos para el que está destinado el secreto. Para obtener información sobre lo que hace una función de rotación, incluidos consejos sobre cómo escribir su propia función de rotación, consulte [Funciones de rotación de Lambda](rotate-secrets_lambda-functions.md). También puede utilizar [Plantillas de función de rotación](reference_available-rotation-templates.md) como referencia.

## Paso 3: configurar el secreto para la rotación
<a name="rotate-secrets_turn-on-for-other_configure"></a>

En este paso, establecerá una programación de rotación para su secreto y conectará la función de rotación del secreto. 

**Configuración de la rotación y creación de una función de rotación vacía**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En la página **Secrets** (Secretos), elija el secreto.

1. En la página **Secret details** (Detalles del secreto), en la sección **Rotation configuration** (Configuración de la rotación), elija **Edit rotation** (Editar rotación). En el cuadro de diálogo **Edit rotation configuration** (Configuración para editar la rotación), haga lo siguiente:

   1. Active **Automatic rotation** (Rotación automática).

   1. En **Rotation schedule** (Programación de rotación), ingrese la programación en zona horaria UTC en **Schedule expression builder** (Generador de expresiones de programación) o como una **expresión de programación**. Secrets Manager almacena su programación como una expresión `rate()` o `cron()`. El periodo de rotación se inicia a medianoche de forma automática, excepto si se especifica una **Start time** (Hora de inicio). Se puede rotar un secreto con una frecuencia máxima de cuatro horas. Para obtener más información, consulte [Programación de rotación](rotate-secrets_schedule.md).

   1. (Opcional) En **Window duration** (Duración del periodo), elija el tiempo durante el cual desea que Secrets Manager rote su secreto, por ejemplo, **3h**, para un periodo de tres horas. El periodo no debe prolongarse hasta el siguiente periodo de rotación. Si no se especifica **Window duration** (Duración del periodo) para una programación de rotación en horas, el periodo concluye automáticamente al cabo de una hora. Para una programación de rotación en días, el periodo concluye automáticamente al final del día. 

   1. (Opcional) Elija **Rotate immediately when the secret is stored** (Rotar inmediatamente cuando se almacene el secreto) a fin de rotar su secreto en cuanto guarde los cambios. Si desmarca la casilla de verificación, la primera rotación comenzará conforme a la programación establecida.

   1. En **Función de rotación**, elija la función de Lambda que creó en el paso 1.

   1. Seleccione **Save**.

## Paso 4: permitir que la función de rotación acceda a Secrets Manager y a la base de datos o al servicio
<a name="rotate-secrets_turn-on-for-other_perms"></a>

La función de rotación de Lambda necesita permiso para acceder al secreto en Secrets Manager y también necesita permiso para acceder a su base de datos o servicio. En este paso, concederá estos permisos al rol de ejecución de Lambda. Si el secreto está cifrado con una clave KMS distinta de la Clave administrada de AWS `aws/secretsmanager`, tiene que conceder permiso al rol de ejecución de Lambda para utilizar la clave. Puede utilizar el [contexto de cifrado SecretARN](security-encryption.md#security-encryption-encryption-context) para limitar el uso de la función de descifrado, de modo que el rol de la función de rotación solo tenga acceso para descifrar el secreto que es responsable de rotar. Para ver ejemplos de políticas, consulte [Permisos para rotación](rotating-secrets-required-permissions-function.md).

Consulte las instrucciones en [Rol de ejecución de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), en la *Guía para desarrolladores de AWS Lambda *.

## Paso 5: permitir que Secrets Manager invoque la función de rotación
<a name="rotate-secrets_turn-on-for-other_perms2"></a>

Para permitir que Secrets Manager invoque la función de rotación en el programa de rotación que haya configurado, debe conceder el permiso `lambda:InvokeFunction` a la entidad principal del servicio Secrets Manager en la política de recursos de la función de Lambda.

En la política de recursos de la función de rotación, se recomienda incluir la clave de contexto [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) para poder evitar que Lambda se utilice como [suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). En el caso de algunos AWS servicios, para evitar el confuso escenario adjunto, se AWS recomienda utilizar tanto la clave de condición como la [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)clave de condición [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)global. No obstante, si se incluye la condición `aws:SourceArn` en la política de la función de rotación, la función de rotación solo se puede utilizar para rotar el secreto especificado por ese ARN. Se recomienda incluir solo la clave de contexto `aws:SourceAccount`, para poder utilizar la función de rotación para varios secretos. 

Para adjuntar una política de recursos a una función de Lambda, consulte [Uso de políticas basadas en recursos para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html).

La siguiente política permite que Secrets Manager invoque la función de 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"
    }
    ]
}
```

------

## Paso 6: configurar el acceso a la red para la función de rotación
<a name="rotate-secrets_turn-on-for-other_network"></a>

En este paso, se permite que la función de rotación se conecte tanto a Secrets Manager como al servicio o a la base de datos a la que está destinado el secreto. La función de rotación debe poder acceder a ambos para poder rotar el secreto. Consulte [Acceso a la red para la función AWS Lambda de rotación](rotation-function-network-access.md).

## Siguientes pasos
<a name="rotate-secrets_turn-on-for-other_stepnext"></a>

Cuando se configuró la rotación en el paso 3, se estableció un cronograma para rotar el secreto. Si la rotación falla cuando está programada, Secrets Manager la intentará realizar varias veces. También puede iniciar una rotación inmediatamente siguiendo las instrucciones que se indican en [Rotar un secreto inmediatamente](rotate-secrets_now.md).

Si la rotación falla, consulte [Solución de problemas de rotación](troubleshoot_rotation.md).

# Configure la rotación automática mediante el AWS CLI
<a name="rotate-secrets_turn-on-cli"></a>

En este tutorial se describe cómo realizar la configuración [Rotación con función de Lambda](rotate-secrets_lambda.md) mediante el AWS CLI. Cuando se rota un secreto, se actualizan las credenciales tanto en el secreto como en la base de datos o el servicio para el que está destinado el secreto. 

También puede usar la consola para configurar la rotación. En el caso de los secretos de bases de datos, consulte [Rotación automática de secretos de bases de datos (consola)](rotate-secrets_turn-on-for-db.md). Para los demás tipos de secretos, consulte [Rotación automática para secretos que no son de bases de datos (consola)](rotate-secrets_turn-on-for-other.md).

Para configurar la rotación mediante el AWS CLI, si va a rotar un secreto de base de datos, primero debe elegir una estrategia de rotación. Si elige la estrategia de usuarios alternativos, debe almacenar un secreto independiente con las credenciales de un superusuario de base de datos. A continuación, escriba el código de la función de rotación. Secrets Manager proporciona plantillas en las que puede basar su función. A continuación, cree una función de Lambda con el código y establezca los permisos tanto para la función de Lambda como para el rol de ejecución de Lambda. El siguiente paso consiste en asegurarse de que la función de Lambda pueda acceder a Secrets Manager y a la base de datos o al servicio a través de la red. Por último, configure el secreto para la rotación.

**Topics**
+ [Requisito previo para los secretos de la base de datos: elegir una estrategia de rotación](#rotate-secrets_turn-on-cli_step1)
+ [Paso 1: escribir el código de la función de rotación](#rotate-secrets_turn-on-cli_write)
+ [Paso 2: Crear la función de Lambda](#w2aac21c11c25c15)
+ [Paso 3: configurar el acceso a la red](#w2aac21c11c25c17)
+ [Paso 4: configurar el secreto para la rotación](#w2aac21c11c25c19)
+ [Siguientes pasos](#w2aac21c11c25c21)

## Requisito previo para los secretos de la base de datos: elegir una estrategia de rotación
<a name="rotate-secrets_turn-on-cli_step1"></a>

Para obtener información sobre las estrategias que ofrece Secrets Manager, consulte [Estrategias de rotación de la función de Lambda](rotation-strategy.md).

### Opción 1: estrategia de usuario único
<a name="w2aac21c11c25c11b5"></a>

Si elige la *estrategia de usuario único*, puede continuar con el paso 1. 

### Opción 2: estrategia de usuarios alternos
<a name="w2aac21c11c25c11b7"></a>

Si elige la *estrategia de usuarios alternos*, debe:
+ [Crear un secreto](create_secret.md#create_secret_cli) y almacenar en él las credenciales de superusuario de la base de datos. Necesita un secreto con credenciales de superusuario porque la rotación para usuarios alternos clona el primer usuario, y la mayoría de los usuarios no tienen ese permiso. 
+ Añadir el ARN del secreto de superusuario al secreto original. Para obtener más información, consulte [Estructura JSON de AWS Secrets Manager secretos](reference_secret_json_structure.md). 

Tenga en cuenta que Amazon RDS Proxy no admite la estrategia de usuarios alternos.

## Paso 1: escribir el código de la función de rotación
<a name="rotate-secrets_turn-on-cli_write"></a>

Para rotar un secreto, se necesita una función de rotación. Una función de rotación es una función de Lambda a la que Secrets Manager llama para rotar un secreto. Para obtener más información, consulte [Rotación con función de Lambda](rotate-secrets_lambda.md). En este paso, se escribe el código que actualiza el secreto y el servicio o la base de datos para el que está destinado el secreto.

Secrets Manager proporciona plantillas para secretos de bases de datos de Amazon RDS, Amazon Aurora, Amazon Redshift y Amazon DocumentDB en [Plantillas de función de rotación](reference_available-rotation-templates.md). 

**Escribir el código de la función de rotación**

1. Realice una de las siguientes acciones:
   + Consultar la lista de [plantillas de funciones de rotación](reference_available-rotation-templates.md). Si hay alguna que coincida con su estrategia de servicio y rotación, copie el código. 
   + Para otros tipos de secretos, escriba su propia función de rotación. Para obtener instrucciones, consulte [Funciones de rotación de Lambda](rotate-secrets_lambda-functions.md). 

1. Guarde el archivo en un archivo ZIP *my-function.zip* junto con las dependencias necesarias.

## Paso 2: Crear la función de Lambda
<a name="w2aac21c11c25c15"></a>

En este paso, se crea la función de Lambda mediante el archivo ZIP que creó en el paso 1. También configura el [rol de ejecución de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), que es un rol que Lambda asume cuando se invoca la función.

**Crear un rol de ejecución y una función de rotación de Lambda**

1. Cree una política de confianza para el rol de ejecución de Lambda y guárdela como un archivo JSON. Para obtener más información y ejemplos, consulte [Permisos del rol de ejecución de la función de rotación Lambda para AWS Secrets Manager](rotating-secrets-required-permissions-function.md). La política debe:
   + Permitir que el rol llame a las operaciones de Secrets Manager relacionadas con el secreto. 
   + Permitir que el rol llame al servicio para el que está destinado el secreto, por ejemplo, para crear una contraseña nueva. 

1. Crear el rol de ejecución de Lambda y aplicar la política de confianza que creó en el paso anterior mediante una llamada a [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. Cree la función de Lambda a partir del archivo ZIP mediante una llamada a [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. Establezca una política de recursos en la función de Lambda para permitir que Secrets Manager la invoque mediante una llamada a [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
   ```

## Paso 3: configurar el acceso a la red
<a name="w2aac21c11c25c17"></a>

Para obtener más información, consulte [Acceso a la red para la función AWS Lambda de rotación](rotation-function-network-access.md).

## Paso 4: configurar el secreto para la rotación
<a name="w2aac21c11c25c19"></a>

Para activar la rotación automática de su secreto, llame a [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html). Puede establecer una programación de rotación con una expresión de programación `cron()` o `rate()` y definir una duración del periodo de rotación. Para obtener más información, consulte [Programación de rotación](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\"}"
```

## Siguientes pasos
<a name="w2aac21c11c25c21"></a>

Consulte [Solucionar problemas de rotación AWS Secrets Manager](troubleshoot_rotation.md).

# Estrategias de rotación de la función de Lambda
<a name="rotation-strategy"></a>

Para [Rotación con función de Lambda](rotate-secrets_lambda.md), en el caso de los secretos de base de datos, Secrets Manager ofrece dos estrategias de rotación.

## Estrategia de rotación: un solo usuario
<a name="rotating-secrets-one-user-one-password"></a>

Esta estrategia actualiza las credenciales de un usuario en un secreto. En el caso de las instancias Db2 de Amazon RDS, dado que los usuarios no pueden cambiar sus propias contraseñas, debe proporcionar las credenciales de administrador en un secreto independiente. **Esta es la estrategia de rotación más sencilla y es adecuada para la mayoría de los casos de uso.** En particular, recomendamos que utilice esta estrategia para las credenciales de los usuarios interactivos o únicos (ad hoc).

Cuando el secreto rota, las conexiones de bases de datos abiertas no se eliminan. Mientras se produce la rotación, hay un breve periodo de tiempo entre el momento en que cambia la contraseña de la base de datos y el momento en que se actualiza el secreto. Durante este tiempo, existe un riesgo bajo de que la base de datos deniegue las llamadas que utilizan las credenciales rotadas. Puede mitigar este riesgo con una [estrategia de reintentos apropiada](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/). Tras la rotación, las nuevas conexiones utilizan las nuevas credenciales. 

## Estrategia de rotación: usuarios alternativos
<a name="rotating-secrets-two-users"></a>

Esta estrategia actualiza las credenciales de dos usuarios en un secreto. Se crea el primer usuario y, durante la primera rotación, la función de rotación lo clona para crear el segundo usuario. Cada vez que el secreto rota, la función de rotación alterna la contraseña de usuario que actualiza. Dado que la mayoría de los usuarios no tienen permiso para clonarse a sí mismos, debe proporcionar las credenciales de un usuario de tipo `superuser` en otro secreto. Recomendamos que utilice la estrategia de rotación de un solo usuario cuando los usuarios clonados en su base de datos no tienen los mismos permisos que el usuario original y para las credenciales de los usuarios interactivos o únicos (ad hoc).

Esa estrategia es adecuada para bases de datos con modelos de permisos en los que un rol es propietario de las tablas de base de datos y un segundo rol tiene permiso para acceder a las tablas de base de datos. También es adecuada para aplicaciones que requieren alta disponibilidad. Si una aplicación recupera el secreto durante la rotación, seguirá obteniendo un conjunto de credenciales válido. Tras la rotación, las credenciales de `user` y `user_clone` son válidas. Incluso hay menos posibilidades de que las aplicaciones sufran denegaciones durante este tipo de rotación que con la rotación de un solo usuario. Si la base de datos está alojada en una granja de servidores donde el cambio de contraseña tarda tiempo en propagarse a todos los servidores, existe el riesgo de que la base de datos deniegue las llamadas que utilicen las nuevas credenciales. Puede mitigar este riesgo con una [estrategia de reintentos apropiada](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/).

Secrets Manager crea el usuario clonado con los mismos permisos que el usuario original. Si cambia los permisos del usuario original después de crear el clon, también debe cambiar los permisos del usuario clonado.

Por ejemplo, si crea un secreto con las credenciales de un usuario de base de datos, el secreto contiene una versión con esas credenciales.

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

**Primera rotación**: la función de rotación crea un clon del usuario con una contraseña generada y esas credenciales se convierten en la versión del secreto actual.

 ![\[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/es_es/secretsmanager/latest/userguide/images/AlternatingUsers2.png) 

**Segunda rotación**: la función de rotación actualiza la contraseña del usuario original.

 ![\[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/es_es/secretsmanager/latest/userguide/images/AlternatingUsers3.png) 

**Segunda rotación**: la función de rotación actualiza la contraseña del usuario clonado.

 ![\[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/es_es/secretsmanager/latest/userguide/images/AlternatingUsers4.png) 

# Funciones de rotación de Lambda
<a name="rotate-secrets_lambda-functions"></a>

En[Rotación con función de Lambda](rotate-secrets_lambda.md), una AWS Lambda función rota el secreto. AWS Secrets Manager utiliza [etiquetas de almacenamiento provisional](whats-in-a-secret.md) para identificar las versiones secretas durante la rotación.

Si AWS Secrets Manager no proporciona una [plantilla de función de rotación](reference_available-rotation-templates.md) para tu tipo secreto, puedes crear una función de rotación personalizada. Siga estas directrices para escribir la función de rotación:

**Prácticas recomendadas de funciones de rotación personalizadas**
+ Utilice la [plantilla de rotación genérica](reference_available-rotation-templates.md#OTHER_rotation_templates) como punto de partida.
+ Tenga cuidado al depurar o registrar sentencias. Pueden escribir información en Amazon CloudWatch Logs. Asegúrese de que los registros no contengan información confidencial.

  Para ver ejemplos de instrucciones de registro, consulte el código origen de [AWS Secrets Manager plantillas de funciones de rotación](reference_available-rotation-templates.md).
+ Por motivos de seguridad, AWS Secrets Manager solo permite que una función de rotación de Lambda gire el secreto directamente. La función de rotación no puede llamar a otra función de Lambda para rotar el secreto.
+ Para consultar orientación de depuración, consulte [Prueba y depuración de aplicaciones sin servidor](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-test-and-debug.html).
+ Si utiliza bibliotecas y archivos binarios externos (por ejemplo, para conectarse a un recurso), debe aplicarles revisiones y actualizarlos.
+ Package la función de rotación y cualquier dependencia en un archivo ZIP, como*my-function.zip*.

**aviso**  
Si se establece el parámetro de simultaneidad aprovisionado en un valor inferior a 10, se puede producir una limitación debido a la insuficiencia de subprocesos de ejecución para la función de Lambda. Para obtener más información, consulte [Comprender la simultaneidad reservada y simultaneidad aprovisionada](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned) en la Guía para desarrolladores de AWS Lambda AWS Lambda .

## Cuatro pasos en una función de rotación
<a name="rotate-secrets_lambda-functions-code"></a>

**Topics**
+ [`createSecret`: Crear una nueva versión del secreto](#w2aac21c11c29c11b5)
+ [**setSecret**: Cambiar las credenciales en la base de datos o el servicio](#w2aac21c11c29c11b7)
+ [**testSecret**: Probar la nueva versión del secreto](#w2aac21c11c29c11b9)
+ [**finishSecret**: Finalizar la rotación](#w2aac21c11c29c11c11)

### `createSecret`: Crear una nueva versión del secreto
<a name="w2aac21c11c29c11b5"></a>

El método `createSecret` primero comprueba si existe un secreto con una llamada a [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) con el valor transmitido de `ClientRequestToken`. Si no hay ningún secreto, crea uno nuevo con [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) y el token como `VersionId`. A continuación, genera un nuevo valor secreto con [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). Luego, llama a [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) para almacenarlo con la etiqueta provisional `AWSPENDING`. Almacenar el nuevo valor de secreto en `AWSPENDING` ayuda a garantizar la idempotencia. Si se produce un error en la rotación por cualquier motivo, puede hacer referencia a ese valor de secreto en llamadas posteriores. Consulte [How do I make my Lambda function idempotent](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/) (¿Cómo puedo hacer que mi función de Lambda sea idempotente?).

**Consejos para escribir su propia función de rotación**
+ Debe asegurarse de que el nuevo valor secreto solo incluya caracteres válidos para la base de datos o el servicio. Excluya caracteres con el parámetro `ExcludeCharacters`. 
+ A medida que pruebes la función, usa AWS CLI para ver las etapas de la versión: llama [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)y mira`VersionIdsToStages`.
+ Para Amazon RDS MySQL, al alternar la rotación de usuarios, Secrets Manager crea un usuario clonado con un nombre de no más de 16 caracteres. Puede modificar la función de rotación para permitir nombres de usuario más largos. La versión 5.7 y superior de MySQL admiten nombres de usuario de hasta 32 caracteres, sin embargo, Secrets Manager añade «\$1clone» (seis caracteres) al final del nombre de usuario, por lo que debe mantener el nombre de usuario con un máximo de 26 caracteres.

### **setSecret**: Cambiar las credenciales en la base de datos o el servicio
<a name="w2aac21c11c29c11b7"></a>

El método `setSecret` cambia la credencial en la base de datos o el servicio para que coincidan con el nuevo valor secreto en la versión de `AWSPENDING` del secreto. 

**Consejos para escribir su propia función de rotación**
+ Si se transmiten instrucciones a un servicio que las interpreta, como una base de datos, utilice la parametrización de consultas. Para obtener más información, consulte [Query Parameterization Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) en el *sitio web de OWASP*.
+ La función de rotación es un suplente privilegiado que tiene autorización para acceder a las credenciales del cliente y modificarlas tanto en el secreto de Secrets Manager como en el recurso de destino. Para evitar un posible [ataque de falsificación por solicitud](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), debe asegurarse de que ningún atacante pueda usar la función para acceder a otros recursos. Antes de actualizar la credencial, haga lo siguiente:
  + Compruebe que la credencial de la versión de `AWSCURRENT` del secreto sea válida. Si la credencial de `AWSCURRENT` no es válida, deje de intentar la rotación.
  + Compruebe que los valores de secreto de `AWSCURRENT` y `AWSPENDING` sean para el mismo recurso. En el caso de un nombre de usuario y una contraseña, compruebe que los nombres de usuario de `AWSCURRENT` y `AWSPENDING` sean los mismos. 
  + Compruebe que el recurso del servicio de destino sea el mismo. En el caso de una base de datos, compruebe que los nombres de host de `AWSCURRENT` y `AWSPENDING` sean los mismos.
+ En raras ocasiones, es posible que desee personalizar la función de rotación existente de una base de datos. Por ejemplo, al alternar la rotación de los usuarios, Secrets Manager crea el usuario clonado copiando los [parámetros de configuración del tiempo de ejecución](https://www.postgresql.org/docs/8.0/runtime-config.html) del primer usuario. Si desea incluir más atributos o cambiar los que se otorgan al usuario clonado, debe actualizar el código de la función. `set_secret` 

### **testSecret**: Probar la nueva versión del secreto
<a name="w2aac21c11c29c11b9"></a>

A continuación, la función de Lambda de rotación comprueba la versión de `AWSPENDING` del secreto utilizándolo para acceder a la base de datos o el servicio. Funciones de rotación basadas en [Plantillas de función de rotación](reference_available-rotation-templates.md) prueban el nuevo secreto mediante el acceso de lectura. 

### **finishSecret**: Finalizar la rotación
<a name="w2aac21c11c29c11c11"></a>

Por último, la función de Lambda de rotación mueve la etiqueta `AWSCURRENT` de la versión secreta anterior a esta versión, que también elimina la etiqueta `AWSPENDING` en la misma llamada a la API. Secrets Manager agrega la etiqueta provisional de `AWSPREVIOUS` a la versión anterior, para que usted conserve la última versión buena conocida del secreto. 

El método **finish\$1secret** utiliza [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) para mover la etiqueta provisional `AWSCURRENT` de la versión anterior del secreto a la nueva. Secrets Manager agrega automáticamente la etiqueta provisional `AWSPREVIOUS` a la versión anterior, para que retenga la última versión buena conocida del secreto. 

**Consejos para escribir su propia función de rotación**
+ No elimine `AWSPENDING` antes de este punto o mediante una llamada independiente a la API, ya que eso puede indicar a Secrets Manager que la rotación no se completó correctamente. Secrets Manager agrega la etiqueta provisional de `AWSPREVIOUS` a la versión anterior, para que usted conserve la última versión buena conocida del secreto. 

Si la rotación se realiza correctamente, es posible que se asocie la etiqueta provisional `AWSPENDING` a la misma versión que la versión de `AWSCURRENT`, o que no se asocie a ninguna versión. Si la etiqueta provisional `AWSPENDING` está presente pero no está asociada a la misma versión que `AWSCURRENT`, cualquier invocación posterior de la rotación presupone que existe una solicitud de rotación anterior aún en curso y se devuelve un error. Si la rotación no se realiza correctamente, es posible que se asocie la etiqueta provisional `AWSPENDING` a una versión de secreto vacía. Para obtener más información, consulte [Solución de problemas de rotación](troubleshoot_rotation.md).

# AWS Secrets Manager plantillas de funciones de rotación
<a name="reference_available-rotation-templates"></a>

AWS Secrets Manager proporciona un conjunto de plantillas de funciones de rotación que ayudan a automatizar la administración segura de las credenciales para varios sistemas y servicios de bases de datos. Las plantillas son funciones de ready-to-use Lambda que implementan las mejores prácticas para la rotación de credenciales, lo que le ayuda a mantener su postura de seguridad sin intervención manual.

Las plantillas admiten dos estrategias de rotación principales:
+ *Rotación de un solo usuario*, que actualiza las credenciales de un solo usuario.
+ *Rotación de usuarios alternos*, que mantiene dos usuarios separados para eliminar el tiempo de inactividad durante los cambios de credenciales.

Asimismo, Secrets Manager ofrece una plantilla genérica que sirve como punto de partida para cualquier tipo de secreto.

Para utilizar las plantillas, consulte lo siguiente:
+ [Rotación automática de secretos de bases de datos (consola)](rotate-secrets_turn-on-for-db.md)
+ [Rotación automática para secretos que no son de bases de datos (consola)](rotate-secrets_turn-on-for-other.md)

Para escribir su propia función de rotación, consulte [Escribir una función de rotación](rotate-secrets_lambda-functions.md).

**Contents**
+ [Amazon RDS y Amazon Aurora](#RDS_rotation_templates)
  + [Amazon RDS Db2 para un solo usuario](#sar-template-db2-singleuser)
  + [Usuarios alternos de Amazon RDS Db2](#sar-template-db2-multiuser)
  + [Un solo usuario de MariaDB en Amazon RDS](#sar-template-mariadb-singleuser)
  + [Usuarios alternativos de MariaDB en Amazon RDS](#sar-template-mariadb-multiuser)
  + [Amazon RDS y Amazon Aurora MySQL para un solo usuario](#sar-template-mysql-singleuser)
  + [Usuarios alternos de Amazon RDS y Amazon Aurora MySQL](#sar-template-mysql-multiuser)
  + [Un solo usuario de Oracle en Amazon RDS](#sar-template-oracle-singleuser)
  + [Usuarios alternativos de Oracle en Amazon RDS](#sar-template-oracle-multiuser)
  + [Amazon RDS y Amazon Aurora PostgreSQL para un solo usuario](#sar-template-postgre-singleuser)
  + [Usuarios alternos de Amazon RDS y Amazon Aurora PostgreSQL](#sar-template-postgre-multiuser)
  + [Amazon RDS Microsoft (usuario SQLServer único)](#sar-template-sqlserver-singleuser)
  + [Amazon RDS, Microsoft, SQLServer alternancia de usuarios](#sar-template-sqlserver-multiuser)
+ [Amazon DocumentDB (compatible con MongoDB)](#NON-RDS_rotation_templates)
  + [Usuario único de Amazon DocumentDB](#sar-template-mongodb-singleuser)
  + [Usuarios alternativos de Amazon DocumentDB](#sar-template-mongodb-multiuser)
+ [Amazon Redshift](#template-redshift)
  + [Usuario único de Amazon Redshift](#sar-template-redshift-singleuser)
  + [Usuarios alternativos de Amazon Redshift](#sar-template-redshift-multiuser)
+ [Amazon Timestream para InfluxDB](#template-TimeStream)
  + [Usuario único de Amazon Timestream para InfluxDB](#template-TimeStream-singleuser)
  + [Usuarios alternos de Amazon Timestream para InfluxDB](#template-TimeStream-multiuser)
+ [Amazon ElastiCache](#template-ELC)
+ [Active Directory](#template-AD)
  + [Credenciales de Active Directory](#template-AD-password)
  + [Teclado de Active Directory](#template-AD-keytab)
+ [Otros tipos de secretos](#OTHER_rotation_templates)

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

### Amazon RDS Db2 para un solo usuario
<a name="sar-template-db2-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSDb2 RotationSingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString`:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia: **[python-ibmdb](https://github.com/ibmdb/python-ibmdb)

### Usuarios alternos de Amazon RDS Db2
<a name="sar-template-db2-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSDb2 RotationMultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString`:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia: **[python-ibmdb](https://github.com/ibmdb/python-ibmdb)

### Un solo usuario de MariaDB en Amazon RDS
<a name="sar-template-mariadb-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSMaria DBRotation SingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString`:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyMy SQL 1.0.2. Si utiliza la contraseña sha256 para la autenticación, PyMy SQL [rsa]. Para obtener información sobre el uso de paquetes con código compilado en un entorno de tiempo de ejecución de Lambda, consulte [¿Cómo puedo añadir paquetes de Python con binarios compilados a mi paquete de implementación y hacer que el paquete sea compatible con Lambda?](https://repost.aws/knowledge-center/lambda-python-package-compatible) en el *Centro de conocimientos de AWS *.

### Usuarios alternativos de MariaDB en Amazon RDS
<a name="sar-template-mariadb-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSMaria DBRotation MultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString`:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyMy SQL 1.0.2. Si utiliza la contraseña sha256 para la autenticación, PyMy SQL [rsa]. Para obtener información sobre el uso de paquetes con código compilado en un entorno de tiempo de ejecución de Lambda, consulte [¿Cómo puedo añadir paquetes de Python con binarios compilados a mi paquete de implementación y hacer que el paquete sea compatible con Lambda?](https://repost.aws/knowledge-center/lambda-python-package-compatible) en el *Centro de conocimientos de AWS *.

### Amazon RDS y Amazon Aurora MySQL para un solo usuario
<a name="sar-template-mysql-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSMy SQLRotation SingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyMy SQL 1.0.2. Si utiliza la contraseña sha256 para la autenticación, PyMy SQL [rsa]. Para obtener información sobre el uso de paquetes con código compilado en un entorno de tiempo de ejecución de Lambda, consulte [¿Cómo puedo añadir paquetes de Python con binarios compilados a mi paquete de implementación y hacer que el paquete sea compatible con Lambda?](https://repost.aws/knowledge-center/lambda-python-package-compatible) en el *Centro de conocimientos de AWS *.

### Usuarios alternos de Amazon RDS y Amazon Aurora MySQL
<a name="sar-template-mysql-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSMy SQLRotation MultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyMy SQL 1.0.2. Si utiliza la contraseña sha256 para la autenticación, PyMy SQL [rsa]. Para obtener información sobre el uso de paquetes con código compilado en un entorno de tiempo de ejecución de Lambda, consulte [¿Cómo puedo añadir paquetes de Python con binarios compilados a mi paquete de implementación y hacer que el paquete sea compatible con Lambda?](https://repost.aws/knowledge-center/lambda-python-package-compatible) en el *Centro de conocimientos de AWS *.

### Un solo usuario de Oracle en Amazon RDS
<a name="sar-template-oracle-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSOracle RotationSingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** [python-oracledb 2.4.1](https://github.com/oracle/python-oracledb)

### Usuarios alternativos de Oracle en Amazon RDS
<a name="sar-template-oracle-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSOracle RotationMultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** [python-oracledb 2.4.1](https://github.com/oracle/python-oracledb)

### Amazon RDS y Amazon Aurora PostgreSQL para un solo usuario
<a name="sar-template-postgre-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSPostgre SQLRotation SingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyGre SQL 5.2.5

### Usuarios alternos de Amazon RDS y Amazon Aurora PostgreSQL
<a name="sar-template-postgre-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSPostgre SQLRotation MultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia:** PyGre SQL 5.2.5

### Amazon RDS Microsoft (usuario SQLServer único)
<a name="sar-template-sqlserver-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSSQLServer RotationSingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia: **Pymssql 2.2.2

### Amazon RDS, Microsoft, SQLServer alternancia de usuarios
<a name="sar-template-sqlserver-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManager RDSSQLServer RotationMultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon RDS y Aurora](reference_secret_json_structure.md#reference_secret_json_structure_rds).
+ **Código fuente: 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)
+ **Dependencia: **Pymssql 2.2.2

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

### Usuario único de Amazon DocumentDB
<a name="sar-template-mongodb-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManagerMongo DBRotation SingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon DocumentDB](reference_secret_json_structure.md#reference_secret_json_structure_docdb).
+ **Código fuente: 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)
+ **Dependencia:** PyMongo 4.2.0

### Usuarios alternativos de Amazon DocumentDB
<a name="sar-template-mongodb-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManagerMongo DBRotation MultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon DocumentDB](reference_secret_json_structure.md#reference_secret_json_structure_docdb).
+ **Código fuente: 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)
+ **Dependencia:** PyMongo 4.2.0

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

### Usuario único de Amazon Redshift
<a name="sar-template-redshift-singleuser"></a>
+ **Nombre de la plantilla:** SecretsManagerRedshiftRotationSingleUser
+ **Estrategia de rotación:** [Estrategia de rotación: un solo usuario](rotation-strategy.md#rotating-secrets-one-user-one-password).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon Redshift](reference_secret_json_structure.md#reference_secret_json_structure_RS).
+ **Código fuente: 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)
+ **Dependencia:** PyGre SQL 5.2.5

### Usuarios alternativos de Amazon Redshift
<a name="sar-template-redshift-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManagerRedshiftRotationMultiUser
+ **Estrategia de rotación:** [Estrategia de rotación: usuarios alternativos](rotation-strategy.md#rotating-secrets-two-users).
+ **Estructura de `SecretString` esperada:** [Credenciales de Amazon Redshift](reference_secret_json_structure.md#reference_secret_json_structure_RS).
+ **Código fuente: 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)
+ **Dependencia:** PyGre SQL 5.2.5

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

Para usar estas plantillas, consulte [Cómo utiliza Amazon Timestream para InfluxDB los secretos](https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-security-db-secrets.html) en la *Guía para desarrolladores de Amazon Timestream.*

### Usuario único de Amazon Timestream para InfluxDB
<a name="template-TimeStream-singleuser"></a>
+ **Nombre de plantilla: Influx** SecretsManager  DBRotation SingleUser
+ **Estructura de `SecretString` esperada:** [Estructura secreta de Amazon Timestream para InfluxDB](reference_secret_json_structure.md#reference_secret_json_structure_TIME).
+ **Código fuente: 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)
+ **Dependencia: **cliente python InfluxDB 2.0

### Usuarios alternos de Amazon Timestream para InfluxDB
<a name="template-TimeStream-multiuser"></a>
+ **Nombre de la plantilla:** SecretsManagerInflux DBRotation MultiUser
+ **Estructura de `SecretString` esperada:** [Estructura secreta de Amazon Timestream para InfluxDB](reference_secret_json_structure.md#reference_secret_json_structure_TIME).
+ **Código fuente: 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)
+ **Dependencia: **cliente python InfluxDB 2.0

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

Para usar esta plantilla, consulta [Rotación automática de contraseñas para los usuarios](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/User-Secrets-Manager.html) en la *Guía del ElastiCache usuario de Amazon*.
+ **Nombre de la plantilla:** SecretsManagerElasticacheUserRotation
+ **Estructura de `SecretString` esperada:** [ElastiCache Credenciales de Amazon](reference_secret_json_structure.md#reference_secret_json_structure_ELC).
+ **Código fuente: 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>

### Credenciales de Active Directory
<a name="template-AD-password"></a>
+ **Nombre de la plantilla:** SecretsManagerActiveDirectoryRotationSingleUser
+ **Estructura de `SecretString` esperada:** [Credenciales de Active Directory](reference_secret_json_structure.md#reference_secret_json_structure_AD).
+ **Código fuente: 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)

### Teclado de Active Directory
<a name="template-AD-keytab"></a>
+ **Nombre de la plantilla:** SecretsManagerActiveDirectoryAndKeytabRotationSingleUser
+ **Estructura de `SecretString` esperada:** [Credenciales de Active Directory](reference_secret_json_structure.md#reference_secret_json_structure_AD).
+ **Código fuente: 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)
+ **Dependencias:** msktutil

## Otros tipos de secretos
<a name="OTHER_rotation_templates"></a>

Secrets Manager proporciona esta plantilla como punto de partida para que pueda crear una función de rotación para cualquier tipo de secreto.
+ **Nombre de la plantilla:** SecretsManagerRotationTemplate
+ **Código fuente: 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)

# Permisos del rol de ejecución de la función de rotación Lambda para AWS Secrets Manager
<a name="rotating-secrets-required-permissions-function"></a>

Para [Rotación con función de Lambda](rotate-secrets_lambda.md), cuando Secrets Manager utiliza una función de Lambda para rotar un secreto, Lambda asume un [rol de ejecución de IAM](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) y proporciona esas credenciales al código de la función de Lambda. Consulte las instrucciones sobre cómo configurar la rotación automática en los siguientes recursos: 
+ [Rotación automática de secretos de bases de datos (consola)](rotate-secrets_turn-on-for-db.md)
+ [Rotación automática para secretos que no son de bases de datos (consola)](rotate-secrets_turn-on-for-other.md)
+ [Rotación automática (AWS CLI)](rotate-secrets_turn-on-cli.md)

En los ejemplos siguientes se muestran políticas insertadas para roles de ejecución de la función de rotación de Lambda. Para crear un rol de ejecución y adjuntar una política de permisos, consulte [Rol de ejecución de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html).

**Topics**
+ [Política para el rol de ejecución de una función de rotación de Lambda](#rotating-secrets-required-permissions-function-example)
+ [Instrucción de política para una clave administrada por el cliente](#rotating-secrets-required-permissions-function-cust-key-example)
+ [Instrucción de política para la estrategia de usuarios alternativos](#rotating-secrets-required-permissions-function-alternating-example)

## Política para el rol de ejecución de una función de rotación de Lambda
<a name="rotating-secrets-required-permissions-function-example"></a>

La siguiente política de ejemplo permite a la función de rotación lo siguiente:
+ Ejecute las operaciones de Secrets Manager para*SecretARN*.
+ Crear una contraseña.
+ Establecer la configuración requerida si la base de datos o el servicio se ejecutan en una VPC. Consulte [Configuración de una función de Lambda para acceder a los recursos de una 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"
        }
    ]
}
```

------

## Instrucción de política para una clave administrada por el cliente
<a name="rotating-secrets-required-permissions-function-cust-key-example"></a>

Si el secreto está cifrado con una clave KMS distinta de la Clave administrada de AWS `aws/secretsmanager`, tiene que conceder permiso al rol de ejecución de Lambda para utilizar la clave. Puede utilizar el [contexto de cifrado SecretARN](security-encryption.md#security-encryption-encryption-context) para limitar el uso de la función de descifrado, de modo que el rol de la función de rotación solo tenga acceso para descifrar el secreto que es responsable de rotar. En el ejemplo siguiente, se muestra una instrucción que se debe agregar a la política del rol de ejecución para descifrar el secreto con una clave de KMS.

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

Si desea utilizar la función de rotación para varios secretos cifrados con una clave administrada por el cliente, agregue una sentencia como la del siguiente ejemplo para permitir que el rol de ejecución descifre el secreto.

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

## Instrucción de política para la estrategia de usuarios alternativos
<a name="rotating-secrets-required-permissions-function-alternating-example"></a>

Para obtener información sobre la *estrategia de rotación de usuarios alternativos*, consulte [Estrategias de rotación de la función de Lambda](rotation-strategy.md).

En el caso de un secreto que contenga credenciales de Amazon RDS, si utiliza la estrategia de usuarios alternativos y [Amazon RDS gestiona](rotate-secrets_managed.md) el secreto del superusuario, también debe permitir que la función de rotación llame en modo de solo lectura APIs en Amazon RDS para que pueda obtener la información de conexión de la base de datos. Te recomendamos que adjuntes la política AWS gestionada de [Amazon RDSRead OnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSReadOnlyAccess.html).

La siguiente política de ejemplo permite a la función:
+ Ejecute las operaciones de Secrets Manager para*SecretARN*.
+ Recuperar las credenciales del secreto de superusuario. Secrets Manager utiliza las credenciales del secreto de superusuario para actualizar las credenciales en el secreto rotado.
+ Crear una contraseña.
+ Establecer la configuración requerida si la base de datos o el servicio se ejecutan en una VPC. Para obtener más información, consulte [Configuración de una función de Lambda para obtener acceso a los recursos en una 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"
        }
    ]
}
```

------

# Acceso a la red para la función AWS Lambda de rotación
<a name="rotation-function-network-access"></a>

Para [Rotación con función de Lambda](rotate-secrets_lambda.md), cuando Secrets Manager usa una función de Lambda para rotar un secreto, la función de rotación de Lambda debe poder acceder al secreto. Si su secreto contiene credenciales, la función de Lambda también debe poder acceder al origen de esas credenciales, como una base de datos o un servicio.

**Acceder a un secreto**  
La función de rotación de Lambda debe ser capaz de acceder a un punto de enlace de Secrets Manager. Si la función de Lambda puede acceder a Internet, puede utilizar un punto de enlace público. Para buscar un punto de conexión, consulte [AWS Secrets Manager puntos finales](asm_access.md#endpoints).  
Si la función de Lambda se ejecuta en una VPC que no tiene acceso a Internet, recomendamos configurar los puntos de enlace privados del servicio de Secrets Manager dentro de la VPC. La VPC puede interceptar entonces las solicitudes dirigidas al punto de enlace regional público y redirigirlas al punto de enlace privado. Para obtener más información, consulte [Puntos de conexión de VPC (AWS PrivateLink)](vpc-endpoint-overview.md).  
También puede habilitar la función de Lambda para acceder a un punto de conexión público de Secrets Manager. Para ello, agregue una [puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) o una [puerta de enlace de Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) a su VPC. Esto permite que el tráfico de la VPC alcance el punto de conexión público. Esto expone a la VPC a más riesgo, ya que desde la red pública de Internet se puede atacar la dirección IP de la gateway.

**(Opcional) Acceder a la base de datos o al servicio**  
En el caso de los secretos, como las claves de API, no hay ninguna base de datos o servicio de origen que deba actualizar junto con el secreto.  
Si su base de datos o servicio se ejecuta en una EC2 instancia de Amazon en una VPC, le recomendamos que configure la función Lambda para que se ejecute en la misma VPC. A continuación, la función de rotación puede comunicarse directamente con el servicio. Para obtener más información, consulte [Configuración del acceso a la VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring).  
Para permitir que la función de Lambda tenga acceso a la base de datos o el servicio, debe asegurarse de que los grupos de seguridad adjuntos a la función de rotación de Lambda permitan conexiones salientes a la base de datos o el servicio. Asimismo, debe asegurarse de que los grupos de seguridad adjuntos a la base de datos o el servicio permitan conexiones entrantes desde la función de rotación de Lambda. 

# Solucionar problemas de rotación AWS Secrets Manager
<a name="troubleshoot_rotation"></a>

Para muchos servicios, Secrets Manager utiliza una función de Lambda para rotar secretos. Para obtener más información, consulte [Rotación con función de Lambda](rotate-secrets_lambda.md). La función de rotación de Lambda interactúa con la base de datos o el servicio para el que está destinado el secreto, así como con Secrets Manager. Si la rotación no funciona de la manera esperada, primero debe comprobar los CloudWatch registros.

**nota**  
Algunos servicios pueden administrar los secretos por usted, incluida la administración de la rotación automática. Para obtener más información, consulte [Rotación gestionada de AWS Secrets Manager secretos](rotate-secrets_managed.md).

**Topics**
+ [¿Cómo solucionar errores de rotación secretos en las funciones AWS Lambda](#troubleshooting-secret-rotation-failures)
+ [No hay actividad después de “Found credentials in environment variables” (Se encontraron credenciales en variables de entorno)](#troubleshoot_rotation_timing-out)
+ [No hay actividad después de createSecret](#troubleshoot_rotation_createSecret)
+ [Error: “No se permite el acceso a KMS”](#troubleshoot_rotation_kms-key)
+ [Error: “Key is missing from secret JSON” (Falta la clave en el JSON del secreto)](#tshoot-lambda-mismatched-secretvalue)
+ [Error: “setSecret: Unable to log into database” (setSecret: no se puede iniciar sesión en la base de datos)](#troubleshoot_rotation_setSecret)
+ [Error: “No se puede importar el módulo 'lambda\$1function'”](#tshoot-python-version)
+ [Se ha actualizado una función de rotación existente de Python 3.7 a 3.9](#troubleshoot_rotation_python39)
+ [Se ha actualizado una función de rotación existente de Python 3.9 a 3.10](#troubleshoot_rotation_python_310)
+ [AWS Lambda rotación secreta con error `PutSecretValue`](#troubleshoot_rotation_putsecretvalue)
+ [Error: «Error al ejecutar lambda durante el paso» *<arn>* *<a rotation>*](#concurrency-related-failures)

## ¿Cómo solucionar errores de rotación secretos en las funciones AWS Lambda
<a name="troubleshooting-secret-rotation-failures"></a>

Si ocurren errores de rotación de secretos en sus funciones de Lambda, siga los siguientes pasos para solucionar el problema.

### Causas posibles
<a name="possible-causes"></a>
+ Ejecuciones simultáneas insuficientes para la función de Lambda
+ Condiciones de carrera provocadas por múltiples llamadas a la API durante la rotación
+ Lógica de función de Lambda incorrecta
+ Problemas de red entre la función de Lambda y la base de datos

### Pasos generales para las soluciones de problemas
<a name="general-troubleshooting-steps"></a>

1. Analice los CloudWatch registros:
   + Busque mensajes de error específicos o comportamientos inesperados en los registros de las funciones de Lambda
   + Compruebe que se estén intentando realizar todos los pasos de rotación (**CreateSecret**, **SetSecret**, **TestSecret**, **FinishSecret**)

1. Revise las llamadas a la API durante la rotación:
   + Evite realizar llamadas a la API mutantes en el secreto durante la rotación de Lambda
   + Asegúrese de que no haya ninguna condición de carrera entre las llamadas **RotateSecret** y **PutSecretValue**

1. Compruebe la lógica de la función de Lambda:
   + Confirma que estás usando el código de AWS muestra más reciente para la rotación secreta
   + Si utiliza un código personalizado, revíselo para comprobar que se gestionan correctamente todos los pasos de rotación

1. Compruebe la configuración de la red:
   + Verifique que las reglas del grupo de seguridad permitan a la función de Lambda acceder a la base de datos
   + Garantice el acceso adecuado al punto de conexión de VPC o al punto de conexión público para Secrets Manager

1. Pruebe versiones de un secreto:
   + Comprueba que la AWSCURRENT versión del secreto permita el acceso a la base de datos
   + Compruebe AWSPREVIOUS si nuestras AWSPENDING versiones son válidas

1. Borre las rotaciones pendientes:
   + Si la rotación falla constantemente, borre la etiqueta AWSPENDING provisional y vuelva a intentar la rotación

1. Compruebe la configuración de simultaneidad de Lambda:
   + Compruebe que la configuración de simultaneidad sea adecuada para su carga de trabajo
   + Consulte la sección “Solución de problemas de rotación relacionados con la simultaneidad” si sospecha que hay problemas de simultaneidad.

## No hay actividad después de “Found credentials in environment variables” (Se encontraron credenciales en variables de entorno)
<a name="troubleshoot_rotation_timing-out"></a>

Si no hay actividad después de “Found credentials in environment variables” (Se encontraron credenciales en variables de entorno) y la duración de la tarea es larga (por ejemplo, el tiempo de espera predeterminado de Lambda de 30 000 ms), es posible que la función de Lambda agote el tiempo de espera al intentar llegar al punto de conexión de Secrets Manager.

La función de rotación de Lambda debe ser capaz de acceder a un punto de enlace de Secrets Manager. Si la función de Lambda puede acceder a Internet, puede utilizar un punto de enlace público. Para buscar un punto de conexión, consulte [AWS Secrets Manager puntos finales](asm_access.md#endpoints).

Si la función de Lambda se ejecuta en una VPC que no tiene acceso a Internet, recomendamos configurar los puntos de enlace privados del servicio de Secrets Manager dentro de la VPC. La VPC puede interceptar entonces las solicitudes dirigidas al punto de enlace regional público y redirigirlas al punto de enlace privado. Para obtener más información, consulte [Puntos de conexión de VPC (AWS PrivateLink)](vpc-endpoint-overview.md).

También puede habilitar la función de Lambda para acceder a un punto de conexión público de Secrets Manager. Para ello, agregue una [puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) o una [puerta de enlace de Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) a su VPC. Esto permite que el tráfico de la VPC alcance el punto de conexión público. Esto expone a la VPC a más riesgo, ya que desde la red pública de Internet se puede atacar la dirección IP de la gateway.

## No hay actividad después de createSecret
<a name="troubleshoot_rotation_createSecret"></a>

A continuación, se indican los problemas que pueden provocar que la rotación se detenga después de createSecret:

**La red de VPC ACLs no permite la entrada y salida del tráfico HTTPS.**  
Para obtener más información, consulte [Control del tráfico a las subredes mediante la red ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) en la Guía del *usuario de Amazon VPC*.

**La configuración del tiempo de espera de la función de Lambda es demasiado corta para realizar la tarea. **  
Para obtener más información, consulte [Configuración de las opciones de las funciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) en la *Guía para desarrolladores de AWS Lambda *.

**El punto final de la VPC de Secrets Manager no permite que la VPC entre CIDRs en los grupos de seguridad asignados. **  
Para obtener más información, consulte [Controlar el tráfico hacia los recursos mediante grupos de seguridad](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) en la *Guía del usuario de Amazon VPC*.

**La política de puntos de conexión de VPC de Secrets Manager no permite que Lambda utilice el punto de conexión de VPC. **  
Para obtener más información, consulte [Uso de un punto final AWS Secrets Manager de VPC](vpc-endpoint-overview.md).

**El secreto utiliza la rotación de usuarios alternativos, Amazon RDS administra el secreto del superusuario y la función de Lambda no puede acceder a la API de RDS.**  
Para [la rotación alternativa de los usuarios](rotation-strategy.md#rotating-secrets-two-users) donde [otro AWS servicio](service-linked-secrets.md) es el que gestiona el superusuario, Lambda debe poder llamar al punto de conexión del servicio de Amazon RDS para obtener la información de conexión de la base de datos. Recomendamos configurar un punto de conexión de VPC para el servicio de base de datos. Para obtener más información, consulte lo siguiente:  
+  [Puntos de conexión de VPC de la API y la interfaz de Amazon RDS ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html) en la *Guía de usuario de Amazon RDS*.
+ [Cómo trabajar con puntos de conexión de VPC en](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-working-with-endpoints.html) la Guía de administración de *Amazon Redshift*.

## Error: “No se permite el acceso a KMS”
<a name="troubleshoot_rotation_kms-key"></a>

Si ve `ClientError: An error occurred (AccessDeniedException) when calling the GetSecretValue operation: Access to KMS is not allowed`, la función de rotación no tiene permiso para descifrar el secreto mediante la clave de KMS que se utilizó para cifrarlo. Es posible que haya una condición en la política de permisos que limite el contexto de cifrado a un secreto específico. Para obtener más información acerca del permiso necesario, consulte [Instrucción de política para una clave administrada por el cliente](rotating-secrets-required-permissions-function.md#rotating-secrets-required-permissions-function-cust-key-example).

## Error: “Key is missing from secret JSON” (Falta la clave en el JSON del secreto)
<a name="tshoot-lambda-mismatched-secretvalue"></a>

Una función de rotación de Lambda requiere que el valor del secreto esté en una estructura JSON específica. Si aparece este error, es posible que falte una clave en el JSON a la que la función de rotación intentó acceder. Para obtener información sobre la estructura JSON de cada tipo de secreto, consulte [Estructura JSON de AWS Secrets Manager secretos](reference_secret_json_structure.md).

## Error: “setSecret: Unable to log into database” (setSecret: no se puede iniciar sesión en la base de datos)
<a name="troubleshoot_rotation_setSecret"></a>

A continuación, se indican los problemas que pueden provocar este error:

**La función de rotación no puede acceder a la base de datos.**  
Si la duración de la tarea es larga (por ejemplo, más de 5000 ms), es posible que la función de rotación de Lambda no pueda acceder a la base de datos a través de la red.   
Si la base de datos o el servicio se ejecutan en una instancia de Amazon EC2 en una VPC, es recomendable configurar la función de Lambda para que se ejecute en la misma VPC. A continuación, la función de rotación puede comunicarse directamente con el servicio. Para obtener más información, consulte [Configuración del acceso a la VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring).  
Para permitir que la función de Lambda tenga acceso a la base de datos o el servicio, debe asegurarse de que los grupos de seguridad adjuntos a la función de rotación de Lambda permitan conexiones salientes a la base de datos o el servicio. Asimismo, debe asegurarse de que los grupos de seguridad adjuntos a la base de datos o el servicio permitan conexiones entrantes desde la función de rotación de Lambda. 

**Las credenciales del secreto son incorrectas.**  
Si la duración de la tarea es corta, es posible que la función de rotación de Lambda no pueda autenticarse con las credenciales del secreto. Compruebe las credenciales iniciando sesión manualmente con la información de `AWSPREVIOUS` las versiones `AWSCURRENT` y del secreto mediante el comando. AWS CLI [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 datos utiliza `scram-sha-256` para cifrar las contraseñas.**  
Si la base de datos es Aurora PostgreSQL versión 13 o posterior y utiliza `scram-sha-256` para cifrar contraseñas, pero la función de rotación utiliza `libpq` versión 9 o posterior, que no admite `scram-sha-256`, la función de rotación no se puede conectar a la base de datos.   

**Para determinar qué usuarios de bases de datos utilizan cifrado con `scram-sha-256`**
+ Consulte *Checking for users with non-SCRAM passwords* (Búsqueda de usuarios con contraseñas que no sean de Scram) en la entrada de blog [SCRAM Authentication in RDS for PostgreSQL 13](https://aws.amazon.com/blogs/database/scram-authentication-in-rds-for-postgresql-13/) (Autenticación SCRAM en RDS para PostgreSQL 13).

**Para determinar qué versión de `libpq` utiliza la función de rotación**

1. En un equipo basado en Linux, en la consola de Lambda, vaya a la función de rotación y descargue el paquete de implementación. Descomprima el archivo zip en un directorio de trabajo.

1. En una línea de comandos, en el directorio de trabajo, ejecute:

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

1. Si ve la cadena *`PostgreSQL-9.4.x`*, o bien una versión principal inferior a 10, entonces la función de rotación no admite `scram-sha-256`.
   + Salida de una función de rotación que no admite `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]`
   + Salida de una función de rotación que admite `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]`
   + Salida de una función de rotación que admite `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]`
   + Salida de una función de rotación que admite `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 la rotación de secretos automática se configuró antes del 30 de diciembre de 2021, la función de rotación incluía una versión previa de `libpq` que no admite `scram-sha-256`. Para que se admita `scram-sha-256`, se debe [volver a crear la función de rotación](rotate-secrets_turn-on-for-db.md). 

**Es necesario SSL/TLS acceder a la base de datos.**  
Si la base de datos requiere una SSL/TLS conexión, pero la función de rotación utiliza una conexión no cifrada, la función de rotación no podrá conectarse a la base de datos. Las funciones de rotación de Amazon RDS (a excepción de Oracle y Db2) y Amazon DocumentDB utilizan una capa de sockets seguros (SSL) o una seguridad de la capa de transporte (TLS) de forma automática para conectarse a su base de datos, si está disponible. De lo contrario, utilizan una conexión no cifrada.  
Si configuras la rotación secreta automática antes del 20 de diciembre de 2021, la función de rotación podría estar basada en una plantilla anterior que no era compatibleSSL/TLS. To support connections that use SSL/TLS, por lo que tendrás que [volver a crear la función de rotación](rotate-secrets_turn-on-for-db.md). 

**Para determinar cuándo se creó la función de rotación**

1. En la consola de Secrets Manager [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/), abre tu secreto. En la sección **Rotation configuration** (Configuración de rotación), en **Lambda rotation function** (Función de rotación de Lambda), podrá ver **Lambda function ARN** (ARN de la función de Lambda), por ejemplo, `arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction `. Copie el nombre de la función desde el final del ARN, que en este ejemplo sería ` SecretsManagerMyRotationFunction `. 

1. En la AWS Lambda consola [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), en **Funciones**, pegue el nombre de la función Lambda en el cuadro de búsqueda, elija Entrar y, a continuación, elija la función Lambda. 

1. En la página de detalles de la función, en la pestaña **Configuration** (Configuración), en **Tags** (Etiquetas), copie el valor junto a la clave **aws:cloudformation:stack-name**. 

1. En la AWS CloudFormation consola [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/), en **Stacks**, pega el valor de la clave en el cuadro de búsqueda y, a continuación, selecciona Entrar.

1. La lista de pilas se filtra para que, de esta manera, aparezca únicamente la pila que creó la función de rotación de Lambda. En la columna **Created date** (Fecha de creación), consulte la fecha en que se creó la pila. Esta es la fecha en que se creó la función de rotación de Lambda.

## Error: “No se puede importar el módulo 'lambda\$1function'”
<a name="tshoot-python-version"></a>

Es posible que reciba este error si ejecuta una función de Lambda anterior que se actualizó automáticamente de Python 3.7 a una versión más reciente de Python. Para resolver el error, puede volver a cambiar la versión de la función de Lambda a Python 3.7 y, a continuación, [Se ha actualizado una función de rotación existente de Python 3.7 a 3.9](#troubleshoot_rotation_python39). Para obtener más información, consulte [¿Por qué no se pudo rotar la función de Lambda de Secrets Manager y recibí el error “No se encontró el módulo pg”](https://repost.aws/knowledge-center/secrets-manager-lambda-rotation)? en *AWS  re:Post*.

## Se ha actualizado una función de rotación existente de Python 3.7 a 3.9
<a name="troubleshoot_rotation_python39"></a>

Algunas funciones de rotación creadas antes de noviembre de 2022 utilizaban Python 3.7. El AWS SDK para Python dejó de ser compatible con Python 3.7 en diciembre de 2023. Para obtener más información, consulte [Actualizaciones de la política de soporte de Python para AWS SDKs y Herramientas](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/). Para cambiar a una nueva función de rotación que utilice Python 3.9, puede añadir una propiedad de tiempo de ejecución a una función de rotación existente o volver a crear la función de rotación.

**Para encontrar las funciones de rotación de Lambda, utilice Python 3.7**

1. Inicie sesión en Consola de administración de AWS y abra la AWS Lambda consola en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. En la lista **Funciones**, filtre por **SecretsManager**.

1. En la lista filtrada de funciones, en **Tiempo de ejecución**, busque Python 3.7.

**Topics**
+ [Opción 1: Vuelva a crear la función de rotación mediante CloudFormation](#update-python-opt-1)
+ [Opción 2: actualice el tiempo de ejecución de la función de rotación existente mediante CloudFormation](#update-python-opt-2)
+ [Opción 3: Para AWS CDK los usuarios, actualice la biblioteca de CDK](#update-python-opt-3)

### Opción 1: Vuelva a crear la función de rotación mediante CloudFormation
<a name="update-python-opt-1"></a>

Cuando se utiliza la consola de Secrets Manager para activar la rotación, Secrets Manager se utiliza CloudFormation para crear los recursos necesarios, incluida la función de rotación de Lambda. Si ha utilizado la consola para activar la rotación o ha creado la función de rotación mediante una CloudFormation pila, puede utilizar la misma CloudFormation pila para volver a crear la función de rotación con un nombre nuevo. La nueva función usa la versión más reciente de Python.

**Para buscar la CloudFormation pila que creó la función de rotación**
+ En la página de detalles de la función de Lambda, seleccione la pestaña **Configuración**, y elija **Etiquetas**. Vea el ARN junto a **aws:cloudformation:stack-id**.

  El nombre de la pila está incrustado en el ARN, como se muestra en el siguiente ejemplo.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nombre de pila: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Para recrear una función de rotación (CloudFormation)**

1. En CloudFormation, busque la pila por su nombre y, a continuación, seleccione **Actualizar**. 

   Si aparece un cuadro de diálogo en el que se recomienda actualizar la pila raíz, seleccione **Ir a la pila raíz** y, a continuación, elija **Actualizar**.

1. En la página de **Pila de actualizaciones**, en **Preparar plantilla**, elija **Editar en Application Composer** y, a continuación, en **Editar plantilla en Application Composer**, elija el botón **Editar en Application Composer**.

1. En Application Composer, haga lo siguiente:

   1. En el código de la plantilla, en `SecretRotationScheduleHostedRotationLambda`, sustituya el valor para `"functionName": "SecretsManagerTestRotationRDS"` por un nuevo nombre de función, por ejemplo, en JSON, `"functionName": "SecretsManagerTestRotationRDSupdated"` 

   1. Seleccione **Actualizar plantilla**.

   1. En el cuadro de diálogo **Continuar a CloudFormation**, elija **Confirmar y continuar a CloudFormation**.

1. Continúe con el flujo de trabajo de la CloudFormation pila y, a continuación, seleccione **Enviar**.

### Opción 2: actualice el tiempo de ejecución de la función de rotación existente mediante CloudFormation
<a name="update-python-opt-2"></a>

Cuando se utiliza la consola de Secrets Manager para activar la rotación, Secrets Manager se utiliza CloudFormation para crear los recursos necesarios, incluida la función de rotación de Lambda. Si ha utilizado la consola para activar la rotación o ha creado la función de rotación mediante una CloudFormation pila, puede utilizar la misma CloudFormation pila para actualizar el tiempo de ejecución de la función de rotación.

**Para buscar la CloudFormation pila que creó la función de rotación**
+ En la página de detalles de la función de Lambda, seleccione la pestaña **Configuración**, y elija **Etiquetas**. Vea el ARN junto a **aws:cloudformation:stack-id**.

  El nombre de la pila está incrustado en el ARN, como se muestra en el siguiente ejemplo.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nombre de pila: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Para actualizar el tiempo de ejecución de una función de rotación (CloudFormation)**

1. En CloudFormation, busque la pila por su nombre y, a continuación, seleccione **Actualizar**. 

   Si aparece un cuadro de diálogo en el que se recomienda actualizar la pila raíz, seleccione **Ir a la pila raíz** y, a continuación, elija **Actualizar**.

1. En la página de **Pila de actualizaciones**, en **Preparar plantilla**, elija **Editar en Application Composer** y, a continuación, en **Editar plantilla en Application Composer**, elija el botón **Editar en Application Composer**.

1. En Application Composer, haga lo siguiente:

   1. En la plantilla JSON, para `SecretRotationScheduleHostedRotationLambda`, en `Properties`, en `Parameters`, agregue **"runtime": "python3.9"**.

   1. Seleccione **Actualizar plantilla**.

   1. En el cuadro de diálogo **Continuar a CloudFormation**, elija **Confirmar y continuar a CloudFormation**.

1. Continúe con el flujo de trabajo de la CloudFormation pila y, a continuación, seleccione **Enviar**.

### Opción 3: Para AWS CDK los usuarios, actualice la biblioteca de CDK
<a name="update-python-opt-3"></a>

Si utilizaste la versión AWS CDK anterior a la v2.94.0 para configurar la rotación de tu secreto, puedes actualizar la función Lambda actualizándola a la v2.94.0 o posterior. Para obtener más información, consulte [Guía para desarrolladores de AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

## Se ha actualizado una función de rotación existente de Python 3.9 a 3.10
<a name="troubleshoot_rotation_python_310"></a>

Secrets Manager está realizando la transición de Python 3.9 a 3.10 para las funciones de rotación de Lambda. Para cambiar a una nueva función de rotación que utilice Python 3.10, deberá seguir la ruta de actualización según el método de implementación. Utilice los siguientes procedimientos para actualizar la versión de Python y las dependencias subyacentes.

**Para encontrar las funciones de rotación de Lambda, utilice Python 3.9**

1. Inicie sesión en Consola de administración de AWS y abra la AWS Lambda consola en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. En la lista **Funciones**, filtre por **SecretsManager**.

1. En la lista filtrada de funciones, en **Tiempo de ejecución**, busque **Python 3.9**.

### Actualice las rutas por método de implementación
<a name="update-python-3.9-paths"></a>

Las funciones de rotación de Lambda identificadas en esta lista se pueden implementar mediante la consola, AWS Serverless Application Repository las aplicaciones o CloudFormation las transformaciones de Secrets Manager. Cada una de estas estrategias de implementación tiene una ruta de actualización distinta. 

Utilice uno de los siguientes procedimientos para actualizar las funciones de rotación de Lambda, según cómo se haya implementado la función.

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

Se debe implementar una nueva función de Lambda a través de la AWS Secrets Manager consola, ya que no se pueden actualizar manualmente las dependencias de las funciones de Lambda existentes.

Utilice el siguiente procedimiento para actualizar las funciones implementadas en la consola AWS Secrets Manager .

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En **AWS Secrets Manager**, seleccione **Secretos**. Seleccione el secreto que utiliza la función de Lambda que desea actualizar.

1. Vaya a la pestaña **Rotaciones** y seleccione la opción **Actualizar configuraciones de rotación**.

1. En **Funciones de rotación**, seleccione **Crear una nueva función de Lambda** e ingrese un nombre para la función de rotación de Lambda.

   1. (Opcional) Una vez finalizada la actualización, puede probar la función de Lambda actualizada para confirmar que funciona según lo previsto. En la pestaña **Rotación**, seleccione **Rotar de forma secreta inmediatamente** para iniciar una rotación inmediata.

   1. (Opcional) Puedes ver tus registros de funciones y la versión de Python utilizada en tiempo de ejecución en Amazon CloudWatch. Para obtener más información, consulte [Visualización de CloudWatch registros de funciones Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-view.html#monitoring-cloudwatchlogs-console) en la Guía para *AWS Lambda desarrolladores*.

1. Una vez configurada la nueva función de rotación, puede eliminar la función de rotación anterior.

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

El siguiente procedimiento muestra cómo actualizar las AWS Serverless Application Repository implementaciones. Las funciones Lambda que se despliegan AWS Serverless Application Repository tienen un banner `This function belongs to an application. Click here to manage it.` que indica que incluye un enlace a la aplicación Lambda a la que pertenece la función.

**importante**  
AWS Serverless Application Repository la disponibilidad depende. Región de AWS 

Utilice el siguiente procedimiento para actualizar las funciones AWS Serverless Application Repository desplegadas.

1. Abra la AWS Lambda consola en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Vaya a la pestaña **Configuraciones** de la función de Lambda que debe actualizarse.

   1. Necesitará la siguiente información sobre su función al actualizar la AWS Serverless Application Repository aplicación implementada. Puede encontrar esta información en la consola de Lambda.
     + **Nombre de la aplicación de Lambda**
       + El nombre de la aplicación de Lambda se encuentra en el enlace del encabezado. Por ejemplo, el encabezado establece el siguiente `serverlessrepo-SecretsManagerRedshiftRotationSingleUser`. En este ejemplo, el nombre del rol es `SecretsManagerRedshiftRotationSingleUser`.
     + **Nombre de la función de rotación de Lambda**
     + **Punto final Secrets Manager**
       + El punto de conexión se encuentra en las pestañas **Configuraciones** y **Variables de entorno** asignadas a la variable **SECRETS\$1MANAGER\$1ENDPOINT**.

1. Para actualizar Python, debe actualizar la versión semántica de la aplicación sin servidor. Consulte [Actualización de aplicaciones](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-consume-new-version.html#update-applications) en la *Guía para desarrolladores de AWS Serverless Application Repository *.

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

Si creó funciones de rotación de Lambda personalizadas, tendrá que actualizar las dependencias y los tiempos de ejecución de cada paquete para estas funciones. Para obtener más información, consulte [Actualizar el tiempo de ejecución de la función de Lambda a la versión más reciente](https://repost.aws/knowledge-center/lambda-upgrade-function-runtime).

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

Si la función de Lambda se implementa mediante esta transformación, [la actualización de las pilas mediante la plantilla existente](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) le permitirá utilizar el tiempo de ejecución de Lambda actualizado. 

Utilice el siguiente procedimiento para actualizar la CloudFormation pila mediante la plantilla existente.

1. Abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. En la página **Pias**, seleccione la pila en ejecución que desea actualizar.

1. En el panel de detalles de la pila, elija **Actualizar**.

1. En **Elija un método de actualización de plantillas**, seleccione **Actualización directa**.

1. En la página **Especificar plantilla**, seleccione **Utilizar una plantilla existente**.

1. Mantenga el resto de opciones con sus valores predeterminados y luego seleccione **Actualizar pila**.

Si tiene problemas al actualizar la pila, consulte [Determine la causa de una falla en la pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) en la *Guía del usuario de CloudFormation *.

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

Recomendamos que migre a la versión de transformación más reciente si está utilizando `AWS::SecretsManager-2020-07-23`. *Para obtener más información, consulte [Introducción a una versión mejorada de la AWS Secrets Manager transformación 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/) en el AWS blog de seguridad.* Si continúa utilizando `AWS::SecretsManager-2020-07-23`, puede producirse un error de discordancia entre la versión en tiempo de ejecución y los artefactos del código de la función de Lambda. *Para obtener más información, consulte [AWS:::SecretsManager: RotationSchedule HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-runtime) en la referencia de la plantilla.CloudFormation * 

Si tiene problemas al actualizar la pila, consulte [Determinar la causa de un error en la pila](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) en la *Guía del usuario de CloudFormation *.

------

**Cómo verificar la actualización de Python**  
Para comprobar la actualización de Python, abra la consola Lambda ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) y acceda a la página de **funciones**. Seleccione la función que ha actualizado. En la sección **Código origen**, revise los archivos incluidos en el directorio y asegúrese de que el archivo .so de Python sea de la versión `3.10`.

## AWS Lambda rotación secreta con error `PutSecretValue`
<a name="troubleshoot_rotation_putsecretvalue"></a>

Si utiliza un rol asumido o una rotación entre cuentas con Secrets Manager y encuentra un **RotationFailed** evento CloudTrail con el mensaje: *LAMBDA\$1ARN.*Lambda no *SECRET\$1ARN * creó la versión secreta pendiente de Secret. Quite `AWSPENDING` la etiqueta de ensayo y reinicie la rotación, tendrá que actualizar la función de Lambda *VERSION\$1ID * para usar el parámetro. `RotationToken`<a name="troubleshoot_rotation_procedure"></a>

## Cómo actualizar la función de rotación de Lambda para incluir `RotationToken`
<a name="troubleshoot_rotation_procedure"></a>

1. Cómo descargar el código de la función de Lambda
   + Abra la consola de Lambda
   + Seleccione **Funciones** en el panel de navegación
   + Seleccione su función de rotación secreta de Lambda para el **nombre de la función**
   + En **Descargar**, elija una de las siguientes opciones: **Código de función .zip**, **archivo AWS SAM **, **Ambos**
   + Pulse **Aceptar** para guardar la función en su máquina local.

1. Editar `Lambda_handler`

   Incluye el parámetro rotation\$1token en el paso create\$1secret para la rotación entre cuentas:

   ```
   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. Edite el código `create_secret`

   Revise la función `create_secret` para aceptar y usar el parámetro `rotation_token`:

   ```
   # 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. Suba el código de una función de Lambda actualizada

   Tras actualizar el código de la función de Lambda, [cárguelo para rotar su secreto](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update).

## Error: «Error al ejecutar lambda durante el paso» *<arn>* *<a rotation>*
<a name="concurrency-related-failures"></a>

Si se producen errores de rotación secreta intermitentes y la función de Lambda se queda atascada en un bucle de conjuntos, por ejemplo, entre **CreateSecret** y **SetSecret**, es posible que el problema esté relacionado con la configuración de simultaneidad.

### Pasos para la solución de problemas simultáneos
<a name="concurrency-troubleshooting-steps"></a>

**aviso**  
Si se establece el parámetro de simultaneidad aprovisionado en un valor inferior a 10, se puede producir una limitación debido a la insuficiencia de subprocesos de ejecución para la función de Lambda. Para obtener más información, consulte [ Comprender la simultaneidad reservada y simultaneidad aprovisionada](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned) en la Guía para desarrolladores de AWS Lambda AWS Lambda .

1. Compruebe y ajuste la configuración de simultaneidad de Lambda:
   + Compruebe que `reserved_concurrent_executions` no esté demasiado bajo (por ejemplo, 1)
   + Si utiliza la simultaneidad reservada, configúrela en al menos 10
   + Evalúe utilizar la simultaneidad sin reservas para una mayor flexibilidad

1. En caso de la simultaneidad aprovisionada:
   + No establezca el parámetro de simultaneidad aprovisionado de forma explícita (por ejemplo, en Terraform).
   + Si debe configurarlo, utilice un valor de al menos 10.
   + Pruébelo minuciosamente para asegurarse de que el valor elegido se adapte a su caso de uso.

1. Supervise y ajuste la simultaneidad:
   + Calcule la simultaneidad mediante esta fórmula: simultaneidad = (promedio de solicitudes por segundo) \$1 (duración promedio de las solicitudes en segundos). Para obtener más información, consulte [Estimación de la simultaneidad reservada](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#estimating-reserved-concurrency).
   + Observe y registre los valores durante las rotaciones para determinar la configuración de simultaneidad adecuada.
   + Tenga cuidado al establecer valores de simultaneidad bajos. Pueden provocar una limitación si no hay suficientes subprocesos de ejecución disponibles.

Para obtener más información sobre la configuración de la simultaneidad Lambda, consulte Configuración de la simultaneidad [reservada y Configuración de la simultaneidad](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) [aprovisionada](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) en la Guía para desarrolladores. AWS Lambda 