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
En Rotación con función de Lambda, una función de Lambda hace el trabajo de rotar el secreto. Secrets Manager utiliza etiquetas provisionales para identificar las versiones de un secreto durante la rotación.
Si Secrets Manager no proporciona una plantilla de función de rotación para su tipo de secreto, puede crear una función de rotación. Al escribir una función de rotación, siga las instrucciones de cada paso.
Consejos para escribir su propia función de rotación
-
Utilice la plantilla de rotación genérica como punto de partida para escribir su propia función de rotación.
-
Al escribir la función, tenga cuidado con la inclusión de instrucciones de depuración o registro. Estas instrucciones pueden provocar que la información de la función se escriba en Amazon CloudWatch, de modo que debe asegurarse de que el registro no incluya ninguna información confidencial recopilada durante el desarrollo.
Para ver ejemplos de instrucciones de registro, consulte el código fuente de Plantillas de función de rotación de AWS Secrets Manager.
-
Por motivos de seguridad, Secrets Manager solo permite que una función de rotación de Lambda rote el secreto de forma directa. La función de rotación no puede llamar a una segunda función de Lambda para rotar el secreto.
-
Puede consultar sugerencias de depuración en Testing and debugging serverless applications (Prueba y depuración de aplicaciones sin servidor).
-
Si utiliza bibliotecas y binarios externos (por ejemplo, para conectarse a un recurso), debe encargarse de aplicarles revisiones y mantenerlos actualizados.
-
Guarde la función de rotación en un archivo ZIP llamado
my-function.zip
junto con las dependencias necesarias.
Cuatro pasos en una función de rotación
Temas
create_secret
: Crear una nueva versión del secreto
El método create_secret
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
.Al probar la función, utilice AWS CLI para ver las fases de la versión: llame a
describe-secret
y consulteVersionIdsToStages
.-
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.
set_secret
: Cambiar las credenciales en la base de datos o el servicio
El método set_secret
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 la hoja de referencia sobre la parametrización de consultas
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
test_secret
: 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.
finish_secret
: 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 elimine
AWSPENDING
antes de este punto y no lo elimine 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 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.