Agrega la encriptación de CMEK a los secretos regionales

En esta página, se describe cómo puedes crear secretos nuevos con claves de encriptación administradas por el cliente (CMEK) y actualizar los secretos existentes para usar claves CMEK.

Descripción general

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

  • Tener control total sobre las claves de encriptación que se usan para proteger tus secretos
  • Usa tu propio sistema de administración de claves con políticas de seguridad, capacidades de auditoría y funciones de cumplimiento potencialmente más estrictas.
  • Cumple con las reglamentaciones de soberanía de los datos manteniendo las claves dentro de tu propia infraestructura.
  • Define controles de acceso detallados para tus claves de encriptación y especifica quién puede usarlas y con qué fines.

Limitaciones:

El uso de CMEK con secretos regionales tiene las siguientes limitaciones:

Antes de comenzar

  1. Habilita la API de 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 de Secret Manager de una de las siguientes maneras:

  4. Para habilitar las CMEK y crear las claves y los llaveros de CMEK que necesitas para este paso, consulta Habilita las claves de encriptación administradas por el cliente para Secret Manager.

Crea un Secret regional con encriptación CMEK

Para crear un secreto nuevo con encriptación CMEK, usa uno de los siguientes métodos:

Console

  1. Ve a la página de Secret Manager en la consola de Google Cloud.

    Ir a Secret Manager

  2. En la página de Secret Manager, haz clic en la pestaña Secretos regionales y, luego, en Crear secreto regional.

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

  4. Ingresa un valor para el secreto (por ejemplo, abcd1234). El valor del secreto puede tener 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 Secret.

  5. En la lista Región, elige la ubicación en la que deseas que se almacene tu Secret regional.

  6. En Encriptación, selecciona Clave de encriptación administrada por el cliente (CMEK) y, luego, elige tu clave CMEK en la lista Clave de encriptación. Asegúrate de que tu clave de CMEK exista en la ubicación especificada y de que tu proyecto de Secret Manager tenga los permisos necesarios para usarla.

  7. Haz clic en Crear secreto.

gcloud

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
  • LOCATION: Es la ubicación de Google Cloud en la que deseas crear el secreto.
  • CMEK_KEY: Es la ruta de acceso completamente calificada a la clave CMEK específica en Cloud Key Management Service que protegerá el secreto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

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

  • LOCATION: Es la ubicación de Google Cloud en la que deseas crear el secreto.
  • PROJECT_ID: el ID del proyecto de Google Cloud.
  • SECRET_ID: El ID del secreto o el identificador completamente calificado del secreto.
  • KMS_PROJECT_ID: Es el ID de tu proyecto de Google Cloud que ejecuta Cloud Key Management Service.
  • KMS_KEY_LOCATION: El nombre de la ubicación de tu clave de Cloud KMS. Debe ser la misma ubicación que tu secreto.
  • YOUR_KEY_RING: Es el nombre del llavero de claves de Cloud KMS en el que almacenaste tu clave CMEK.
  • YOUR_CMEK_KEY: Es la clave de encriptación administrada por el cliente (CMEK) específica que creaste en el llavero de claves que elegiste 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 que se muestra a continuación:

{
  "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"
  }
}

Actualiza un secreto existente para usar CMEK

Para actualizar un secreto existente para usar CMEK, usa uno de los siguientes métodos:

Console

  1. Ve a la página de Secret Manager en la consola de Google Cloud.

    Ir a Secret Manager

  2. En la página de Secret Manager, haz clic en la pestaña Secretos regionales.

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

    • Busca el secreto en la lista y haz clic en el menú Acciones asociado con él. En el menú Acciones, haz clic en Editar.

    • Haz clic en el nombre del secret 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 Encriptación.

  5. En Encriptación, selecciona Clave de encriptación administrada por el cliente (CMEK) y, luego, selecciona tu clave CMEK en la lista Clave de encriptación. Asegúrate de que tu clave de CMEK exista en la ubicación especificada y de que tu proyecto de Secret Manager tenga los permisos necesarios para usarla.

  6. Haz clic en Actualizar secreto.

gcloud

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
  • LOCATION: La ubicación de Google Cloud del secreto
  • CMEK_KEY: Es la ruta de acceso completamente calificada a la clave CMEK específica en Cloud Key Management Service que protegerá el secreto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

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

  • LOCATION: Es la ubicación de Google Cloud del secreto.
  • PROJECT_ID: el ID del proyecto de Google Cloud.
  • SECRET_ID: El ID del secreto o el identificador completamente calificado del secreto.
  • KMS_PROJECT_ID: Es el ID de tu proyecto de Google Cloud 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: Es el nombre del llavero de claves de Cloud KMS en el que almacenaste tu clave CMEK.
  • YOUR_CMEK_KEY: Es la clave de encriptación administrada por el cliente (CMEK) específica que creaste en el llavero de claves que elegiste 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 que se muestra a continuación:

{
  "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"
  }
}

¿Qué sigue?