Secret Manager te permite programar rotaciones periódicas de tus secretos. Para ello, Secret Manager envía notificaciones a los temas de Pub/Sub asociados con tus secretos, según la frecuencia y el tiempo 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
a los temas de Pub/Sub designados en el next_rotation_time
del secreto. Existen dos maneras 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 calculará automáticamente elnext_rotation_time
. Secret Manager envía el mensajeSECRET_ROTATE
después de que transcurra elrotation_period
especificado y, luego, actualiza elnext_rotation_time
para programar la siguiente rotación.
Debes configurar un suscriptor de Pub/Sub para que reciba los mensajes SECRET_ROTATE
y realice acciones en función de ellos.
Es posible que también debas configurar flujos de trabajo adicionales en respuesta a estas notificaciones, como crear una versión nueva 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 información sobre cómo configurar temas en un secreto, consulta Notificaciones de eventos de Secret Manager.
-
Se debe establecer
next_rotation_time
si se especificarotation_period
. -
next_rotation_time
no se puede establecer en menos de cinco minutos en el futuro. -
El
rotation_period
no puede durar menos de una hora. Para obtener orientación sobre el formato de las marcas de tiempo, consulta la referencia de fecha y hora de Google Cloud. -
Si bien Secret Manager vuelve a intentar automáticamente los intentos de entrega de mensajes fallidos, no podemos garantizar la entrega correcta si hay parámetros de configuración incorrectos 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 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. Se omiten las rotaciones programadas si hay una rotación en curso. Secret Manager reintenta automáticamente los intentos fallidos de enviar un mensaje durante hasta siete días, después de los cuales se cancela la rotación.
Configura la rotación en un secreto
Puedes configurar un programa de rotación con la consola de Google Cloud, Google Cloud CLI o la API de Secret Manager.
Console
-
Ve a la página de Secret Manager en la consola de Google Cloud.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales y, luego, en Crear secreto regional.
-
En la página Crear secreto regional, 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 Secret. -
En la lista Región, elige la ubicación en la que deseas que se almacene tu Secret regional.
-
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 elige 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: El ID del secreto o el identificador completamente calificado del secreto.
- LOCATION: Es la ubicación de Google Cloud del secreto.
- NEXT_ROTATION_TIME: La marca de tiempo en la que se debe 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 2592000 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 --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME" \ --rotation-period="ROTATION_PERIOD" \ --topics="FULL_TOPIC_NAME"
Windows (PowerShell)
gcloud secrets create SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME" ` --rotation-period="ROTATION_PERIOD" ` --topics="FULL_TOPIC_NAME"
Windows (cmd.exe)
gcloud secrets create SECRET_ID --location=LOCATION ^ --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:
- LOCATION: La ubicación de Google Cloud del secreto
- PROJECT_ID: El ID del proyecto de Google Cloud
- SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret
- TOPIC_NAME: Es el nombre del tema.
Método HTTP y URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
Cuerpo JSON de la solicitud:
{ "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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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
: Se refiere a toda la configuración de rotación del secreto. -
rotation.next_rotation_time
: Se orienta 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
-
Ve a la página de Secret Manager en la consola de Google Cloud.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales.
-
Busca el secreto que deseas editar y haz clic en el menú
Acciones asociado con 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: El ID del secreto o el identificador completamente calificado del secreto.
- LOCATION: Es la ubicación de Google Cloud del secreto.
- NEXT_ROTATION_TIME: La marca de tiempo en la que se debe 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 --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME"
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME"
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --next-rotation-time="NEXT_ROTATION_TIME"
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: Es la ubicación de Google Cloud del secreto.
- PROJECT_ID: el ID del proyecto de Google Cloud.
- SECRET_ID: El ID del secreto o el identificador completamente calificado del secreto.
- NEXT_ROTATION_TIME: La marca de tiempo en la que se debe completar la primera rotación en formato ISO 8601, por ejemplo,
2021-06-01T09:00:00Z
.
Método HTTP y URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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
-
Ve a la página de Secret Manager en la consola de Google Cloud.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales.
-
Busca el secreto que deseas editar y haz clic en el menú
Acciones asociado con ese secreto. En el menú Acciones, haz clic en Editar. -
Ve a la sección Rotación. Desmarca la casilla de verificación Set rotation period y, luego, haz clic en Update secret.
gcloud
Quita 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: El ID del Secret o el identificador completamente calificado del Secret
- LOCATION: La ubicación de Google Cloud del secreto
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-next-rotation-time
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-next-rotation-time
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-next-rotation-time
Quita el programa de rotación de un secreto. Esto quita next_rotation_time
y rotation_period
.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret
- LOCATION: La ubicación de Google Cloud del secreto
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-rotation-schedule
Windows (PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-rotation-schedule
Windows (cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-rotation-schedule
REST
Quita el próximo tiempo de rotación de un secreto
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La ubicación de Google Cloud del secreto
- PROJECT_ID: El ID del proyecto de Google Cloud
- SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret
Método HTTP y URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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 la próxima fecha de rotación y el período de rotación.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- LOCATION: La ubicación de Google Cloud del secreto
- PROJECT_ID: El ID del proyecto de Google Cloud
- SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret
Método HTTP y URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/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\"" }