Secret Manager te permite programar rotaciones periódicas de tus secretos. Secret Manager lo hace enviando notificaciones a los temas de Pub/Sub asociados a tus secretos, en función de la frecuencia y la hora de rotación que especifiques. En esta página se describe cómo configurar estas rotaciones.
Cómo funcionan las notificaciones de rotación de secretos
Secret Manager activa un mensaje SECRET_ROTATE
en los temas de Pub/Sub designados en el next_rotation_time
del secreto. Hay dos formas de determinar esta marca de tiempo:
-
Definido por el usuario: puedes especificar el
next_rotation_time
al crear o actualizar el secreto. -
Periodo de rotación: si defines un
rotation_period
, Secret Manager calcula automáticamente elnext_rotation_time
. Secret Manager envía el mensajeSECRET_ROTATE
cuando ha transcurrido el tiemporotation_period
especificado y, a continuación, actualiza elnext_rotation_time
para programar la siguiente rotación.
Debe configurar un suscriptor de Pub/Sub para recibir y actuar en los mensajes SECRET_ROTATE
.
También es posible que tengas que configurar flujos de trabajo adicionales en respuesta a estas notificaciones, como crear una nueva versión del secreto e implementar los cambios en tus aplicaciones.
Requisitos y consideraciones de las programaciones de rotación de secretos
-
Los temas de Pub/Sub deben configurarse en el secreto. Para saber cómo crear un tema y una suscripción de Pub/Sub, consulta la guía de inicio rápido de Pub/Sub. Para obtener información sobre cómo configurar temas en un secreto, consulte Notificaciones de eventos de Secret Manager.
-
next_rotation_time
debe definirse si se especificarotation_period
. -
next_rotation_time
no se puede programar para dentro de menos de cinco minutos. -
La
rotation_period
no puede durar menos de una hora. Para obtener información sobre el formato de las marcas de tiempo, consulta la Google Cloud referencia de fecha y hora. -
Aunque Secret Manager vuelve a intentar automáticamente la entrega de mensajes fallida, no podemos garantizar que se realice correctamente si hay errores de configuración relacionados con el secreto, la configuración del tema, los permisos o las cuotas.
-
Las rotaciones en curso deben completarse antes de que se pueda iniciar otra rotación para evitar que las rotaciones simultáneas provoquen un comportamiento inesperado. Las notificaciones se consideran en tránsito mientras Secret Manager intenta enviar el mensaje a Pub/Sub. Las rotaciones programadas se omiten si hay una rotación en curso. Secret Manager vuelve a intentar automáticamente enviar un mensaje durante un máximo de siete días. Después, se cancela la rotación.
Configurar la rotación de un secreto
Puedes configurar una programación de rotación con la Google Cloud consola, la CLI de Google Cloud o la API Secret Manager.
Consola
-
En la Google Cloud consola, ve a la página Secret Manager.
-
En la página Secret Manager, haz clic en Crear secreto.
-
En la página Crear secreto, escribe un nombre para el secreto en el campo Nombre.
-
Introduce un valor para el secreto (por ejemplo,
abcd1234
). También puedes subir un archivo de texto que contenga el valor del secreto con la opción Subir archivo. Esta acción crea automáticamente la versión del secreto. -
Ve a la sección Rotación y marca la casilla Definir periodo de rotación.
-
En la lista Periodo de rotación, seleccione una de las opciones predeterminadas o Personalizar para configurar su propia programación de rotación.
-
En el campo A partir del, introduce la fecha y la hora de inicio del periodo de rotación.
-
Haz clic en Crear secreto.
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SECRET_ID: el ID del secreto.
- NEXT_ROTATION_TIME: la marca de tiempo en la que se completará la primera rotación en formato ISO 8601. Por ejemplo,
2021-06-01T09:00:00Z
. - ROTATION_PERIOD: el intervalo, en segundos, para rotar la clave. Por ejemplo, para rotar la clave cada 2592000 segundos, debe definir el valor
2592000s
. - FULL_TOPIC_NAME: el nombre completo del tema de Pub/Sub con el formato
projects/your-project-id/topics/your-topic-name
.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets create SECRET_ID \ --replication-policy "automatic" \ --next-rotation-time="NEXT_ROTATION_TIME" \ --rotation-period="ROTATION_PERIOD" \ --topics="FULL_TOPIC_NAME"
Windows (PowerShell)
gcloud secrets create SECRET_ID ` --replication-policy "automatic" ` --next-rotation-time="NEXT_ROTATION_TIME" ` --rotation-period="ROTATION_PERIOD" ` --topics="FULL_TOPIC_NAME"
Windows (cmd.exe)
gcloud secrets create SECRET_ID ^ --replication-policy "automatic" ^ --next-rotation-time="NEXT_ROTATION_TIME" ^ --rotation-period="ROTATION_PERIOD" ^ --topics="FULL_TOPIC_NAME"
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto Google Cloud
- SECRET_ID: el ID del secreto
- TOPIC_NAME: nombre del tema
Método HTTP y URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID
Cuerpo JSON de la solicitud:
{ "replication":{ "automatic":{} }, "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"}, "rotation": { "next_rotation_time": "2021-06-01T09:00:00Z", "rotation_period" : '2592000s' }, }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Actualizar la configuración de rotación de un secreto
Puede actualizar los siguientes ajustes de rotación al enviar una solicitud de actualización:
-
rotation
: hace referencia a toda la configuración de rotación del secreto. -
rotation.next_rotation_time
: se dirige específicamente a la marca de tiempo que indica cuándo podría producirse la próxima rotación. -
rotation.rotation_period
: especifica la duración entre cada rotación.
Para actualizar los ajustes de rotación del secreto, usa uno de los siguientes métodos:
Consola
-
En la Google Cloud consola, ve a la página Secret Manager.
-
Busca el secreto que quieras editar y haz clic en el menú
Acciones asociado a ese secreto. En el menú Acciones, haz clic en Editar. -
Ve a la sección Rotación. Actualiza el periodo de rotación según sea necesario y haz clic en Actualizar secreto.
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SECRET_ID: el ID del secreto.
- NEXT_ROTATION_TIME: la marca de tiempo en la que se completará la primera rotación en formato ISO 8601. Por ejemplo,
2021-06-01T09:00:00Z
.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets update SECRET_ID \ --next-rotation-time="NEXT_ROTATION_TIME"
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --next-rotation-time="NEXT_ROTATION_TIME"
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --next-rotation-time="NEXT_ROTATION_TIME"
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto. Google Cloud
- SECRET_ID: el ID del secreto.
- NEXT_ROTATION_TIME: la marca de tiempo en la que se completará la primera rotación en formato ISO 8601. Por ejemplo,
2021-06-01T09:00:00Z
.
Método HTTP y URL:
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
Cuerpo JSON de la solicitud:
{ "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"} }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
Inhabilitar la rotación de un secreto
Para inhabilitar la rotación de secretos, utilice uno de los siguientes métodos:
Consola
-
En la Google Cloud consola, ve a la página Secret Manager.
-
Busca el secreto que quieras editar y haz clic en el menú
Acciones asociado a ese secreto. En el menú Acciones, haz clic en Editar. -
Ve a la sección Rotación. Desmarque la casilla Definir periodo de rotación y, a continuación, haga clic en Actualizar secreto.
gcloud
Quitar el next_rotation_time
de un secreto
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SECRET_ID: el ID del secreto
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets update SECRET_ID \ --remove-next-rotation-time
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --remove-next-rotation-time
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --remove-next-rotation-time
Quita la programación de rotación de un secreto. Se eliminarán tanto next_rotation_time
como rotation_period
.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SECRET_ID: el ID del secreto
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets update SECRET_ID \ --remove-rotation-schedule
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --remove-rotation-schedule
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --remove-rotation-schedule
REST
Quitar la próxima hora de rotación de un secreto
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto Google Cloud
- SECRET_ID: el ID del secreto
Método HTTP y URL:
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
Cuerpo JSON de la solicitud:
{}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
Quita la programación de rotación de un secreto. De esta forma, se eliminarán tanto la hora de la próxima rotación como el periodo de rotación.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto Google Cloud
- SECRET_ID: el ID del secreto
Método HTTP y URL:
PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation
Cuerpo JSON de la solicitud:
{}
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation"
PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
Siguientes pasos
- Consulta cómo habilitar las claves de encriptado gestionadas por el cliente (CMEK) en Secret Manager.
- Consulta cómo usar ETags para el control de simultaneidad optimista.