

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.

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