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
EnRotación con función de Lambda, una AWS Lambda función rota el secreto. AWS Secrets Manager utiliza etiquetas de almacenamiento provisional para identificar las versiones secretas durante la rotación.
Si AWS Secrets Manager no proporciona una plantilla de función de rotación para tu tipo secreto, puedes crear una función de rotación personalizada. Sigue estas pautas al escribir la función de rotación:
Prácticas recomendadas para las funciones de rotación personalizadas
-
Utilice la plantilla de rotación genérica 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 sentencias de registro, consulta el código AWS Secrets Manager Plantillas de función de rotación de fuente.
-
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 obtener instrucciones sobre la depuración, consulte Probar y depurar aplicaciones sin servidor.
-
Si utilizas bibliotecas y binarios externos, por ejemplo, para conectarte a un recurso, eres responsable de parchearlos y actualizarlos.
-
Package la función de rotación y cualquier dependencia en un archivo ZIP, por ejemplo
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 Lambda. Para obtener más información, consulte Descripción de la simultaneidad reservada y la simultaneidad aprovisionada en la Guía para desarrolladores. AWS Lambda AWS Lambda
Cuatro pasos en una función de rotación
Temas
createSecret
: Crear una nueva versión del secreto
El método createSecret
primero comprueba si existe un secreto con una llamada a get_secret_value
ClientRequestToken
. Si no hay ningún secreto, crea uno nuevo con create_secret
VersionId
. A continuación, genera un nuevo valor secreto con get_random_password
put_secret_value
. 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 idempotentAWSPENDING
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 esta opción AWS CLI para ver las etapas de la versión: llama
describe-secret
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 «_clone» (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
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
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, 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 deAWSCURRENT
no es válida, deje de intentar la rotación. -
Compruebe que los valores de secreto de
AWSCURRENT
yAWSPENDING
sean para el mismo recurso. En el caso de un nombre de usuario y una contraseña, compruebe que los nombres de usuario deAWSCURRENT
yAWSPENDING
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
yAWSPENDING
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
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 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 prueban el nuevo secreto mediante el acceso de lectura.
finishSecret: Finalizar la rotación
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_secret utiliza update_secret_version_stage
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 lo elimines
AWSPENDING
antes de este punto ni lo elimines mediante una llamada a la API independiente, ya que eso puede indicarle a Secrets Manager que la rotación no se completó correctamente. Secrets Manager agrega la etiqueta provisional deAWSPREVIOUS
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.