Используйте ключи шифрования, управляемые клиентом (CMEK).

На этой странице описано, как выполнять задачи, связанные с управляемыми клиентом ключами шифрования (CMEK) для Cloud Firestore с совместимостью с MongoDB . Для получения дополнительной информации о CMEK в целом, включая случаи, когда и зачем его включать, см. документацию Cloud KMS .

Подготовьте ключи CMEK.

Прежде чем создавать защищенную CMEK базу данных Cloud Firestore, совместимую с MongoDB, необходимо выполнить следующие шаги:

  1. Запросите доступ к Cloud Firestore с поддержкой MongoDB через функцию CMEK .
  2. Создайте (или получите) агент службы совместимости Cloud Firestore с MongoDB .
  3. Создайте ключ CMEK .
  4. Настройте параметры IAM для этого ключа .

Выполните эти шаги для каждого проекта, который будет содержать базы данных Cloud Firestore, защищенные CMEK и совместимые с MongoDB. Если вы позже создадите новый ключ CMEK, вам необходимо будет настроить параметры IAM для этого ключа.

Запросить доступ

Прежде чем создавать агент службы совместимости Cloud Firestore с MongoDB, запросите доступ к функции CMEK, заполнив форму запроса доступа .

Создайте агент службы совместимости Cloud Firestore с MongoDB.

Прежде чем создавать ключ CMEK, необходимо иметь агент службы совместимости Cloud Firestore с MongoDB, который представляет собой тип управляемой Google учетной записи службы, используемой Cloud Firestore с MongoDB для доступа к ключу.

Выполните команду services identity create , чтобы создать агента службы, который Cloud Firestore с поддержкой MongoDB использует для доступа к ключу CMEK от вашего имени. Эта команда создаст учетную запись службы, если она еще не существует, а затем отобразит ее.

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

Замените FIRESTORE_PROJECT на название проекта, который вы планируете использовать для баз данных Cloud Firestore, совместимых с MongoDB.

Команда отображает идентификатор сервисного агента, который имеет формат адреса электронной почты. Запишите полученную строку адреса электронной почты, поскольку она понадобится вам на следующем шаге.

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

Создать ключ

Вы можете использовать ключ, созданный непосредственно в Cloud KMS, или ключ, управляемый извне, который вы предоставляете с помощью Cloud External Key Manager .

Местоположение ключа Cloud KMS должно совпадать с местоположением базы данных Cloud Firestore, совместимой с MongoDB, с которой он будет использоваться.

В проекте Google Cloud , где вы хотите управлять ключами, выполните следующие действия:

  1. Включите API Cloud KMS .

  2. Создайте связку ключей и сам ключ, используя один из следующих вариантов:

Настройте параметры IAM для ключа.

Консоль

Чтобы предоставить агенту службы роль Cloud KMS, выполните следующие действия. Вы также можете предоставить разрешения на уровне ключа или связки ключей, если вам нужна более низкая детализация.

  1. В консоли Google Cloud перейдите на страницу IAM .

    Перейдите на страницу IAM.

  2. Нажмите «Добавить» .

  3. Введите идентификатор в формате электронной почты для вашего агента службы совместимости Cloud Firestore с MongoDB.

  4. Выберите роль Cloud KMS CryptoKey Encrypter/Decrypter .

  5. Нажмите « Сохранить ».

gcloud

Предоставьте вашему агенту службы роль cloudkms.cryptoKeyEncrypterDecrypter :

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

Замените следующее:

  • KMS_KEY это имя, которое вы присвоили ключу.
  • KMS_KEYRING содержит связку ключей KMS, в которой находится ключ.
  • KMS_LOCATION регион, в котором находится связка ключей.
  • Укажите в поле SERVICE_AGENT_EMAIL идентификатор сервисного агента в формате электронной почты, которому вы предоставляете доступ.
  • KMS_PROJECT с проектом, содержащим ключ.

На экране терминала должен отобразиться ответ, аналогичный следующему:

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

