Usar claves de encriptado gestionadas por el cliente (CMEK)

En esta página se describe cómo realizar tareas relacionadas con las claves de cifrado gestionadas por el cliente (CMEK) de Firestore con compatibilidad con MongoDB. Para obtener más información sobre la clave CMEK en general, incluido cuándo y por qué habilitarla, consulta la documentación de Cloud KMS.

Preparar las claves CMEK

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

  1. Solicita acceso a la función de CMEK de Firestore con compatibilidad con MongoDB.
  2. Crea (o recupera) un agente de servicio de Firestore con compatibilidad con MongoDB.
  3. Crea una clave CMEK.
  4. Configura los ajustes de gestión de identidades y accesos de esa clave.

Sigue estos pasos con cada proyecto que vaya a contener bases de datos de Firestore con compatibilidad con MongoDB protegidas con CMEK. Si creas una clave CMEK más adelante, debes configurar los ajustes de gestión de identidades y accesos (IAM) para esa clave.

Solicitar acceso

Antes de crear un agente de servicio de Firestore con compatibilidad con MongoDB, solicita acceso a la función CMEK rellenando el formulario de solicitud de acceso.

Crear un agente de servicio de Firestore con compatibilidad con MongoDB

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

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

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

Sustituye FIRESTORE_PROJECT por el proyecto que quieras usar para tus bases de datos de Firestore con compatibilidad con MongoDB.

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

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

Crear clave

Puedes usar una clave creada directamente en Cloud KMS o una clave gestionada 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 de la base de datos de Firestore con compatibilidad con MongoDB con la que se va a usar.

  • En el caso de las ubicaciones de bases de datos regionales, usa el mismo nombre de ubicación para el conjunto de claves, la clave y la base de datos, ya que los nombres de las ubicaciones tienen una asignación individual.

    Por ejemplo, si quieres crear una base de datos protegida con una CMEK en us-west1, crea un conjunto de claves y una clave en us-west1.

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

    • Usa la ubicación multirregional us de Cloud KMS para la ubicación multirregional nam5 de Firestore con compatibilidad con MongoDB.

    • Usa la ubicación multirregional europe de Cloud KMS para la ubicación multirregional eur3 de Firestore con compatibilidad con MongoDB.

En el proyecto Google Cloud en el que quieras gestionar tus claves, haz lo siguiente:

  1. Habilita la API Cloud KMS.

  2. Crea un conjunto de claves y una clave con una de las siguientes opciones:

Configurar los ajustes de gestión de identidades y accesos de la clave

Consola

Para conceder un rol de Cloud KMS a tu agente de servicio, sigue estos pasos: También puedes conceder permisos a nivel de clave o de llavero si quieres que la granularidad sea menor.

  1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

    Ir a la página de gestión de identidades y accesos

  2. Haz clic en Añadir.

  3. Introduce el ID con formato de correo electrónico de tu agente de servicio de Firestore con compatibilidad con MongoDB.

  4. Selecciona el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.

  5. Haz clic en Guardar.

gcloud

Asigna el rol cloudkms.cryptoKeyEncrypterDecrypter a tu 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

Haz los cambios siguientes:

  • KMS_KEY con el nombre que le has asignado a la clave
  • KMS_KEYRING con el conjunto de claves de KMS que contiene la clave
  • KMS_LOCATION con la región que contiene el conjunto de claves
  • SERVICE_AGENT_EMAIL con el identificador con formato de correo electrónico del agente de servicio al que quieres conceder acceso
  • KMS_PROJECT con 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

Crear una base de datos con CMEK habilitada

Una vez que hayas creado y configurado tus claves CMEK, podrás crear una base de datos protegida con CMEK. Las bases de datos de Firestore con compatibilidad con MongoDB protegidas con el cifrado predeterminado de Google no se pueden convertir para usar CMEK.

Solo puedes elegir un tipo de cifrado y una clave cuando creas una base de datos con CMEK.

Consola

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

    Ve a la página Bases de datos.

  2. Haz clic en Crear una base de datos de Firestore.

  3. Introduce un ID de base de datos.

  4. Selecciona Enterprise Edition.

  5. Selecciona una ubicación para tu base de datos.

  6. Haz clic en Mostrar opciones de cifrado y, a continuación, selecciona Clave de Cloud KMS.

  7. Selecciona o introduce el nombre del recurso de la clave CMEK que quieras usar en la base de datos.

  8. La lista de claves se limita al Google Cloud proyecto actual y a la ubicación de la base de datos que hayas seleccionado. Para usar una clave de otro proyecto, haz clic en Cambiar de proyecto o en Introducir clave manualmente. Google Cloud

  9. Si se te pide que concedas permiso de clave a la cuenta de servicio de Firestore con compatibilidad con MongoDB, haz clic en Conceder. Para crear una base de datos con CMEK, tu cuenta de servicio de Firestore con compatibilidad con MongoDB debe tener asignado el rol cloudkms.cryptoKeyEncrypterDecrypter.

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

  11. Haz clic en Crear base de datos.

