Retrasar la destrucción de las versiones de secretos

En esta página, se explica cómo configurar la destrucción diferida de versiones de secretos, actualizar o quitar la duración de la demora en la destrucción y restablecer las versiones de secretos que están programadas para su destrucción.

Cuando destruyes una versión de secreto, el material secreto se destruye de forma inmediata y permanente. Como administrador de Secret Manager, puedes configurar la destrucción retrasada de las versiones de secretos para que no se destruyan de inmediato cuando se soliciten y se puedan recuperar durante una duración configurable.

Cuando la destrucción diferida está habilitada en el Secret y destruyes una versión de Secret, ocurre lo siguiente:

  • La versión está inhabilitada, lo que impide su uso.
  • El sistema programa la versión para su destrucción permanente al final del período de demora.
  • Después de que venza el período de demora, la versión del secreto se destruirá de forma irrevocable y permanente.

Beneficios

Esta función ofrece los siguientes beneficios:

  • Una capa adicional de protección contra la destrucción accidental o maliciosa de material secreto fundamental Cualquier usuario con el rol de Administrador de versiones de secretos de Secret Manager puede destruir una versión de secreto. Esta acción es irreversible. Si configuras la destrucción diferida, puedes evitar la destrucción inmediata de las versiones del secreto. Puedes otorgar a los usuarios el acceso mínimo necesario para administrar el ciclo de vida de las versiones de secretos, ya que puedes supervisar y evitar cualquier destrucción accidental de datos sensibles.

  • La destrucción de una versión de secreto activa una notificación SECRET_VERSION_DESTROY_SCHEDULED en los temas de Pub/Sub configurados en el secreto. Como administrador de Secret Manager, puedes cancelar la destrucción programada y restablecer la versión secreta. Para ello, debes habilitar o inhabilitar la versión secreta.

Antes de comenzar

  • Enable the Secret Manager API.

    Enable the API

  • Configura la autenticación.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Roles obligatorios

Para obtener los permisos que necesitas para configurar la destrucción diferida de versiones de secretos, pídele a tu administrador que te otorgue el rol de administrador de Secret Manager (roles/secretmanager.admin) en el secreto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Cómo configurar la destrucción demorada

Puedes habilitar la destrucción diferida de una versión de Secret cuando lo creas o cuando lo actualizas.

Console

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

    Ir a Secret Manager

  2. Sigue los pasos necesarios para crear un Secret.

  3. Ve a la sección Retrasar la destrucción de la versión del secreto.

  4. Selecciona la casilla de verificación Establecer la duración de la destrucción demorada.

  5. En el campo Destruction delay duration, ingresa la duración en días. El valor mínimo que puedes ingresar es de 1 día, mientras que el valor máximo es de 1,000 días.

  6. Haz clic en Crear secreto.

Para habilitar esta función en un Secret existente, ve a la página Editar Secret y, luego, configura la duración de la demora de destrucción.

gcloud

Para configurar la duración de la demora de destrucción en el secreto, usa el comando gcloud secrets create.

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.
  • TTL_DURATION: Es la duración de la demora de destrucción de las versiones del secreto. Puedes ingresar la duración en cualquier formato, por ejemplo, días, horas o segundos. La duración mínima requerida es de 1 día, mientras que la duración máxima se puede establecer en 1,000 días.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION

La respuesta contiene el Secret recién creado.

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: El ID del secreto o el identificador completamente calificado del secreto.
  • TTL_DURATION: Es la duración de la demora de destrucción para las versiones del secreto. Ingresa la duración en segundos. Ten en cuenta que la duración mínima requerida es de 1 día, mientras que la duración máxima se puede establecer en 1,000 días.

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": {}}, "version_destroy_ttl":"TTL_DURATION"}

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/secrets/SECRET_ID",
"replication":{
   "automatic":{

   }
},
"createTime":"2023-10-16T17:10:16.345401Z",
"etag":"\"1607d90ee3d84c\"",
"versionDestroyTtl":"TTL_DURATION"
}