Создайте базу данных с поддержкой CMEK.

После создания и настройки ключей CMEK вы можете создать базу данных, защищенную с помощью CMEK. Существующие базы данных Cloud Firestore, совместимые с MongoDB и защищенные шифрованием Google по умолчанию, не могут быть преобразованы для использования CMEK.

Тип шифрования и ключ можно выбрать только при создании базы данных с поддержкой CMEK.

Консоль

  1. В консоли Google Cloud перейдите на страницу «Базы данных» .

    Перейдите на страницу «Базы данных».

  2. Нажмите «Создать базу данных Firestore» .

  3. Введите идентификатор базы данных.

  4. Выберите версию Enterprise Edition.

  5. Выберите местоположение для вашей базы данных.

  6. Нажмите «Показать параметры шифрования» , а затем выберите ключ Cloud KMS .

  7. Выберите или введите имя ресурса для ключа CMEK, который вы хотите использовать для базы данных.

  8. Список ключей ограничен текущим проектом Google Cloud и выбранным вами расположением базы данных. Чтобы использовать ключ из другого проекта Google Cloud , нажмите «Переключить проект» или «Ввести ключ вручную» .

  9. Если появится запрос на предоставление прав доступа к ключу учетной записи службы совместимости Cloud Firestore с MongoDB, нажмите «Предоставить» . Для создания базы данных CMEK вашей учетной записи службы совместимости Cloud Firestore с MongoDB должна быть предоставлена ​​роль cloudkms.cryptoKeyEncrypterDecrypter .

  10. Выберите правила безопасности для мобильных и веб-клиентов.

  11. Нажмите «Создать базу данных» .

После создания базы данных вы можете убедиться в ее поддержке CMEK, просмотрев сведения о базе данных :

  • Если ваша база данных защищена с помощью CMEK, в поле «Тип шифрования» отображается «Управляется клиентом» , а в поле «Ключ шифрования» указывается соответствующий Cloud KMS и версия ключа, используемого для защиты этой базы данных.
  • Если ваша база данных не защищена CMEK, в поле «Тип шифрования» отображается значение «Управляется Google» .

gcloud

Прежде чем создавать базу данных с поддержкой CMEK с помощью Google Cloud CLI , установите последнюю версию и авторизуйте gcloud CLI . Дополнительную информацию см. в разделе «Установка gcloud CLI .

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

Замените следующее:

  • FIRESTORE_DATABASE_LOCATION содержит местоположение базы данных.
  • DATABASE_ID — идентификатор базы данных.
  • В KMS_KEY_NAME укажите имя, присвоенное ключу. Используйте полное имя ресурса для ключа в следующем формате:

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

  • FIRESTORE_PROJECT это путь к проекту, который вы будете использовать для своей базы данных Cloud Firestore, совместимой с MongoDB.

Получите доступ к базе данных, защищенной протоколом CMEK.

Все операции чтения, записи и запросов, отправляемые в базу данных, защищенную CMEK, должны работать так же, как и в стандартной зашифрованной базе данных Google. Например, вам не нужно указывать ключ для каждого запроса.

Восстановите базу данных, защищенную CMEK.

Перед восстановлением базы данных, защищенной CMEK, из резервной копии:

  • Решите, хотите ли вы восстановить базу данных с использованием шифрования CMEK, шифрования по умолчанию от Google (не CMEK) или того же шифрования, что и в резервной копии.
  • Подготовьте ключ (основную версию) и версию ключа, которую вы использовали для шифрования резервной копии. Активируйте оба ключа и версию ключа.

gcloud

Восстановление базы данных, защищенной CMEK, с использованием шифрования CMEK.

Для восстановления с использованием шифрования CMEK выполните команду gcloud firestore databases restore с необязательными флагами encryption-type и kms-key-name чтобы настроить тип шифрования для восстанавливаемой базы данных. Если вы не укажете тип шифрования, восстанавливаемая база данных будет использовать ту же конфигурацию шифрования, что и резервная копия.

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

