Usar claves de encriptado gestionadas por el cliente (CMEK)
En esta página se describe cómo realizar tareas relacionadas con las claves de encriptado gestionadas por el cliente (CMEK) de Firestore. 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
Para poder crear una base de datos de Firestore protegida con una CMEK, debes completar los siguientes pasos:
- Solicita acceso a la función de CMEK de Firestore.
- Crea (o recupera) un agente de servicio de Firestore.
- Crea una clave CMEK.
- 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 protegidas con CMEK. Si creas una clave CMEK más adelante, debes configurar los ajustes de IAM para esa clave.
Solicitar acceso
Antes de crear un agente de servicio de Firestore, solicita acceso a la función de CMEK rellenando este formulario.
Crear 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 gestionada 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 de 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.
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 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 enus-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 de Cloud KMS
us
para la ubicación multirregional de Firestorenam5
. - Usa la ubicación multirregional de Cloud KMS
europe
para la ubicación multirregional de Firestoreeur3
.
- Usa la ubicación multirregional de Cloud KMS
En el Google Cloud proyecto en el que quieras gestionar tus claves, haz lo siguiente:
Crea un conjunto de claves y una clave con una de las siguientes opciones:
- Crea el conjunto de claves y la clave directamente en Cloud KMS.
- Usa una clave gestionada de forma externa. Crea la clave externa y, a continuación, crea una clave de Cloud EKM para que esté disponible a través de Cloud KMS.
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.
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
Haz clic en Añadir.
Introduce el ID con formato de correo electrónico de tu agente de servicio de Firestore.
Selecciona el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.
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 claveKMS_KEYRING
con el conjunto de claves de KMS que contiene la claveKMS_LOCATION
con la región que contiene el conjunto de clavesSERVICE_AGENT_EMAIL
con el identificador con formato de correo electrónico del agente de servicio al que quieres conceder accesoKMS_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 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
En la Google Cloud consola, ve a la página Bases de datos.
Haz clic en Crear base de datos.
Selecciona el modo de la base de datos. Haz clic en Continuar.
En la página Configurar una base de datos, introduce un ID de base de datos.
Selecciona una ubicación.
Haz clic en Mostrar opciones de cifrado y, a continuación, selecciona Clave de Cloud KMS.
Selecciona o introduce el nombre del recurso de la clave CMEK que quieras usar en la base de datos.
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 proyecto o en Introducir clave manualmente. Google Cloud
Si se te pide que concedas permiso de clave a la cuenta de servicio de Firestore, haz clic en Conceder. Para crear una base de datos con CMEK, debes asignar el rol
cloudkms.cryptoKeyEncrypterDecrypter
a tu cuenta de servicio de Firestore.Selecciona reglas de seguridad para clientes web y móviles.
Haz clic en Crear base de datos.
Una vez creada la base de datos, puede verificar que tiene habilitado CMEK consultando los detalles de la base de datos:
- Si tu base de datos está protegida por una CMEK, el campo Tipo de cifrado se mostrará como 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 con 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 \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Haz los cambios siguientes:
FIRESTORE_DATABASE_LOCATION
con la ubicación de Firestore de la base de datosDATABASE_ID
con un ID de la base de datosKMS_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.
API 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 define como el ID de recurso completo de una clave de Cloud KMS. Solo se permite una clave que esté 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 siguiente 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 -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"
}
}'
CLI de Firebase
Para crear una base de datos con CMEK, usa el campo Nombre de clave de KMS. Si no especifica el parámetro --kms-key-name
, Firestore crea una base de datos sin 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
Haz los cambios siguientes:
DATABASE_ID
con el ID de tu base de datosLOCATION
con la ubicación de tu base de datosKMS_PROJECT
con el proyecto que contiene tu clave CMEK.KMS_LOCATION
con la ubicación que contiene tu clave y tu conjunto de claves CMEKKMS_KEYRING_ID
con el ID de tu conjunto de claves CMEKFIRESTORE_PROJECT
con el proyecto que quieras usar para tu base de datos de Firestore.
Confirma que tu base de datos de Firestore está protegida con la CLI de Firebase:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
En el mensaje de respuesta se muestra la siguiente información de CMEK:
- El campo Nombre de clave de KMS proporciona el nombre completo del recurso de clave que se usa para cifrar tu base de datos de Firestore con CMEK.
- El campo Versiones de claves activas muestra una lista de todas las versiones de claves que usa actualmente esta base de datos con CMEK. Durante la rotación de claves, puedes tener varias versiones de claves activas.
Terraform
Para crear una base de datos con CMEK, usa el recurso google_firestore_database
. Para obtener más información y ejemplos, consulta google_firestore_database
.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
Haz los cambios siguientes:
FIRESTORE_PROJECT
con el proyecto que quieras usar para tu base de datos de Firestore.DATABASE_ID
con un ID de la base de datosFIRESTORE_DATABASE_LOCATION
con la ubicación de Firestore de la base de datosDATABASE_TYPE
conFIRESTORE_NATIVE
para el modo nativo oDATASTORE_MODE
para el modo de Datastore.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
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 (sin 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 has usado 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 datosFIRESTORE_PROJECT
con el proyecto que quieras usar para tu base de datos de Firestore.FIRESTORE_LOCATION
con la ubicación de tu base de datos de FirestoreBACKUP_ID
con el ID de tu copia de seguridadKMS_PROJECT
con el proyecto que contiene tu clave CMEK.KMS_LOCATION
con la ubicación que contiene tu clave y tu conjunto de claves CMEKKMS_KEYRING_ID
con el ID de tu conjunto de claves CMEK
Confirma que tu base de datos de Firestore restaurada 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 datosFIRESTORE_PROJECT
con el proyecto que quieras usar para tu base de datos de Firestore.FIRESTORE_LOCATION
con la ubicación de tu base de datos de FirestoreBACKUP_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_IDD \
--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 datosFIRESTORE_PROJECT
con el proyecto que quieras usar para tu base de datos de Firestore.FIRESTORE_LOCATION
con la ubicación de tu base de datos de FirestoreBACKUP_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 databases describe de la CLI de gcloud 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
: una lista de todas las versiones de claves que usa actualmente la base de datos protegida con CMEK. Durante la rotación de claves, puedes tener varias versiones de claves 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 campoactiveKeyVersion
.
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 que esté 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 siguiente 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
.
Ejemplo de solicitud y respuesta:
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"
—----------------------------------------- Response —--------------------------------------------
{
"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:
- Consulta las versiones de las claves que se están usando en una base de datos.
- Inhabilita estas versiones de clave en uso.
- 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 FAILED_PRECONDITION
con detalles adicionales en el mensaje de error, como este:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
Habilitar una clave
Para volver a habilitar una clave asociada a una base de datos, haz lo siguiente:
- Ver las versiones de claves que se están usando en una base de datos
- Habilitar estas versiones de clave en uso
- 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 u otros productos configurados para usar tu clave CMEK hacen llamadas de cifrado o descifrado a Cloud KMS. Firestore 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:
Asegúrate de que el registro esté habilitado para la API Cloud KMS en tu proyecto.
Ve a Cloud Logging en la Google Cloud consola.
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 CMEKKMS_KEYRING
con el conjunto de claves de KMS que contiene la claveKMS_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 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 se requiera CMEK para crear bases de datos de Firestore. 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_PRECONDITION
excepció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 correctamente sin una clave de Firestore de uno de los recursos permitidos.
En el siguiente ejemplo, solo se permiten 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/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
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." } ] } ] } }