Una vez creada la base de datos, puede comprobar que tiene habilitada la CMEK consultando los detalles de la base de datos:

  • Si tu base de datos está protegida por CMEK, el campo Tipo de cifrado mostrará el valor Gestionado por el cliente y el campo Clave de cifrado mostrará el Cloud KMS correspondiente y la versión de la clave que se utiliza para proteger esta base de datos.
  • Si tu base de datos no está protegida por una CMEK, el campo Tipo de cifrado mostrará el valor Gestionado por Google.

gcloud

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

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

Haz los cambios siguientes:

  • FIRESTORE_DATABASE_LOCATION con la ubicación de la base de datos
  • DATABASE_ID con un ID de la base de datos
  • KMS_KEY_NAME con el nombre que le has asignado a la clave. Usa el nombre completo del recurso de la clave con el siguiente formato:

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

  • FIRESTORE_PROJECT con el proyecto que quieras usar para tu base de datos de Firestore con compatibilidad con MongoDB

Acceder a una base de datos protegida con una CMEK

Todas las operaciones de lectura, escritura y consulta enviadas a una base de datos protegida con CMEK deberían funcionar igual que con una base de datos cifrada predeterminada de Google. Por ejemplo, no es necesario que proporciones una clave para cada solicitud.

Restaurar una base de datos protegida con CMEK

Antes de restaurar una base de datos protegida con CMEK a partir de una copia de seguridad, haz lo siguiente:

  • Decide si quieres restaurar la base de datos con el cifrado CMEK, con el cifrado predeterminado de Google (no CMEK) o con el mismo cifrado que la copia de seguridad.
  • Prepara la clave (versión principal) y la versión de la clave que usaste para cifrar la copia de seguridad. Habilita tanto la clave como la versión de la clave.

gcloud

Restaurar una base de datos protegida con CMEK a un cifrado con CMEK

Para restaurar el cifrado con CMEK, ejecuta el comando gcloud firestore databases restore con las marcas opcionales encryption-type y kms-key-name para configurar el tipo de cifrado de la base de datos restaurada. Si no especificas el tipo de cifrado, la base de datos restaurada usará la misma configuración de cifrado que la copia de seguridad.

gcloud firestore databases restore \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME

Sustituye KMS_KEY_NAME por el nombre que has asignado a la clave. Usa el nombre completo del recurso de la clave con el siguiente formato:

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

Restaurar una base de datos protegida con CMEK al cifrado predeterminado

Para restaurar el cifrado predeterminado de Google (no CMEK), define la marca encryption-type de la siguiente manera:

gcloud firestore databases restore \
--encryption-type=google-default-encryption

Restaurar una base de datos protegida por una CMEK con el mismo tipo de cifrado que la copia de seguridad

Para restaurar la copia de seguridad con el mismo tipo de cifrado, define la marca encryption-type de la siguiente manera:

gcloud firestore databases restore --encryption-type=use-source-encryption

CLI de Firebase

Restaurar una base de datos protegida con CMEK a un cifrado con CMEK

Para restaurar el cifrado con CMEK, usa las marcas opcionales encryption-type y kms-key-name. Si no especificas el tipo de cifrado, la base de datos restaurada usará la misma configuración de cifrado que la copia de seguridad.

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT

Haz los cambios siguientes:

  • DATABASE_ID con el ID de tu base de datos
  • FIRESTORE_PROJECT con el proyecto que quieras usar para tu base de datos de Firestore con compatibilidad con MongoDB
  • FIRESTORE_LOCATION con la ubicación de tu base de datos de compatibilidad con MongoDB de Firestore
  • BACKUP_ID con el ID de tu copia de seguridad
  • KMS_PROJECT con el proyecto que contiene tu clave CMEK.
  • KMS_LOCATION con la ubicación que contiene tu clave y tu conjunto de claves CMEK
  • KMS_KEYRING_ID con el ID de tu conjunto de claves CMEK

Confirma que tu base de datos restaurada de Firestore con compatibilidad con MongoDB está cifrada con CMEK:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

Restaurar una base de datos protegida con CMEK al cifrado predeterminado

Para restaurar el cifrado predeterminado de Google (no CMEK), define la marca encryption-type de la siguiente manera:

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT

Haz los cambios siguientes:

  • DATABASE_ID con el ID de tu base de datos
  • FIRESTORE_PROJECT con el proyecto que quieras usar para tu base de datos de Firestore con compatibilidad con MongoDB
  • FIRESTORE_LOCATION con la ubicación de tu base de datos de compatibilidad con MongoDB de Firestore
  • BACKUP_ID con el ID de tu copia de seguridad

