Usa claves de encriptación administradas por el cliente (CMEK)

En esta página, se describe cómo realizar tareas relacionadas con las claves de encriptación administradas por el cliente (CMEK) para Firestore. Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta la documentación de Cloud KMS.

Prepara tus claves CMEK

Antes de crear una base de datos de Firestore protegida por CMEK, debes completar los siguientes pasos:

  1. Solicita acceso a la función de CMEK de Firestore.
  2. Crea (o recupera) un agente de servicio de Firestore.
  3. Crea una clave CMEK.
  4. Establece la configuración de IAM para esa clave.

Completa estos pasos para cada proyecto que contenga bases de datos de Firestore protegidas por CMEK. Si más adelante creas una clave CMEK nueva, debes configurar la configuración de IAM para esa clave.

Solicitar acceso

Antes de crear un agente de servicio de Firestore, completa este formulario para solicitar acceso a la función de CMEK.

Crea un agente de servicio de Firestore

Antes de crear una clave de CMEK, debes tener un agente de servicio de Firestore, que es un tipo de cuenta de servicio administrada por Google que Firestore usa para acceder a la clave.

Ejecuta el comando services identity create para crear el agente de servicio que Firestore usa para acceder a la clave CMEK en tu nombre. Este comando crea la cuenta de servicio si aún no existe y, luego, la muestra.

gcloud beta services identity create \
    --service=firestore.googleapis.com \
    --project FIRESTORE_PROJECT

Reemplaza FIRESTORE_PROJECT por el proyecto que planeas usar para tus bases de datos de Firestore.

El comando muestra el ID del agente de servicio, que tiene el formato de una dirección de correo electrónico. Registra la string de correo electrónico de salida, ya que la usarás en un paso posterior.

Service identity created:
service-xxx@gcp-sa-firestore.iam.gserviceaccount.com

Crear una clave

Puedes usar una clave creada directamente en Cloud KMS o una clave administrada de forma externa que pongas a disposición con Cloud External Key Manager.

La ubicación de la clave de Cloud KMS debe ser la misma que la ubicación de la base de datos de Firestore con la que se usará.

  • Para las ubicaciones de bases de datos regionales, usa el mismo nombre de ubicación para el llavero de claves, la clave y la base de datos, ya que los nombres de ubicación tienen una asignación uno a uno.

    Por ejemplo, si deseas crear una base de datos protegida por una CMEK en us-west1, crea un llavero de claves y una clave en us-west1.

  • Para las ubicaciones de bases de datos multirregionales, usa el nombre de la ubicación de la ubicación multirregional de KMS:

    • Usa la ubicación multirregional us de Cloud KMS para la ubicación multirregional nam5 de Firestore.
    • Usa la ubicación multirregional europe de Cloud KMS para la ubicación multirregional eur3 de Firestore.

En el proyecto Google Cloud en el que deseas administrar tus claves, completa lo siguiente:

  1. Habilita la API de Cloud KMS.

  2. Crea un llavero de claves y una clave mediante una de las siguientes opciones:

Establece la configuración de IAM para la clave

Console

Para otorgar una función de Cloud KMS a tu agente de servicio, haz lo siguiente. También puedes otorgar permiso a nivel de la clave o del llavero de claves si deseas reducir el nivel de detalle.

  1. En la consola de Google Cloud , dirígete a la página IAM.

    Ir a la página IAM

  2. Haz clic en Agregar.

  3. Ingresa el ID con formato de correo electrónico para tu agente de servicio de Firestore.

  4. Selecciona el rol Encriptador/Desencriptador de CryptoKey de Cloud KMS.

  5. Haz clic en Guardar.

gcloud

Otorga la función cloudkms.cryptoKeyEncrypterDecrypter al agente de servicio:

gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT

Reemplaza lo siguiente:

  • KMS_KEY por el nombre que asignaste a la clave
  • KMS_KEYRING por el llavero de claves de KMS que contiene la clave
  • KMS_LOCATION por la región que contiene el llavero de claves
  • SERVICE_AGENT_EMAIL por es el identificador con formato de correo electrónico para el agente de servicio al que le otorgas acceso
  • KMS_PROJECT por el proyecto que contiene la clave

La terminal debería mostrar una respuesta similar a la siguiente:

Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter

Crea una base de datos habilitada con CMEK

Después de crear y configurar tus claves CMEK, puedes crear una instancia protegida por CMEK. Las bases de datos existentes de Firestore que están protegidas por la encriptación predeterminada de Google no se pueden convertir para usar CMEK.

Puedes elegir un tipo de encriptación y una clave solo cuando creas una base de datos habilitada para CMEK.