Замените KMS_KEY_NAME на имя, которое вы присвоили ключу. Используйте полное имя ресурса для ключа в следующем формате:

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

Восстановите базу данных, защищенную CMEK, с использованием шифрования по умолчанию.

Чтобы восстановить шифрование по умолчанию от Google (не CMEK), установите флаг encryption-type следующим образом:

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

Восстановите базу данных, защищенную CMEK, с тем же типом шифрования, что и в резервной копии.

Чтобы восстановить данные с тем же типом шифрования, что и в резервной копии, установите флаг encryption-type следующим образом:

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

Firebase CLI

Восстановление базы данных, защищенной CMEK, с использованием шифрования CMEK.

Для восстановления с использованием шифрования CMEK используйте необязательные флаги encryption-type и kms-key-name . Если тип шифрования не указан, восстановленная база данных будет использовать ту же конфигурацию шифрования, что и резервная копия.

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

Замените следующее:

  • DATABASE_ID содержит идентификатор вашей базы данных.
  • FIRESTORE_PROJECT это путь к проекту, который вы будете использовать для своей базы данных Cloud Firestore, совместимой с MongoDB.
  • FIRESTORE_LOCATION указывает местоположение вашей базы данных Cloud Firestore, совместимой с MongoDB.
  • BACKUP_ID содержит идентификатор вашей резервной копии.
  • KMS_PROJECT это проект, содержащий ваш ключ CMEK.
  • KMS_LOCATION местоположение, содержащее ваш ключ CMEK и связку ключей.
  • KMS_KEYRING_ID содержит идентификатор вашего брелока CMEK.

Убедитесь, что восстановленная база данных Cloud Firestore, совместимая с MongoDB, зашифрована с помощью CMEK:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

Восстановите базу данных, защищенную CMEK, с использованием шифрования по умолчанию.

Чтобы восстановить шифрование по умолчанию от Google (не CMEK), установите флаг encryption-type следующим образом:

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

Замените следующее:

  • DATABASE_ID содержит идентификатор вашей базы данных.
  • FIRESTORE_PROJECT это путь к проекту, который вы будете использовать для своей базы данных Cloud Firestore, совместимой с MongoDB.
  • FIRESTORE_LOCATION указывает местоположение вашей базы данных Cloud Firestore, совместимой с MongoDB.
  • BACKUP_ID содержит идентификатор вашей резервной копии.

Восстановите базу данных, защищенную CMEK, с тем же типом шифрования, что и в резервной копии.

Чтобы восстановить данные с тем же типом шифрования, что и в резервной копии, установите флаг encryption-type следующим образом:

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

Замените следующее:

  • DATABASE_ID содержит идентификатор вашей базы данных.
  • FIRESTORE_PROJECT это путь к проекту, который вы будете использовать для своей базы данных Cloud Firestore, совместимой с MongoDB.
  • FIRESTORE_LOCATION указывает местоположение вашей базы данных Cloud Firestore, совместимой с MongoDB.
  • BACKUP_ID содержит идентификатор вашей резервной копии.

Клонируйте базу данных, защищенную CMEK.

Перед клонированием базы данных, защищенной CMEK:

  • Решите, хотите ли вы клонировать базу данных с использованием шифрования CMEK, с использованием шифрования по умолчанию от Google (не CMEK) или с использованием того же шифрования, что и в исходной базе данных.
  • Подготовьте ключ (основную версию) и версию ключа, которую вы использовали для шифрования исходной базы данных. Активируйте оба ключа и версию ключа.

gcloud

Клонирование базы данных, защищенной CMEK, с использованием шифрования CMEK.

Для клонирования с использованием шифрования CMEK выполните команду gcloud firestore databases clone с необязательными флагами encryption-type и kms-key-name чтобы настроить тип шифрования для клонированной базы данных. Если вы не укажете тип шифрования, клонированная база данных будет использовать ту же конфигурацию шифрования, что и исходная база данных.

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

