IBM Cloud Docs
Bloqueo de secretos

Bloqueo de secretos

Cuando trabaja con IBM Cloud® Secrets Manager, puede crear bloqueos sobre los secretos para evitar que se supriman o modifiquen mientras las aplicaciones los utilizan.

De forma predeterminada, un usuario o aplicación autorizado puede modificar los secretos que gestiona en Secrets Manager en cualquier momento. A veces, por ejemplo, durante una auditoría de seguridad, es posible que desee impedir que alguien del equipo suprima accidentalmente un secreto. O bien, si tiene previsto rotar los secretos con regularidad, es posible que esté buscando una forma de desplegar de forma segura la versión más reciente de un secreto después de que tenga lugar una rotación. Con los bloqueos, puede crear flujos de trabajo automatizados que le ayudarán a:

  • Indica que una o más aplicaciones o servicios están utilizando un secreto.
  • Impedir que los datos secretos se supriman incluso después de que caduque un secreto.
  • Suprima de forma segura las versiones más antiguas de los secretos después de que la versión más reciente se haya desplegado completamente en las aplicaciones.
  • Evite el tiempo de inactividad involuntario en las aplicaciones.

Para obtener más información sobre las directrices sugeridas para utilizar bloqueos para evitar el tiempo de inactividad de la aplicación, consulte Prácticas recomendadas para rotar y bloquear secretos.

Antes de empezar

Antes de empezar, asegúrese de que tiene el nivel de acceso necesario. Para gestionar bloqueos en los secretos, necesita el Rol de servicio de Director.

Bloqueo de secretos

El bloqueo de un secreto impide cualquier operación que pueda dar como resultado la modificación o supresión de sus datos secretos. Para bloquear un secreto, debe adjuntar uno o varios bloqueos a su versión actual o anterior.

  • Cuando intentas modificar o borrar un secreto mientras está bloqueado, Secrets Manager deniega la petición con una respuesta HTTP 412 Precondition Failed. Aparece un mensaje de error similar al del ejemplo siguiente:

    The requested action can't be completed because the secret version is locked.
    

    Si está trabajando con secretos dinámicosUn valor exclusivo, como una contraseña o una clave de API, que se crea dinámicamente y se cede a una aplicación que requiere acceso a un recurso protegido. Una vez que finaliza la cesión del secreto dinámico, el acceso al recurso protegido se revoca y el secreto se suprime automáticamente., como las credenciales de IAM, el bloqueo de los secretos también significa que, de forma predeterminada, no se puede leer o acceder a dichos secretos. Para obtener más información, consulte ¿Por qué no puedo leer un secreto de credenciales de IAM bloqueado?

    Un secreto de credenciales personalizado sólo puede bloquearse una vez completadas todas sus tareas.

  • Si un secreto bloqueado alcanza su fecha de caducidad, permanece en el estado Activo y sus datos permanecen accesibles para las aplicaciones. Secrets Manager mueve el secreto al estado Destruido y suprime permanentemente los datos secretos caducados sólo después de que se hayan eliminado todos los bloqueos en el secreto.

    Los certificados SSL/TLS siguen alcanzando sus fechas de caducidad definidas y pasan a un estado Destruido incluso si están bloqueados. Para obtener más información, consulte ¿Por qué mi certificado bloqueado se ha desplazado al estado Destruido?

  • Si intenta rotar un secreto mientras su versión actual está bloqueada y la versión anterior está desbloqueada (o si se ha planificado una rotación automática), se permite la solicitud de rotar el secreto. La versión secreta actual se convierte en la nueva versión anterior, conservando sus bloqueos existentes. Se crea una nueva versión actual sin ningún bloqueo.

  • Si intenta rotar un secreto mientras su versión anterior está bloqueada (o si se ha planificado una rotación automática), se deniega la solicitud de rotar el secreto. La rotación sólo se permite después de que se hayan eliminado todos los bloqueos de la versión secreta anterior.

Crear bloqueos en la interfaz de usuario

Puede crear hasta 1000 bloqueos en un secreto utilizando la interfaz de usuario de Secrets Manager. Cada bloqueo se puede utilizar para representar una única aplicación o servicio que utiliza el secreto.

Un secreto se considera bloqueado después de adjuntar uno o más bloqueos al mismo. Un bloqueo sólo se puede aplicar en una versión secreta que contenga datos de carga útil o secretos activos.

Para ayudarle a crear un nuevo bloqueo y eliminar los bloqueos más antiguos en una sola operación, también puede especificar una modalidad opcional al crear el bloqueo.