Console

  1. En la consola de Google Cloud , ve a la página Bases de datos.

    Ve a la página Bases de datos

  2. Haz clic en Crear base de datos.

  3. Selecciona el modo de base de datos. Haz clic en Continuar.

  4. En la página Configura tu base de datos, ingresa un ID de base de datos.

  5. Seleccionar una ubicación.

  6. Haz clic en Mostrar opciones de encriptación y, luego, selecciona Clave de Cloud KMS.

  7. Selecciona o ingresa el nombre del recurso para la clave de CMEK que deseas usar para la base de datos.

  8. La lista de claves se limita al proyecto Google Cloud actual y a la ubicación de la base de datos que seleccionaste. Para usar una clave de un proyecto Google Cloud diferente, haz clic en Cambiar proyecto o Ingresar clave de forma manual.

  9. Si se te solicita que otorgues permiso de clave a la cuenta de servicio de Firestore, haz clic en Otorgar. Para crear una base de datos de CMEK, se debe otorgar el rol cloudkms.cryptoKeyEncrypterDecrypter a tu cuenta de servicio de Firestore.

  10. Selecciona reglas de seguridad para clientes web y para dispositivos móviles.

  11. Haz clic en Crear base de datos.

Una vez que se crea la base de datos, puedes verificar que esté habilitada para CMEK en Detalles de la base de datos:

  • Si tu base de datos está protegida por CMEK, el campo Tipo de encriptación aparecerá como Administrado por el cliente y, en el campo Clave de encriptación, se mostrarán el Cloud KMS correspondiente y la versión de la clave que se usa para proteger esta base de datos.
  • Si tu base de datos no está protegida por CMEK, el campo Tipo de encriptación aparecerá como Administrada por Google.

gcloud

Antes de crear una base de datos habilitada para CMEK con Google Cloud CLI, instala la versión más reciente y autoriza gcloud CLI. Para obtener más información, consulta Instala gcloud CLI.

gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
      --database=DATABASE_ID \
      --kms-key-name=KMS_KEY_NAME \
      --project=FIRESTORE_PROJECT

Reemplaza lo siguiente:

  • FIRESTORE_DATABASE_LOCATION con la ubicación de Firestore para la base de datos
  • DATABASE_ID por un ID para la base de datos
  • KMS_KEY_NAME por el nombre que asignaste a la clave. Usa el nombre de recurso completo de la clave en el siguiente formato:

    projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

  • FIRESTORE_PROJECT por el proyecto que usarás para tu base de datos de Firestore

API de REST

Solicitud HTTP:

POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases

En el cuerpo de la solicitud, configura CMEK en el campo cmek_config.kms_key_name.

Se establece en el ID de recurso completo de una clave de Cloud KMS. Solo se permite una clave en la misma posición que esta base de datos.

Este valor debe ser el ID de recurso de la clave de Cloud KMS en el formato de projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}.

Para obtener más información sobre otros campos, consulta la página database create.

Solicitud de ejemplo:

curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
  "type":"FIRESTORE_NATIVE",
  "locationId":"{FIRESTORE_DATABASE_LOCATION}",
  "cmekConfig": {
    "kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
  }
}'

Firebase CLI

Para crear una base de datos habilitada para CMEK, usa el campo Nombre de la clave de KMS. Si no especificas el parámetro --kms-key-name, Firestore crea una base de datos que no es CMEK de forma predeterminada.

firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT

Reemplaza lo siguiente:

  • DATABASE_ID por el ID de tu base de datos
  • LOCATION por la ubicación de tu base de datos
  • KMS_PROJECT por el proyecto que contiene tu clave de CMEK
  • KMS_LOCATION por la ubicación que contiene tu clave y llavero de claves de CMEK
  • KMS_KEYRING_ID por el ID de tu llavero de claves de CMEK
  • FIRESTORE_PROJECT por el proyecto que usarás para tu base de datos de Firestore

Confirma que tu base de datos de Firestore esté protegida con Firebase CLI:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

La siguiente información de CMEK aparece en el mensaje de respuesta:

  • El campo Nombre de la clave de KMS proporciona el nombre completo del recurso de clave que se usa para encriptar tu base de datos de CMEK de Firestore.
  • El campo Active Key Versions proporciona una lista de todas las versiones de claves que usa actualmente esta base de datos de CMEK. Durante la rotación de claves, puedes tener varias versiones de claves activas.

Terraform

Para crear una base de datos habilitada para CMEK, usa el recurso google_firestore_database. Para obtener más información y ejemplos, consulta