Crea programas de rotación en Secret Manager

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:

  1. Definido por el usuario: Puedes especificar el next_rotation_time cuando creas o actualizas el secreto.

  2. Período 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 después de que transcurre el rotation_period especificado y, luego, actualiza el next_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 especifica rotation_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

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

    Ir a Secret Manager

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

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

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

  5. Ve a la sección Rotación y, luego, selecciona la casilla de verificación Establecer período de rotación.

  6. En la lista Período de rotación, selecciona una de las opciones predeterminadas o Personalizado para configurar tu propio programa de rotación.

  7. En el campo A partir del, ingresa la fecha y hora de inicio del período de rotación.

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

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

    Ir a Secret Manager

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

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

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

    Ir a Secret Manager

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

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