Modos de bloqueo opcionales y sus descripciones
Modalidad Descripción
Eliminar bloqueos anteriores Elimina cualquier otro bloqueo que coincida con el nombre que especifique. Si se encuentran bloqueos coincidentes en la versión anterior del secreto, estos bloqueos se suprimen cuando se crea el nuevo bloqueo.

Por ejemplo, supongamos que la versión anterior del secreto contiene un bloqueo lock-x. La creación de un bloqueo en la versión actual del secreto y la habilitación de la opción Suprimir bloqueos coincidentes da como resultado la eliminación de lock-x de la versión anterior.

Eliminar bloqueos anteriores y suprimir datos de la versión anterior Igual que la opción anterior, pero también suprime de forma permanente los datos de la versión secreta anterior si no tiene ningún bloqueo asociado.

Supongamos que la versión anterior del secreto contiene un bloqueo lock-z. La creación de un bloqueo en la versión actual del secreto con las opciones Suprimir bloqueos coincidentes y Suprimir datos de versión anterior da como resultado la eliminación de lock-z de la versión anterior. Además, puesto que la versión anterior no tiene ningún otro bloqueo adjunto, los datos secretos asociados a la versión anterior también se suprimen.

Crear un bloqueo en la versión secreta actual

Puede bloquear la versión actual de un secreto utilizando la interfaz de usuario de Secrets Manager. Una solicitud correcta adjunta un nuevo bloqueo a la versión actual del secreto seleccionado, o sustituye un bloqueo del mismo nombre si ya existe.

  1. En la consola, pulse el icono Menú Icono de menú > Lista de recursos.

  2. En la lista de servicios, seleccione la instancia de Secrets Manager.

  3. En la interfaz de usuario de Secrets Manager, vaya a la lista Secretos.

  4. En la fila del secreto que desea bloquear, haga clic en el menú Acciones Icono Acciones > Bloqueos > Crear bloqueo.

  5. Añada un nombre y una descripción para identificar fácilmente la cerradura.

  6. En la lista de versiones a bloquear, seleccione Actual.

  7. Opcional: adjunte atributos JSON al bloqueo.

    Puede incluir un objeto JSON con cada bloqueo para contener cualquier información que pueda necesitar para un flujo automatizado. Por ejemplo, un par de clave-valor que identifica el recurso que desea asociar con este bloqueo.

  8. Opcional: haga que el bloqueo sea exclusivo.

    Elija esta opción para eliminar cualquier otro bloqueo que coincida con el nombre que ha proporcionado. Si se encuentran bloqueos coincidentes en la versión anterior del secreto, estos bloqueos se suprimen cuando se crea el nuevo bloqueo.

  9. Opcional: Borrar los datos de la versión anterior.

    Elija esta opción para suprimir también de forma permanente los datos de la versión secreta anterior si no tiene ningún bloqueo asociado.

  10. Pulse Crear.

Se crea un nuevo bloqueo para la versión secreta seleccionada.

Creación de un bloqueo en la versión secreta anterior

Puede bloquear la versión anterior de un secreto utilizando la interfaz de usuario de Secrets Manager. Una solicitud satisfactoria adjunta un nuevo bloqueo a la versión anterior del secreto seleccionado o sustituye un bloqueo del mismo nombre si ya existe.

  1. En la interfaz de usuario de Secrets Manager, vaya a la lista Secretos.

  2. En la fila del secreto que desea bloquear, haga clic en el menú Acciones Icono Acciones > Bloqueos > Crear bloqueo.

  3. Añada un nombre y una descripción para identificar fácilmente la cerradura.

  4. En la lista de versiones a bloquear, seleccione Anterior.

  5. Opcional: adjunte atributos JSON al bloqueo.

    Puede incluir un objeto JSON con cada bloqueo para contener cualquier información que pueda necesitar para un flujo automatizado. Por ejemplo, un par de clave-valor que identifica el recurso que desea asociar con este bloqueo.

  6. Pulse Crear.

    Se crea un nuevo bloqueo para la versión secreta seleccionada.

Creación de bloqueos desde la CLI

Puede crear hasta 1000 bloqueos en un secreto utilizando la CLI de Secrets Manager. Cada bloqueo se puede utilizar para representar una única aplicación o servicio que utiliza el secreto.

Un secreto se considera bloqueado después de adjuntar uno o más bloqueos al mismo. Un bloqueo sólo se puede aplicar en una versión secreta que contenga datos de carga útil o secretos activos.

Para ayudarle a crear un nuevo bloqueo y eliminar los bloqueos más antiguos en una sola operación, también puede especificar una modalidad opcional al crear el bloqueo.

