Secret Manager te permite programar rotaciones periódicas de tus secretos. Secret Manager envía notificaciones a los temas de Pub/Sub asociados con tus secretos según la frecuencia y la hora de rotación que especifiques. En esta página, se describe cómo configurar estos programas de rotación.
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. Existen dos formas de determinar esta marca de tiempo:
-
Definido por el usuario: Puedes especificar el
next_rotation_time
cuando creas o actualizas el secreto. -
Período de rotación: Si defines un
rotation_period
, Secret Manager calcula automáticamente elnext_rotation_time
. Secret Manager envía el mensajeSECRET_ROTATE
después de que transcurre elrotation_period
especificado y, luego, actualiza elnext_rotation_time
para programar la siguiente rotación.
Debes configurar un suscriptor de Pub/Sub para recibir los mensajes de SECRET_ROTATE
y actuar en consecuencia.
También es posible que debas configurar flujos de trabajo adicionales en respuesta a estas notificaciones, como crear una nueva versión del secreto y, luego, implementar los cambios en tus aplicaciones.
Requisitos y consideraciones para los programas de rotación de secretos
-
Los temas de Pub/Sub deben configurarse en el secreto. Para obtener información sobre 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 más información sobre cómo configurar temas en un secreto, consulta Notificaciones de eventos para Secret Manager.
-
Se debe establecer
next_rotation_time
si se especificarotation_period
. -
next_rotation_time
no se puede configurar para dentro de menos de cinco minutos. -
El
rotation_period
no puede durar menos de una hora. Para obtener orientación sobre el formato de marcas de tiempo, consulta la referencia de fecha y hora deGoogle Cloud . -
Si bien Secret Manager reintenta automáticamente los intentos fallidos de entrega de mensajes, no podemos garantizar la entrega exitosa 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 generen 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 reintenta automáticamente los intentos fallidos de enviar un mensaje durante un máximo de siete días, después de lo cual se cancela la rotación.
Configura la rotación en un secreto
Puedes configurar un programa de rotación con la consola, Google Cloud CLI o la API de Secret Manager. Google Cloud
Console
-
En la consola de Google Cloud , ve a la página Secret Manager.
-
En la página de Secret Manager, haz clic en Crear secreto.
-
En la página Crear secreto, ingresa un nombre para el secreto en el campo Nombre.
-
Ingresa 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, luego, selecciona la casilla de verificación Establecer período de rotación.
-
En la lista Período de rotación, selecciona una de las opciones predeterminadas o Personalizado para configurar tu propio programa de rotación.
-
En el campo A partir del, ingresa la fecha y hora de inicio del período de rotación.
-
Haz clic en Crear secreto.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- SECRET_ID: Es el ID del secreto o el identificador completamente calificado del secreto.
- NEXT_ROTATION_TIME: Es 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: Es el intervalo, en segundos, para rotar la clave. Por ejemplo, para rotar la clave cada 2,592,000 s, establecerás un valor de
2592000s
. - FULL_TOPIC_NAME: Es el nombre completo de tu tema de Pub/Sub en 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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El Google Cloud ID del proyecto
- SECRET_ID: ID del secreto o identificador completamente calificado del secreto
- TOPIC_NAME: El 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 que se muestra a continuación:
{ "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" } }
Actualiza la configuración de rotación de un secreto
Puedes actualizar los siguientes parámetros de configuración de rotación cuando realices una solicitud de actualización:
-
rotation
: Hace referencia a toda la configuración de rotación del secreto. -
rotation.next_rotation_time
: Este campo se dirige específicamente a la marca de tiempo que indica cuándo podría ocurrir la próxima rotación. -
rotation.rotation_period
: Especifica la duración entre cada rotación.
Para actualizar la configuración de rotación del secreto, usa uno de los siguientes métodos:
Console
-
En la consola de Google Cloud , ve a la página Secret Manager.
-
Busca el secreto que deseas 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 período de rotación según sea necesario y haz clic en Actualizar secreto.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- SECRET_ID: Es el ID del secreto o el identificador completamente calificado del secreto.
- NEXT_ROTATION_TIME: Es 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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El ID del proyecto de Google Cloud .
- SECRET_ID: Es el ID del secreto o el identificador completamente calificado del secreto.
- NEXT_ROTATION_TIME: Es 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 que se muestra a continuación:
{ "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" } }
Inhabilita la rotación en un secreto
Para inhabilitar la rotación de secretos, usa uno de los siguientes métodos:
Console
-
En la consola de Google Cloud , ve a la página Secret Manager.
-
Busca el secreto que deseas 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. Desmarca la casilla de verificación Establecer período de rotación y, luego, haz clic en Actualizar secreto.
gcloud
Cómo quitar el next_rotation_time
de un secreto
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- SECRET_ID: ID del secreto o identificador completamente calificado 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 el programa de rotación de un secreto. Esto quita tanto el next_rotation_time
como el rotation_period
.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- SECRET_ID: ID del secreto o identificador completamente calificado 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
Quita la próxima fecha de rotación de un secreto
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El Google Cloud ID del proyecto
- SECRET_ID: ID del secreto o identificador completamente calificado 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 que se muestra a continuación:
{ "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 el programa de rotación de un secreto. Esto quita tanto la próxima fecha de rotación como el período de rotación.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: El Google Cloud ID del proyecto
- SECRET_ID: ID del secreto o identificador completamente calificado 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 que se muestra a continuación:
{ "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\"" }
¿Qué sigue?
- Obtén más información para habilitar las claves de encriptación administradas por el cliente (CMEK) para Secret Manager.
- Obtén más información para usar ETags para el control de simultaneidad optimista.