Restaurar una base de datos protegida por una CMEK con el mismo tipo de cifrado que la copia de seguridad

Para restaurar la copia de seguridad con el mismo tipo de cifrado, define la marca encryption-type de la siguiente manera:

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION

Haz los cambios siguientes:

  • DATABASE_ID con el ID de tu base de datos
  • FIRESTORE_PROJECT con el proyecto que quieras usar para tu base de datos de Firestore con compatibilidad con MongoDB
  • FIRESTORE_LOCATION con la ubicación de tu base de datos de compatibilidad con MongoDB de Firestore
  • BACKUP_ID con el ID de tu copia de seguridad

Clonar una base de datos protegida con CMEK

Antes de clonar una base de datos protegida con CMEK, haz lo siguiente:

  • Decide si quieres clonar la base de datos en el cifrado con CMEK, en el cifrado predeterminado de Google (sin CMEK) o en el mismo cifrado que la base de datos de origen.
  • Prepara la clave (versión principal) y la versión de la clave que has usado para cifrar la base de datos de origen. Habilita tanto la clave como la versión de la clave.

gcloud

Clonar una base de datos protegida con CMEK en un cifrado con CMEK

Para clonar el cifrado CMEK, ejecuta el comando gcloud alpha firestore databases clone con las marcas opcionales encryption-type y kms-key-name para configurar el tipo de cifrado de la base de datos clonada. Si no especifica el tipo de cifrado, la base de datos clonada usará la misma configuración de cifrado que la base de datos de origen.

gcloud alpha firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME

Sustituye KMS_KEY_NAME por el nombre que has asignado a la clave. Usa el nombre completo del recurso de la clave con el siguiente formato:

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

Clonar una base de datos protegida con CMEK a un encriptado predeterminado

Para clonar con el cifrado predeterminado de Google (no CMEK), define la marca encryption-type de la siguiente manera:

gcloud alpha firestore databases clone \
--encryption-type=google-default-encryption

Clonar una base de datos protegida con CMEK en el mismo tipo de cifrado que la base de datos de origen

Para clonar la base de datos de origen con el mismo tipo de cifrado, defina la marca encryption-type de la siguiente manera:

gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption

Ver la clave en uso

gcloud

Puedes usar el comando de CLI de gcloud databases describe para confirmar la configuración de CMEK de la base de datos:

gcloud firestore databases describe \
  --database=DATABASE_ID \
  --project=FIRESTORE_PROJECT

Deberías ver la información de CMEK en el campo cmekConfig de la respuesta, que será similar a la siguiente:

cmekConfig:
    activeKeyVersion:
    - projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
    kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
  locationId: nam5
  name: projects/PROJECT_ID/databases/DATABASE_ID

La respuesta incluye la siguiente información:

  • kmsKeyName: el nombre completo del recurso de la clave que se usa para cifrar tu base de datos protegida con CMEK.
  • activeKeyVersion: lista de todas las versiones de claves que usa la base de datos protegida con CMEK. Durante la rotación de claves, puedes tener varias versiones de clave activas. Tanto la versión antigua como la nueva deben estar disponibles durante la rotación de claves. No inhabilite la versión antigua de la clave hasta que deje de aparecer en el campo activeKeyVersion.

API REST

Solicitud HTTP:

GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}

En el cuerpo de la solicitud, configura CMEK en el campo cmek_config.kms_key_name. Se define como el ID de recurso completo de una clave de Cloud KMS. Solo se permite una clave en la misma ubicación que esta base de datos.

Este valor debe ser el ID de recurso de la clave de Cloud KMS con el formato 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 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"

Respuesta de ejemplo:

{
  "name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
  "locationId": "{FIRESTORE_DATABASE_LOCATION}",
  "type": "FIRESTORE_NATIVE",
  "cmekConfig": {
    "kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
    "activeKeyVersion": [
      "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
    ]
  },
  ...
}

Inhabilitar una clave

Para inhabilitar una clave asociada a una base de datos, sigue estos pasos:

  1. Ver las versiones de claves que se están usando en una base de datos
  2. Inhabilita esas versiones de clave
  3. Espera a que se aplique el cambio y comprueba si ya no se puede acceder a los datos. Aunque los cambios suelen surtir efecto en unos minutos, a veces pueden tardar hasta 3 horas.

Cuando se inhabilita una clave usada por una base de datos, se espera recibir una excepción INVALID_ARGUMENT con detalles adicionales en el mensaje de error, como este:

{
  "error": {
    "code": 400,
    "message": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED."
      }
    ]
  }
}