Modos de bloqueo opcionales y sus descripciones
Modalidad Descripción
Eliminar bloqueos anteriores Elimina cualquier otro bloqueo que coincida con el nombre que especifique. Si se encuentran bloqueos coincidentes en la versión anterior del secreto, estos bloqueos se suprimen cuando se crea el nuevo bloqueo.

Por ejemplo, supongamos que la versión anterior del secreto contiene un bloqueo lock-x. La creación de un bloqueo en la versión actual del secreto y la habilitación de la opción Suprimir bloqueos coincidentes da como resultado la eliminación de lock-x de la versión anterior.

Eliminar bloqueos anteriores y suprimir datos de la versión anterior Igual que la opción anterior, pero también suprime de forma permanente los datos de la versión secreta anterior si no tiene ningún bloqueo asociado.

Supongamos que la versión anterior del secreto contiene un bloqueo lock-z. La creación de un bloqueo en la versión actual del secreto con las opciones Suprimir bloqueos coincidentes y Suprimir datos de versión anterior da como resultado la eliminación de lock-z de la versión anterior. Además, puesto que la versión anterior no tiene ningún otro bloqueo adjunto, los datos secretos asociados a la versión anterior también se suprimen.

Crear un bloqueo en la versión secreta actual

Puede bloquear la versión actual de un secreto utilizando la CLI Secrets Manager. Una solicitud correcta adjunta un nuevo bloqueo a la versión actual del secreto seleccionado, o sustituye un bloqueo del mismo nombre si ya existe.

Para crear un bloqueo en la versión actual de un secreto utilizando el plugin de CLI Secrets Manager, ejecute el mandato ibmcloud secrets-manager secret-locks-bulk-create. Puede especificar el tipo de secreto, el ID de secreto y la modalidad.

ibmcloud secrets-manager secret-locks-bulk-create \
    --id=exampleString \
    --locks='[{"name": "lock-example-1", "description": "lock for consumer 1", "attributes": {"anyKey": "anyValue"}}]' \
    --mode=remove_previous

Creación de bloqueos con la API

Puede crear hasta 1000 bloqueos en un secreto utilizando la API Secrets Manager. Cada bloqueo se puede utilizar para representar una única aplicación o consumidor que utiliza el secreto. Una solicitud correcta adjunta un nuevo bloqueo al secreto, o sustituye un bloqueo del mismo nombre si ya existe.

Un secreto se considera bloqueado después de adjuntar uno o más bloqueos al mismo. Un bloqueo sólo se puede aplicar en una versión secreta que contenga datos de carga útil o secretos activos.

Para ayudarle a crear un nuevo bloqueo y eliminar los bloqueos más antiguos en una sola operación, también puede especificar una modalidad opcional al crear el bloqueo.

Modos de bloqueo opcionales y sus descripciones
Modalidad Parámetro de consulta Descripción
Eliminar bloqueos anteriores mode=remove_previous Elimina cualquier otro bloqueo que coincida con el nombre que especifique. Si se encuentran bloqueos coincidentes en la versión anterior del secreto, estos bloqueos se suprimen cuando se crea el nuevo bloqueo.

Por ejemplo, supongamos que la versión anterior del secreto contiene un bloqueo lock-x. La creación de un bloqueo y la habilitación de la modalidad remove_previous en la versión secreta actual da como resultado la eliminación de lock-x de la versión anterior.

Eliminar bloqueos anteriores mode=remove_previous_and_delete Igual que la opción remove_previous, pero también suprime de forma permanente los datos de la versión secreta anterior si no tiene ningún bloqueo asociado.

Supongamos que la versión anterior del secreto contiene un bloqueo lock-z. La creación de un bloqueo y la habilitación de la modalidad remove_previous_and_delete en la versión secreta actual da como resultado la eliminación de lock-z de la versión anterior. Además, puesto que la versión anterior no tiene ningún otro bloqueo adjunto, los datos secretos asociados a la versión anterior también se suprimen.

Creación de bloqueos en la versión secreta actual

La solicitud siguiente crea dos bloqueos en la versión actual de un secreto. Cuando llame a la API, sustituya las variables de ID y la señal de IAM por los valores que son específicos de la instancia de Secrets Manager.

curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
      "locks": [
        {
          "name": "lock-1",
          "description": "Lock for consumer 1.",
          "attributes": {
            "key": "value"
          }
        },
        {
          "name": "lock-2",
          "description": "Lock for consumer 2.",
          "attributes": {
            "key": "value"
            }
          }
        ]
      }' \
    "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/locks_bulk"

Si está creando un flujo automatizado, puede utilizar el objeto attributes para especificar datos de valor de clave con cada bloqueo en el secreto. Por ejemplo, puede incluir un identificador de recurso, como un ID o un nombre de recurso de nube (CRN).