La destrucción diferida no se aplica en las siguientes situaciones:

  • Cuando se borra un Secret, todo el material secreto y las versiones de Secret relacionadas se borran de inmediato.
  • Cuando se establece una fecha de vencimiento en el Secret y este vence, todas las versiones del Secret se destruyen de inmediato, incluso si la destrucción diferida está habilitada en el Secret.

Actualiza la duración del retraso de la destrucción

Console

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

    Ir a Secret Manager

  2. Edita tu secreto con una de las siguientes opciones:

    • Haz clic en Más acciones asociado con el secreto que deseas editar y, luego, selecciona Editar en el menú.
    • Haz clic en el nombre del secret para ir a la página Detalles del secret. En la página Detalles del secreto, haz clic en Editar secreto.
  3. Ve a la sección Retrasar la destrucción de la versión del secreto.

  4. En el campo Destruction delay duration, ingresa la duración actualizada.

  5. Haz clic en Actualizar secreto.

gcloud

Para actualizar la duración de la demora de destrucción, usa el comando gcloud secrets update.

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
  • TTL_DURATION: Es la duración de la demora de destrucción de las versiones del secreto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (PowerShell)

gcloud secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

Windows (cmd.exe)

gcloud secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION

La respuesta contiene el Secret recién creado.

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: El ID del Secret o el identificador completamente calificado del Secret
  • TTL_DURATION: Es la duración de la demora de destrucción de las versiones del secreto.

Método HTTP y URL:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl

Cuerpo JSON de la solicitud:

{
  "version_destroy_ttl":"TTL_DURATION"
}

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=version_destroy_ttl"

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=version_destroy_ttl" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID",
  "replication":{
     "automatic":{

     }
  },
  "createTime":"2023-10-16T17:10:16.345401Z",
  "etag":"\"1607d90ee3d84c\"",
  "versionDestroyTtl":"TTL_DURATION"
}

Las versiones de secretos que se ven afectadas por la duración de la demora en la destrucción dependen de lo siguiente:

  • Cuando se configura la destrucción diferida por primera vez en el Secret, la duración del retraso de destrucción afecta a todas las versiones activas (habilitadas e inhabilitadas) del Secret.
  • Cuando se actualiza o quita la duración de la demora de destrucción, los cambios solo se reflejan en las versiones de Secret nuevas en las que se intenta la acción de destrucción. Las versiones de Secret que ya están programadas para su destrucción se seguirán destruyendo en el momento programado.

Inhabilita la destrucción diferida

Console

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

    Ir a Secret Manager

  2. Edita tu secreto con una de las siguientes opciones:

    • Haz clic en Más acciones asociado con el secreto que deseas editar y, luego, selecciona Editar en el menú.
    • Haz clic en el nombre del secret para ir a la página Detalles del secret. En la página Detalles del secreto, haz clic en Editar secreto.
  3. Ve a la sección Retrasar la destrucción de la versión del secreto.

  4. Desmarca la casilla de verificación Establecer la duración de la destrucción demorada.

  5. Haz clic en Actualizar secreto.

gcloud

Para quitar la duración de la demora de destrucción, usa el comando gcloud secrets update.

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

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID --remove-version-destroy-ttl

Windows (PowerShell)

gcloud secrets update SECRET_ID --remove-version-destroy-ttl

Windows (cmd.exe)

gcloud secrets update SECRET_ID --remove-version-destroy-ttl

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: El ID del Secret o el identificador completamente calificado del Secret

Método HTTP y URL:

PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl

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=version_destroy_ttl"

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=version_destroy_ttl" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID",
  "replication":{
     "automatic":{

     }
  },
  "createTime":"2023-10-16T17:10:16.345401Z",
  "etag":"\"1607d90ee3d84c\""
}

Prueba la destrucción demorada de las versiones de secretos

