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:
- Autokey de Cloud Key Management Service (vista previa) no se admite en secretos regionales.
- La ubicación de la clave CMEK debe ser la misma que la del secreto regional.
Antes de empezar
- Habilita la API Secret Manager una vez por proyecto.
- Asigna el rol de administrador de Secret Manager (
roles/secretmanager.admin
) en el proyecto, la carpeta o la organización. Autentícate en la API Secret Manager de una de las siguientes formas:
- Si usas bibliotecas de cliente para acceder a la API Secret Manager, configura las credenciales predeterminadas de la aplicación.
- Si usas la CLI de Google Cloud para acceder a la API Secret Manager, usa tus credenciales de la CLI de Google Cloud para autenticarte.
- Para autenticar una llamada REST, usa las credenciales de Google Cloud CLI o las credenciales predeterminadas de la aplicación.
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
-
En la Google Cloud consola, ve a la página Secret Manager.
-
En la página Secret Manager, haz clic en la pestaña Secretos regionales y, a continuación, en Crear secreto regional.
-
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.
-
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. -
En la lista Región, elige la ubicación en la que quieres que se almacene tu secreto regional.
-
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.
-
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
-
En la Google Cloud consola, ve a la página Secret Manager.
-
En la página Secret Manager, haz clic en la pestaña Secretos regionales.
-
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.
-
-
En la página Editar secreto, ve a la sección Cifrado.
-
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.
-
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" } }