Замените KMS_KEY_NAME на имя, которое вы присвоили ключу. Используйте полное имя ресурса для ключа в следующем формате:

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

Клонируйте базу данных, защищенную CMEK, с использованием шифрования по умолчанию.

Чтобы клонировать систему с использованием шифрования по умолчанию от Google (не CMEK), установите флаг encryption-type следующим образом:

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

Создайте клон базы данных, защищенной CMEK, с тем же типом шифрования, что и исходная база данных.

Чтобы клонировать базу данных с тем же типом шифрования, что и в исходной базе данных, установите флаг encryption-type следующим образом:

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

Это также поведение по умолчанию, если --encryption-type не указан.

Firebase CLI

Клонирование базы данных, защищенной CMEK, с использованием шифрования CMEK.

Для клонирования с использованием шифрования CMEK выполните команду firebase firestore:databases:clone с необязательными флагами encryption-type и kms-key-name чтобы настроить тип шифрования для клонированной базы данных. Если вы не укажете тип шифрования, клонированная база данных будет использовать ту же конфигурацию шифрования, что и исходная база данных.

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME

Замените KMS_KEY_NAME на имя, которое вы присвоили ключу. Используйте полное имя ресурса для ключа в следующем формате:

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

Клонируйте базу данных, защищенную CMEK, с использованием шифрования по умолчанию.

Чтобы клонировать систему с использованием шифрования по умолчанию от Google (не CMEK), установите флаг encryption-type следующим образом:

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION

Создайте клон базы данных, защищенной CMEK, с тем же типом шифрования, что и исходная база данных.

Чтобы клонировать базу данных с тем же типом шифрования, что и в исходной базе данных, установите флаг encryption-type следующим образом:

  firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION

Это также поведение по умолчанию, если --encryption-type не указан.

Посмотреть используемый ключ

gcloud

