Añadir cifrado con CMEK a secretos regionales

En esta página se describe cómo puedes crear secretos con claves de cifrado gestionadas por el cliente (CMEK) y actualizar los secretos que ya tengas para que usen claves CMEK.

Información general

CMEK añade una capa adicional de seguridad y control sobre tus datos sensibles almacenados como secretos regionales. Puedes usar CMEK para conseguir los siguientes objetivos:

  • Tener un control total sobre las claves de cifrado que se usan para proteger tus secretos.
  • Usa tu propio sistema de gestión de claves con políticas de seguridad, funciones de auditoría y características de cumplimiento potencialmente más estrictas.
  • Cumple las normativas de soberanía de los datos manteniendo las claves en tu propia infraestructura.
  • Define controles de acceso pormenorizados para tus claves de cifrado, especificando quién puede usarlas y con qué fines.

Limitaciones:

Usar la CMEK con secretos regionales tiene las siguientes limitaciones:

Antes de empezar

  1. Habilita la API Secret Manager una vez por proyecto.
  2. Asigna el rol de administrador de Secret Manager (roles/secretmanager.admin) en el proyecto, la carpeta o la organización.
  3. Autentícate en la API Secret Manager de una de las siguientes formas:

  4. Para habilitar las CMEK y crear las claves y los conjuntos de claves CMEK que necesitas en este paso, consulta Habilitar claves de cifrado gestionadas por el cliente en Secret Manager.

Crear un secreto regional con cifrado CMEK

Para crear un secreto con cifrado CMEK, 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. En la página Secret Manager, haz clic en la pestaña Secretos regionales y, a continuación, en Crear secreto regional.

  3. En la página Crear secreto regional, introduce un nombre para el secreto en el campo Nombre. El nombre del secreto puede contener letras mayúsculas y minúsculas, números, guiones y guiones bajos. La longitud máxima permitida para el nombre es de 255 caracteres.

  4. Introduce un valor para el secreto (por ejemplo, abcd1234). El valor del secreto puede estar en cualquier formato, pero no debe superar los 64 KiB. 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. En la lista Región, elige la ubicación en la que quieres que se almacene tu secreto regional.

  6. En Encriptado, selecciona Clave de encriptado gestionada por el cliente (CMEK) y, a continuación, elige tu clave CMEK en la lista Clave de encriptado. Asegúrate de que tu clave de CMEK esté en la ubicación especificada y de que tu proyecto de Secret Manager tenga los permisos necesarios para usar la clave.

  7. 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
  • LOCATION: la Google Cloud ubicación en la que quieres crear el secreto
  • KMS_PROJECT_ID: el ID de tu Google Cloud proyecto que ejecuta Cloud Key Management Service.
  • KMS_KEY_LOCATION: la ubicación de tu clave de Cloud KMS. Debe ser la misma ubicación que tu secreto.
  • YOUR_KEY_RING: el nombre del conjunto de claves de Cloud KMS en el que has almacenado tu clave CMEK.
  • YOUR_CMEK_KEY: la clave de cifrado gestionada por el cliente (CMEK) específica que has creado en el conjunto de claves que has elegido en Cloud KMS.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: la Google Cloud ubicación en la que quieres crear el secreto.
  • PROJECT_ID: el ID del proyecto. Google Cloud
  • SECRET_ID: el ID del secreto.
  • KMS_PROJECT_ID: el ID de tu Google Cloud proyecto que ejecuta Cloud Key Management Service.
  • KMS_KEY_LOCATION: la ubicación de tu clave de Cloud KMS. Debe ser la misma ubicación que tu secreto.
  • YOUR_KEY_RING: el nombre del conjunto de claves de Cloud KMS en el que has almacenado tu clave CMEK.
  • YOUR_CMEK_KEY: la clave de cifrado gestionada por el cliente (CMEK) específica que has creado en el conjunto de claves que has elegido en Cloud KMS.

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:

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}

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 siguiente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-03-27T13:30:07.437859Z",
  "etag": "\"1614a467b60423\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

Actualizar un secreto para usar CMEK

Para actualizar un secreto que ya tengas para que use CMEK, sigue uno de estos métodos:

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 la pestaña Secretos regionales.

  3. Para editar un secreto, utilice uno de los siguientes métodos:

    • Busca el secreto en la lista y haz clic en el menú Acciones asociado a ese secreto. En el menú Acciones, haz clic en Editar.

    • Haz clic en el nombre del secreto para ir a la página de detalles. En la página de detalles del secreto, haz clic en Editar secreto.

  4. En la página Editar secreto, ve a la sección Cifrado.

  5. En Cifrado, selecciona Clave de cifrado gestionada por el cliente (CMEK) y, a continuación, elige tu clave CMEK en la lista Clave de cifrado. Asegúrate de que tu clave de CMEK esté en la ubicación especificada y de que tu proyecto de Secret Manager tenga los permisos necesarios para usar la clave.

  6. 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
  • LOCATION: la Google Cloud ubicación del secreto
  • KMS_PROJECT_ID: el ID de tu Google Cloud proyecto que ejecuta Cloud Key Management Service.
  • KMS_KEY_LOCATION: la ubicación de tu clave de Cloud KMS. Debe ser la misma ubicación que tu secreto.
  • YOUR_KEY_RING: el nombre del conjunto de claves de Cloud KMS en el que has almacenado tu clave CMEK.
  • YOUR_CMEK_KEY: la clave de cifrado gestionada por el cliente (CMEK) específica que has creado en el conjunto de claves que has elegido en Cloud KMS.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: la Google Cloud ubicación del secreto.
  • PROJECT_ID: el ID del proyecto. Google Cloud
  • SECRET_ID: el ID del secreto.
  • KMS_PROJECT_ID: el ID de tu Google Cloud proyecto que ejecuta Cloud Key Management Service.
  • KMS_KEY_LOCATION: la ubicación de tu clave de Cloud KMS. Debe ser la misma ubicación que tu secreto.
  • YOUR_KEY_RING: el nombre del conjunto de claves de Cloud KMS en el que has almacenado tu clave CMEK.
  • YOUR_CMEK_KEY: la clave de cifrado gestionada por el cliente (CMEK) específica que has creado en el conjunto de claves que has elegido en Cloud KMS.

Método HTTP y URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption

Cuerpo JSON de la solicitud:

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}"

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

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=customer_managed_encryption" | 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-03-27T13:30:07.437859Z",
  "etag": "\"16211daf5f29c5\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

Siguientes pasos