Usar 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:
- Solicita acceso a la función de CMEK de Firestore.
- Crea (o recupera) un agente de servicio de Firestore.
- Crea una clave CMEK.
- Establece la configuración de IAM para esa clave.
Completa estos pasos para cada proyecto que contendrá 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 CMK.
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 enus-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 multirregionalnam5
de Firestore. - Usa la ubicación multirregional
europe
de Cloud KMS para la ubicación multirregionaleur3
de Firestore.
- Usa la ubicación multirregional
En el proyecto de Google Cloud en el que deseas administrar tus claves, completa lo siguiente:
Crea un llavero de claves y una clave mediante una de las siguientes opciones:
- Crea el llavero de claves y la clave directamente en Cloud KMS.
- Usa una clave administrada de forma externa. Crea la clave externa y, luego, crea una clave de Cloud EKM para que la clave esté disponible a través de Cloud KMS.
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.
En la consola de Google Cloud, ve a la página IAM.
Haz clic en Agregar.
Ingresa el ID con formato de correo electrónico para tu agente de servicio de Firestore.
Selecciona la función Encriptador/Desencriptador de CryptoKey de Cloud KMS.
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 claveKMS_KEYRING
con el llavero de claves de KMS que contiene la claveKMS_LOCATION
por la región que contiene el llavero de clavesSERVICE_AGENT_EMAIL
con el identificador con formato de correo electrónico para el agente de servicio al que le otorgas 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
Crea una base de datos habilitada con CMEK
Después de crear y configurar tus claves CMEK, puedes crear una base de datos protegida por CMEK. Las bases de datos de Firestore existentes 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
En la consola de Google Cloud, ve a la página Bases de datos.
Haz clic en Crear base de datos.
Selecciona el modo de base de datos. Haga clic en Continuar.
En la página Configurar tu base de datos, ingresa un ID de base de datos.
Seleccionar una ubicación.
Haz clic en Mostrar opciones de encriptación y, luego, selecciona Clave de Cloud KMS.
Selecciona o ingresa el nombre del recurso para la clave de CMEK que quieres usar para la base de datos.
La lista de claves se limita al proyecto de Google Cloud actual y a la ubicación de la base de datos que seleccionaste. Para usar una clave de un proyecto de Google Cloud diferente, haz clic en Cambiar proyecto o Ingresar clave de forma manual.
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.Selecciona reglas de seguridad para clientes web y para dispositivos móviles.
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 la CLI de gcloud.
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 de la base de datosDATABASE_ID
por un ID para la base de datosKMS_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/{FIRESOTRE_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 detalles 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 de 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 datosLOCATION
por la ubicación de tu base de datosKMS_PROJECT
con el proyecto que contiene tu clave de CMEKKMS_LOCATION
con la ubicación que contiene tu clave y llavero de claves de CMEKKMS_KEYRING_ID
con el ID de tu llavero de claves CMEKFIRESTORE_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 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"
}
}
Reemplaza lo siguiente:
FIRESTORE_PROJECT
por el proyecto que usarás para tu base de datos de FirestoreDATABASE_ID
por un ID para 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 Datastore.KMS_KEY_NAME
por el nombre que asignaste a la clave. Usa el nombre de recurso completo de la clave con el siguiente formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Accede a una base de datos protegida por CMEK
Todas las operaciones de lectura, escritura y consulta que se envían a una base de datos protegida por CMEK deberían funcionar de la misma manera que con una base de datos encriptada predeterminada de Google. Por ejemplo, no necesitas proporcionar una clave para cada solicitud.
Restablece una base de datos protegida por CMEK
Antes de restablecer una base de datos protegida por CMEK a partir de una copia de seguridad, haz lo siguiente:
- Decide si deseas restablecer la base de datos a la encriptación de CMEK, a la encriptación predeterminada de Google (no CMEK) o a la misma encriptación que la copia de seguridad.
Prepara la clave (primary-version) y la versión de clave que usaste para encriptar la copia de seguridad. Habilita la clave y la versión de clave.
gcloud
Cómo restablecer una base de datos protegida por CMEK a la encriptación de CMEK
Para restablecer la encriptación de CMEK, ejecuta el comando gcloud firestore databases
restore con
las marcas opcionales encryption-type
y kms-key-name
para configurar el
tipo de encriptación de la base de datos restablecida. Si no especificas el tipo de encriptación, la base de datos restablecida usará la misma configuración de encriptación que la copia de seguridad.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
Reemplaza KMS_KEY_NAME
por el nombre que le 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
Cómo restablecer una base de datos protegida por CMEK a la encriptación predeterminada
Para restablecer la encriptación predeterminada de Google (no CMEK), establece la marca encryption-type
de la siguiente manera:
gcloud firestore databases restore
--encryption-type=google-default-encryption
Cómo restablecer una base de datos protegida por CMEK al mismo tipo de encriptación que la copia de seguridad
Para restablecer el mismo tipo de encriptación que la copia de seguridad, establece la marca encryption-type
de la siguiente manera:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
Cómo restablecer una base de datos protegida por CMEK a la encriptación de CMEK
Para restablecer la encriptación con CMEK, usa las marcas opcionales encryption-type
y kms-key-name
.
Si no especificas el tipo de encriptación, la base de datos restablecida usará la misma configuración de encriptación 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
Reemplaza lo siguiente:
DATABASE_ID
por el ID de tu base de datosFIRESTORE_PROJECT
por el proyecto que usarás para tu base de datos de FirestoreFIRESTORE_LOCATION
por la ubicación de tu base de datos de FirestoreBACKUP_ID
por el ID de tu copia de seguridadKMS_PROJECT
con el proyecto que contiene tu clave de CMEKKMS_LOCATION
con la ubicación que contiene tu clave y llavero de claves de CMEKKMS_KEYRING_ID
con el ID de tu llavero de claves CMEK
Confirma que la base de datos de Firestore restaurada esté encriptada con CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Cómo restablecer una base de datos protegida por CMEK a la encriptación predeterminada
Para restablecer la encriptación predeterminada de Google (no CMEK), establece 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
Reemplaza lo siguiente:
DATABASE_ID
por el ID de tu base de datosFIRESTORE_PROJECT
por el proyecto que usarás para tu base de datos de FirestoreFIRESTORE_LOCATION
por la ubicación de tu base de datos de FirestoreBACKUP_ID
por el ID de tu copia de seguridad
Cómo restablecer una base de datos protegida por CMEK al mismo tipo de encriptación que la copia de seguridad
Para restablecer el mismo tipo de encriptación que la copia de seguridad, establece 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
Reemplaza lo siguiente:
DATABASE_ID
por el ID de tu base de datosFIRESTORE_PROJECT
por el proyecto que usarás para tu base de datos de FirestoreFIRESTORE_LOCATION
por la ubicación de tu base de datos de FirestoreBACKUP_ID
por el ID de tu copia de seguridad
Visualiza la clave en uso
gcloud
Puedes usar el comando databases describe de gcloud CLI 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 información de CMEK en el campo cmekConfig
de la respuesta 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
: Es el nombre completo del recurso de clave que se usa para encriptar tu base de datos protegida por CMEK.activeKeyVersion
: Es una lista de todas las versiones de claves que usa actualmente la base de datos protegida por CMEK. Durante la rotación de claves, puedes tener varias versiones de claves activas. Tanto la versión de clave anterior como la nueva deben estar disponibles durante la rotación de claves. No inhabilites la versión anterior de la clave hasta que ya no aparezca en el campoactiveKeyVersion
.
API de 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 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 detalles 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"
]
},
……
}
Inhabilita una clave
Para inhabilitar una clave asociada con una base de datos, completa lo siguiente:
- Cómo ver las versiones de clave en uso de una base de datos
- Inhabilita esas versiones de clave
- Espera a que se aplique el cambio y verifica si ya no se puede acceder a los datos. Los cambios suelen implementarse en minutos, aunque pueden tardar hasta 3 horas.
Cuando se inhabilita una clave que usa una base de datos, espera recibir una excepción FAILED_PRECONDITION
con detalles adicionales en el mensaje de error, por ejemplo:
{ "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)" } ] } }
Habilita una clave
Para volver a habilitar una clave asociada con una base de datos, completa lo siguiente:
- Cómo ver las versiones de clave en uso de una base de datos
- Habilita esas versiones de clave
- Espera a que se aplique el cambio y verifica si ya no se puede acceder a los datos. Los cambios suelen implementarse en minutos, aunque pueden tardar hasta 3 horas.
Visualiza los registros de auditoría de una clave de Cloud KMS
Antes de habilitar los registros de auditoría de acceso a los datos de Cloud KMS, debes estar familiarizado con los registros de auditoría de Cloud.
Los registros de auditoría de acceso a los datos de Cloud KMS te muestran cuándo Firestore o cualquier otro producto configurado para usar tu clave CMEK realiza llamadas de encriptación/desencriptación a Cloud KMS. Firestore no emite una llamada de encriptación/desencriptación en cada solicitud de datos, sino que mantiene una aplicación de sondeo que verifica la clave de forma periódica. Los resultados del sondeo aparecen en los registros de auditoría.
Puedes configurar los registros de auditoría y también interactuar con ellos en la consola de Google Cloud:
Asegúrate de que el registro esté habilitado para la API de Cloud KMS en tu proyecto.
Ve a Cloud Logging en la consola de Google Cloud.
Agrega las siguientes líneas al compilador de consultas para limitar las entradas de registro a tu clave de Cloud KMS:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATION
Reemplaza lo siguiente:
KMS_KEY
por el nombre de la clave CMEKKMS_KEYRING
con el llavero de claves de KMS que contiene la claveKMS_LOCATION
con la ubicación de la clave y el llavero de claves
En el registro, se muestran un par de entradas de registro de alrededor de cinco minutos por base de datos. Las entradas de registro son similares a 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 Información sobre los registros de auditoría para obtener detalles sobre cómo interpretarlos.
Configura una política de la organización de CMEK
Para especificar los requisitos de cumplimiento de encriptación para las bases de datos de Firestore en tu organización, usa una restricción de la política de la organización de CMEK.
Cómo requerir protección con CMEK
Configura constraints/gcp.restrictNonCmekServices
para que requiera CMEK para la creación de bases de datos de Firestore. Establece la restricción en deny
y agrega 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
Reemplaza FIRESTORE_PROJECT
por el proyecto que deseas restringir.
Para obtener más información sobre cómo configurar las políticas de la organización, consulta Crea y edita políticas.
Después de que la política se aplique, recibirás una excepción FAILED_PRECONDITION
y un mensaje de error si intentas crear una base de datos que no sea de CMEK en el proyecto afectado. Por ejemplo, una excepción se ve de la siguiente manera:
{ "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." } ]
Limita el uso de claves para CMEK
Para limitar qué claves de Cloud KMS se usan para la protección de 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, configura una lista de indicadores de jerarquía de recursos y establece la restricción en Permitir.
Esta configuración restringe los servicios admitidos para que las claves de CMEK se puedan elegir solo de los proyectos, las carpetas y las organizaciones enumeradas. Las solicitudes para crear recursos protegidos por CMEK en servicios configurados no se realizan 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 por CMEK en el proyecto especificado:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
Después de que la política entre en vigencia, recibirás una excepción FAILED_PRECONDITION
y un mensaje de error si incumples la restricción. Una excepción se ve de la siguiente manera:
{ "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." } ] } ] } }