

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.

# 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 