Для подтверждения конфигурации CMEK для базы данных можно использовать команду CLI ` databases describe gcloud CLI :

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

В ответе в поле cmekConfig должна отобразиться информация о CMEK, примерно следующего вида:

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

В ответе содержится следующая информация:

  • kmsKeyName : полное имя ресурса ключа, используемого для шифрования базы данных, защищенной с помощью CMEK.
  • activeKeyVersion : список всех версий ключей, используемых базой данных, защищенной CMEK. Во время ротации ключей может быть несколько активных версий ключей. Как старая, так и новая версии ключа должны быть доступны во время ротации. Не отключайте старую версию ключа, пока она не перестанет отображаться в поле activeKeyVersion .

REST API

HTTP-запрос:

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

В теле запроса настройте CMEK в поле cmek_config.kms_key_name . Установите значение, равное полному идентификатору ресурса ключа Cloud KMS. Допускается использование только ключа, расположенного в том же месте, что и эта база данных.

Это значение должно представлять собой идентификатор ресурса ключа Cloud KMS в формате projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} .

Более подробную информацию о других полях см. на странице database create .

Пример запроса:

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"

Пример ответа:

{
  "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"
    ]
  },
  ...
}

Отключить клавишу

Чтобы отключить ключ, связанный с базой данных, выполните следующие действия:

  1. Просмотрите основные версии, используемые для базы данных.
  2. Отключите эти ключевые версии
  3. Дождитесь, пока изменения вступят в силу, и проверьте, не стали ли данные недоступны. Изменения обычно вступают в силу в течение нескольких минут, но могут занять до 3 часов.

Если ключ, используемый базой данных, отключен, ожидайте получения исключения INVALID_ARGUMENT с дополнительными подробностями в сообщении об ошибке, например:

{
  "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."
      }
    ]
  }
}

Включить клавишу

Для повторной активации ключа, связанного с базой данных, выполните следующие действия:

  1. Просмотрите основные версии, используемые для базы данных.
  2. Включите эти ключевые версии
  3. Дождитесь, пока изменения вступят в силу, и проверьте, не стали ли данные недоступны. Изменения обычно вступают в силу в течение нескольких минут, но могут занять до 3 часов.

Просмотреть журналы аудита для ключа Cloud KMS

Прежде чем включить журналы аудита доступа к данным Cloud KMS, вам следует ознакомиться с принципами работы журналов аудита Cloud .

Журналы аудита доступа к данным Cloud KMS показывают, когда Cloud Firestore с поддержкой MongoDB или любые другие продукты, настроенные на использование вашего ключа CMEK, выполняют вызовы шифрования или расшифровки к Cloud KMS. Cloud Firestore с поддержкой MongoDB не выполняет вызов шифрования или расшифровки при каждом запросе данных, а вместо этого поддерживает опросчик, который периодически проверяет ключ. Результаты опроса отображаются в журналах аудита.

Настроить журналы аудита и взаимодействовать с ними можно в консоли Google Cloud :

  1. Убедитесь, что в вашем проекте включено логирование для API Cloud KMS.

  2. Перейдите в Cloud Logging в консоли Google Cloud.

    Перейти к Cloud Logging

  3. Ограничьте количество записей в журнале только вашим ключом 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
    

    Замените следующее:

    • KMS_KEY с именем ключа CMEK
    • KMS_KEYRING содержит связку ключей KMS, в которой находится ключ.
    • KMS_LOCATION содержит информацию о местонахождении ключа и брелока.

    В журнале отображается несколько записей примерно каждые пять минут для каждой базы данных. Записи выглядят примерно так:

    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.
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore."
    
    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.
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore."
    

Подробную информацию об интерпретации журналов аудита см. в разделе «Понимание журналов аудита».

Настройте политику организации CMEK.

Для задания требований к соответствию стандартам шифрования для баз данных Cloud Firestore, совместимых с MongoDB, в вашей организации используйте ограничение политики организации CMEK .

Требуется защита CMEK.

Настройте constraints/gcp.restrictNonCmekServices таким образом, чтобы для создания базы данных Cloud Firestore с совместимостью с MongoDB требовалось использование CMEK. Установите ограничение на deny и добавьте firestore.googleapis.com в список deny, например:

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

Замените FIRESTORE_PROJECT на название проекта, для которого необходимо установить ограничения.

Для получения дополнительной информации о настройке организационных политик см. раздел «Создание и редактирование политик» .

После вступления политики в силу при попытке создать базу данных, не относящуюся к CMEK, в рамках затронутого проекта вы получите исключение FAILED_PRECONDITION и сообщение об ошибке. Например, исключение может выглядеть так:

{
  "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."
          }
        ]

Ограничить использование ключей для CMEK

Чтобы ограничить использование ключей Cloud KMS для защиты CMEK, настройте ограничение constraints/gcp.restrictCmekCryptoKeyProjects .

В качестве ограничения списка допустимыми значениями являются индикаторы иерархии ресурсов (например, projects/PROJECT_ID , under:folders/FOLDER_ID и under:organizations/ORGANIZATION_ID ). Для использования этого ограничения необходимо настроить список индикаторов иерархии ресурсов и установить значение параметра Allow . Эта конфигурация ограничивает поддерживаемые сервисы таким образом, чтобы ключи CMEK можно было выбирать только из перечисленных проектов, папок и организаций. Запросы на создание ресурсов, защищенных CMEK, в настроенных сервисах не будут выполнены без Cloud Firestore с ключом совместимости MongoDB из одного из разрешенных ресурсов.

В следующем примере разрешены только ключи из ALLOWED_KEY_PROJECT_ID для баз данных, защищенных CMEK, в указанном проекте:

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

После вступления политики в силу вы получите исключение FAILED_PRECONDITION и сообщение об ошибке, если нарушите ограничение. Исключение выглядит следующим образом:

{
  "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."
          }
        ]
      }
    ]
  }
}

Что дальше?