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:
- Autokey de Cloud Key Management Service (versión preliminar) no es compatible con secretos regionales.
- La ubicación de la clave CMEK debe ser la misma que la ubicación del Secret regional.
Antes de comenzar
- Habilita la API de 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 de Secret Manager de una de las siguientes maneras:
- Si usas bibliotecas cliente para acceder a la API de Secret Manager, configura las credenciales predeterminadas de la aplicación.
- Si usas Google Cloud CLI para acceder a la API de Secret Manager, usa tus credenciales de Google Cloud CLI 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 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
-
Ve a la página de Secret Manager en la consola de Google Cloud.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales y, luego, en Crear secreto regional.
-
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.
-
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. -
En la lista Región, elige la ubicación en la que deseas que se almacene tu Secret regional.
-
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.
-
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
-
Ve a la página de Secret Manager en la consola de Google Cloud.
-
En la página de Secret Manager, haz clic en la pestaña Secretos regionales.
-
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.
-
-
En la página Editar secreto, ve a la sección Encriptación.
-
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.
-
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" } }