Console

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

    Ir a Secret Manager

  2. Haz clic en el nombre del secreto. Aparecerá la página Secret details.

  3. En la página Detalles del secreto, en la tabla Versiones, selecciona una versión de secreto.

  4. En la columna Acciones, haz clic en Ver más y, luego, en Destruir.

  5. En el cuadro de diálogo que aparece, haz clic en Programar la destrucción de las versiones seleccionadas.

gcloud

Para destruir una versión de un Secret, usa el comando gcloud secrets versions destroy.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • SECRET_VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión
  • SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID

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: El ID del Secret o el identificador completamente calificado del Secret
  • VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión

Método HTTP y URL:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID:destroy

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 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/SECRET_ID/versions/VERSION_ID:destroy"

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/SECRET_ID/versions/VERSION_ID:destroy" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime":"2023-10-16T17:21:55.920036Z",
  "state":"DISABLED",
  "replicationStatus":{
     "automatic":{

     }
  },
  "etag":"\"1607d8b2fc1cf4\"",
  "scheduledDestroyTime":"2023-10-16T17:26:57.459395960Z"
}

La versión del secreto se inhabilita de inmediato y se programa para su destrucción después de que venza la duración de la demora en la destrucción. Puedes ver la fecha y hora exactas en las que se destruirá la versión en la columna Programada para destrucción el de la tabla Versiones.

Cómo restablecer versiones de secretos

Puedes habilitar o inhabilitar una versión de secreto programada para su destrucción.

Habilita una versión de Secret que está programada para su destrucción

Console

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

    Ir a Secret Manager

  2. Haz clic en el nombre del secreto. Aparecerá la página Secret details.

  3. En la página Detalles del secreto, en la tabla Versiones, selecciona una versión de secreto que esté programada para su destrucción.

  4. En la columna Acciones, haz clic en Ver más y, luego, en Habilitar.

  5. En el cuadro de diálogo que aparece, haz clic en Habilitar versiones seleccionadas.

gcloud

Para habilitar una versión de Secret que está programada para su destrucción, usa el comando gcloud secrets versions enable.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • SECRET_VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión
  • SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID

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: El ID del Secret o el identificador completamente calificado del Secret
  • VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión

Método HTTP y URL:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID:enable

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 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/SECRET_ID/versions/VERSION_ID:enable"

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/SECRET_ID/versions/VERSION_ID:enable" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime": "2024-09-04T06:41:57.859674Z",
  "state": "ENABLED",
  "etag": "\"1621457b3c1459\""
}

Inhabilita una versión de un Secret que está programada para su destrucción

Console

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

    Ir a Secret Manager

  2. Haz clic en el nombre del secreto. Aparecerá la página Secret details.

  3. En la página Detalles del secreto, en la tabla Versiones, selecciona una versión de secreto que esté programada para su destrucción.

  4. En la columna Acciones, haz clic en Ver más y, luego, en Inhabilitar.

  5. En el cuadro de diálogo que aparece, haz clic en Inhabilitar las versiones seleccionadas.

gcloud

Para inhabilitar una versión de Secret que está programada para destruirse, usa el comando gcloud secrets versions disable.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • SECRET_VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión
  • SECRET_ID: El ID del Secret o el identificador completamente calificado del Secret

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

Windows (PowerShell)

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

Windows (cmd.exe)

gcloud secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID

La respuesta contiene la versión inhabilitada del secreto.

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: El ID del Secret o el identificador completamente calificado del Secret
  • VERSION_ID: el ID de la versión o el identificador completamente calificado de la versión

Método HTTP y URL:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID:disable

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 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/SECRET_ID/versions/VERSION_ID:disable"

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/SECRET_ID/versions/VERSION_ID:disable" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "createTime":"2023-10-16T17:21:55.920036Z",
  "state":"DISABLED",
  "replicationStatus":{
     "automatic":{

     }
  },
  "etag":"\"1607d8b3e8e1bc\""
}

¿Qué sigue?