Una respuesta satisfactoria devuelve detalles sobre los nuevos bloqueos, junto con otros metadatos.

{
  "secret_id": "0cf4addb-7a90-410b-a3a7-a15bbe2b7909",
  "secret_group_id": "d8371728-95c8-4c12-b2af-1af98adb9e41",
  "versions": [
    {
      "version_id": "7bf3814d-58f8-4df8-9cbd-f6860e4ca973",
      "version_alias": "current",
      "locks": [
        "lock-3",
        "lock-4"
      ],
      "payload_available": true
    },
    {
      "version_id": "5bf89b0c-df55-c8d5-7ad6-8816951c6784",
      "version_alias": "previous",
      "locks": [
        "lock-1",
        "lock-2"
      ],
      "payload_available": true
    }
  ]
}

Para obtener más información sobre los parámetros de solicitud necesarios y opcionales, consulte el apartado Referencia de API.

Creación de bloqueos en la versión secreta anterior

La solicitud siguiente crea dos bloqueos en la versión anterior de un secreto. Cuando llame a la API, sustituya las variables de ID y la señal de IAM por los valores que son específicos de la instancia de Secrets Manager.

curl -X POST
    -H "Authorization: Bearer {iam_token}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
      "locks": [
        {
          "name": "lock-1",
          "description": "Lock for consumer 1.",
          "attributes": {
            "key": "value"
            }
          },
          {
            "name": "lock-2",
            "description": "Lock for consumer 2.",
            "attributes": {
              "key": "value"
              }
            }
          ]
        }' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/versions/{version_id}/locks_bulk"

Una respuesta satisfactoria devuelve detalles sobre los nuevos bloqueos, junto con otros metadatos.

{
  "secret_id": "0cf4addb-7a90-410b-a3a7-a15bbe2b7909",
  "secret_group_id": "d8371728-95c8-4c12-b2af-1af98adb9e41",
  "versions": [
    {
      "version_id": "7bf3814d-58f8-4df8-9cbd-f6860e4ca973",
      "version_alias": "current",
      "locks": [
        "lock-3",
        "lock-4"
      ],
      "payload_available": true
    },
    {
      "version_id": "5bf89b0c-df55-c8d5-7ad6-8816951c6784",
      "version_alias": "previous",
      "locks": [
        "lock-1",
        "lock-2"
      ],
      "payload_available": true
    }
  ]
}

Para obtener más información sobre los parámetros de solicitud necesarios y opcionales, consulte el apartado Referencia de API.

Desbloqueo de secretos

Un secreto se considera desbloqueado y solo se puede modificar o suprimir después de que se hayan eliminado todos sus bloqueos asociados. Puede utilizar la interfaz de usuario o las API de Secrets Manager para suprimir los bloqueos asociados a un secreto.

Eliminación de bloqueos en la interfaz de usuario

Puede suprimir un bloqueo adjunto a un secreto existente utilizando la interfaz de usuario de Secrets Manager.

  1. En la consola, pulse el icono Menú Icono de menú > Lista de recursos.

  2. En la lista de servicios, seleccione la instancia de Secrets Manager.

  3. En la interfaz de usuario de Secrets Manager, vaya a la lista Secretos.

  4. En la fila del secreto que desea actualizar, haga clic en el menú Acciones Icono Acciones > Cerraduras.

  5. En la fila del candado que desea eliminar, haga clic en el menú Acciones Icono Acciones > Eliminar.

  6. Para confirmar la supresión, escriba el nombre del secreto. Pulse Suprimir.

    Ahora se ha suprimido el bloqueo. Para desbloquear completamente el secreto, puede eliminar todos los bloqueos existentes.

Eliminación de bloqueos con la API

Puede utilizar la API Secrets Manager para suprimir uno o varios bloqueos asociados a la versión secreta específica.

Una solicitud satisfactoria suprime los bloqueos que especifique. Para eliminar todos los bloqueos, puede pasar {"locks": ["*"]} en el cuerpo de la solicitud. De lo contrario, especifique los nombres de los bloqueos que desea suprimir. Por ejemplo, {"locks": ["lock-1", "lock-2"]}.

Para saber si un secreto contiene bloqueos, compruebe el campo locks_total que se devuelve como parte de los metadatos del secreto.

curl -X DELETE  
  -H "Authorization: Bearer {iam_token}" \
  -H "Accept: application/json" \
  "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{secret_id}/versions/{id}/locks_bulk?name=[ "lock-example-1" ]"

Para obtener más información sobre los parámetros de solicitud necesarios y opcionales, consulte el apartado Referencia de API.