Habilitar una clave

Para volver a habilitar una clave asociada a una base de datos, haz lo siguiente:

  1. Ver las versiones de claves que se están usando en una base de datos
  2. Habilita esas versiones de clave
  3. Espera a que se aplique el cambio y comprueba si ya no se puede acceder a los datos. Aunque los cambios suelen surtir efecto en unos minutos, a veces pueden tardar hasta 3 horas.

Ver registros de auditoría de una clave de Cloud KMS

Antes de habilitar los registros de auditoría de acceso a datos de Cloud KMS, debes familiarizarte con los registros de auditoría de Cloud.

Los registros de auditoría de acceso a datos de Cloud KMS muestran cuándo Firestore con compatibilidad con MongoDB u otros productos configurados para usar tu clave CMEK hacen llamadas de encriptado o desencriptado a Cloud KMS. Firestore con compatibilidad con MongoDB no emite una llamada de cifrado o descifrado en cada solicitud de datos, sino que mantiene un poller que comprueba la clave periódicamente. Los resultados de la encuesta aparecen en los registros de auditoría.

Puedes configurar los registros de auditoría e interactuar con ellos en la Google Cloud consola:

  1. Asegúrate de que el registro esté habilitado para la API Cloud KMS en tu proyecto.

  2. Ve a Cloud Logging en la Google Cloud consola.

    Ir a Cloud Logging

  3. Limita las entradas de registro a tu clave de Cloud KMS añadiendo las siguientes líneas al creador de consultas:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    resource.labels.location=KMS_LOCATION
    

    Haz los cambios siguientes:

    • KMS_KEY con el nombre de la clave CMEK
    • KMS_KEYRING con el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION con la ubicación de la clave y del conjunto de claves

    En el registro se muestran un par de entradas de registro cada cinco minutos por base de datos. Las entradas de registro tienen un aspecto similar al de estos ejemplos:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
    

Consulta el artículo Interpretar los registros de auditoría para obtener información sobre cómo interpretar los registros de auditoría.

Configurar una política de organización de CMEK

Para especificar los requisitos de cumplimiento del cifrado de las bases de datos de Firestore con compatibilidad con MongoDB de tu organización, usa una restricción de política de organización de CMEK.

Requerir protección con CMEK

Configura constraints/gcp.restrictNonCmekServices para que requiera CMEK para crear bases de datos de Firestore con compatibilidad con MongoDB. Define la restricción como deny y añade firestore.googleapis.com a la lista de denegación. Por ejemplo:

gcloud resource-manager org-policies deny gcp.restrictNonCmekServices  is:firestore.googleapis.com --project=FIRESTORE_PROJECT

Sustituye FIRESTORE_PROJECT por el proyecto que quieras restringir.

Para obtener más información sobre cómo configurar políticas de la organización, consulta el artículo Crear y editar políticas.

Una vez que la política entre en vigor, recibirás una FAILED_PRECONDITIONexcepción y un mensaje de error si intentas crear una base de datos que no sea CMEK en el proyecto afectado. Por ejemplo, una excepción tiene el siguiente aspecto:

{
  "error": {
    "code": 400,
    "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/gcp.restrictNonCmekServices",
            "subject": "orgpolicy:projects/FIRESTORE_PROJECT",
            "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
          }
        ]

Limitar el uso de claves para CMEK

Para limitar las claves de Cloud KMS que se usan para la protección con CMEK, configura la restricción constraints/gcp.restrictCmekCryptoKeyProjects.

Como restricción de lista, los valores aceptados son indicadores de jerarquía de recursos (por ejemplo, projects/PROJECT_ID, under:folders/FOLDER_ID y under:organizations/ORGANIZATION_ID). Para usar esta restricción, configure una lista de indicadores de jerarquía de recursos y defina la restricción como Permitir. Esta configuración restringe los servicios admitidos para que las claves CMEK solo se puedan elegir de los proyectos, las carpetas y las organizaciones que se indican. Las solicitudes para crear recursos protegidos con CMEK en servicios configurados no se completan sin una clave de Firestore con compatibilidad con MongoDB de uno de los recursos permitidos.

En el siguiente ejemplo, solo se permiten las claves de ALLOWED_KEY_PROJECT_ID para las bases de datos protegidas con CMEK del proyecto especificado:

gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>

Una vez que la política entre en vigor, recibirás una excepción FAILED_PRECONDITION y un mensaje de error si infringes la restricción. Una excepción tiene el siguiente aspecto:

{
  "error": {
    "code": 400,
    "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/gcp.restrictCmekCryptoKeyProjects",
            "subject": "orgpolicy:projects/FIRESTORE_PROJECT",
            "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
          }
        ]
      }
    ]
  }
}

Siguientes pasos