Crear programaciones de rotación en Secret Manager

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:

  1. Definido por el usuario: puedes especificar el next_rotation_time al crear o actualizar el secreto.

  2. Periodo de rotación: si defines un rotation_period, Secret Manager calcula automáticamente el next_rotation_time. Secret Manager envía el mensaje SECRET_ROTATE cuando ha transcurrido el tiempo rotation_period especificado y, a continuación, actualiza el next_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 especifica rotation_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

  1. En la Google Cloud consola, ve a la página Secret Manager.

    Ir a Secret Manager

  2. En la página Secret Manager, haz clic en Crear secreto.

  3. En la página Crear secreto, escribe un nombre para el secreto en el campo Nombre.

  4. 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.

  5. Ve a la sección Rotación y marca la casilla Definir periodo de rotación.

  6. En la lista Periodo de rotación, seleccione una de las opciones predeterminadas o Personalizar para configurar su propia programación de rotación.

  7. En el campo A partir del, introduce la fecha y la hora de inicio del periodo de rotación.

  8. 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

  1. En la Google Cloud consola, ve a la página Secret Manager.

    Ir a Secret Manager

  2. 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.

  3. 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

  1. En la Google Cloud consola, ve a la página Secret Manager.

    Ir a Secret Manager

  2. 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.

  3. 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