На этой странице описывается, как выполнять задачи, связанные с управляемыми клиентом ключами шифрования (CMEK) для Cloud Firestore . Для получения дополнительной информации о CMEK в целом, включая то, когда и зачем его включать, см. документацию Cloud KMS .
Подготовьте ключи CMEK
Прежде чем создать базу данных Cloud Firestore , защищенную с помощью CMEK, необходимо выполнить следующие шаги:
- Запросите доступ к функции Cloud Firestore CMEK .
- Создайте (или извлеките) агент службы Cloud Firestore .
- Создайте ключ CMEK .
- Настройте параметры IAM для этого ключа .
Выполните эти шаги для каждого проекта, который будет содержать базы данных Cloud Firestore , защищенные CMEK. Если вы позже создадите новый ключ CMEK, вам необходимо настроить параметры IAM для этого ключа.
Запросить доступ
Прежде чем создать агента службы Cloud Firestore , запросите доступ к функции CMEK, заполнив эту форму .
Создать агента службы Cloud Firestore
Перед созданием ключа CMEK у вас должен быть агент службы Cloud Firestore , представляющий собой тип управляемой Google учетной записи службы, которую Cloud Firestore использует для доступа к ключу.
Запустите команду services identity create , чтобы создать агента службы, который Cloud Firestore использует для доступа к ключу CMEK от вашего имени. Эта команда создает учетную запись службы, если она еще не существует, а затем отображает ее.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --project FIRESTORE_PROJECT
Замените FIRESTORE_PROJECT
на проект, который вы планируете использовать для своих баз данных Cloud Firestore .
Команда отображает идентификатор агента сервиса, который отформатирован как адрес электронной почты. Запишите выходную строку электронной почты, поскольку она понадобится вам на более позднем этапе.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
Создать ключ
Вы можете использовать ключ, созданный непосредственно в Cloud KMS, или внешний управляемый ключ, который вы сделаете доступным с помощью Cloud External Key Manager .
Расположение ключа Cloud KMS должно совпадать с расположением базы данных Cloud Firestore , с которой он будет использоваться.
Для региональных расположений баз данных используйте одно и то же имя расположения для брелока, ключа и базы данных, поскольку имена расположений имеют однозначное соответствие.
Например, если вы хотите создать базу данных, защищенную CMEK, в
us-west1
, создайте связку ключей и ключ вus-west1
.Для многорегиональных расположений баз данных используйте имя многорегионального расположения KMS :
- Используйте многорегиональное расположение Cloud KMS
us
для многорегионального расположения Cloud Firestorenam5
. - Используйте многорегиональное расположение Cloud KMS
europe
для многорегионального расположения Cloud Firestoreeur3
.
- Используйте многорегиональное расположение Cloud KMS
В проекте Google Cloud , где вы хотите управлять своими ключами, выполните следующие действия:
Создайте связку ключей и ключ, используя один из следующих вариантов:
- Создайте связку ключей и ключ непосредственно в Cloud KMS .
- Используйте внешне управляемый ключ. Создайте внешний ключ , а затем создайте ключ Cloud EKM, чтобы сделать ключ доступным через Cloud KMS.
Настройте параметры IAM для ключа
Консоль
Чтобы предоставить роль Cloud KMS вашему сервисному агенту, выполните следующие действия. Вы также можете предоставить разрешение на уровне ключа или кольца ключей, если вам нужна более низкая степень детализации.
В консоли Google Cloud перейдите на страницу IAM .
Нажмите Добавить .
Введите идентификатор в формате адреса электронной почты для вашего агента службы Cloud Firestore .
Выберите роль шифровальщика/дешифровальщика криптографических ключей Cloud KMS .
Нажмите «Сохранить» .
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.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
Создать базу данных с поддержкой CMEK
После создания и настройки ключей CMEK вы можете создать базу данных, защищенную CMEK. Существующие базы данных Cloud Firestore , защищенные шифрованием Google по умолчанию, не могут быть преобразованы для использования CMEK.
Выбрать тип шифрования и ключ можно только при создании базы данных с поддержкой CMEK.
Консоль
В консоли Google Cloud перейдите на страницу Базы данных .
Нажмите Создать базу данных .
Выберите режим базы данных. Нажмите Продолжить .
На странице «Настройка базы данных» введите идентификатор базы данных.
Выберите местоположение.
Нажмите Показать параметры шифрования , а затем выберите Ключ Cloud KMS .
Выберите или введите имя ресурса для ключа CMEK, который вы хотите использовать для базы данных.
Список ключей ограничен текущим проектом Google Cloud и выбранным вами расположением базы данных. Чтобы использовать ключ из другого проекта Google Cloud , нажмите Switch Project или Enter Key Manually .
Если вам будет предложено предоставить разрешение на доступ к ключу учетной записи службы Cloud Firestore , нажмите Предоставить . Чтобы создать базу данных CMEK, вашей учетной записи службы Cloud Firestore должна быть предоставлена роль
cloudkms.cryptoKeyEncrypterDecrypter
.Выберите правила безопасности для мобильных и веб-клиентов.
Нажмите Создать базу данных .
После создания базы данных вы можете убедиться, что она поддерживает 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 \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Заменить следующее:
-
FIRESTORE_DATABASE_LOCATION
с расположением базы данных Cloud Firestore -
DATABASE_ID
с идентификатором базы данных KMS_KEY_NAME
с именем, которое вы назначили ключу. Используйте полное имя ресурса для ключа в следующем формате:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID
FIRESTORE_PROJECT
с проектом, который будет использоваться для вашей базы данных Cloud Firestore
REST-API
HTTP-запрос:
ПОСТ https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
В теле запроса настройте 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 -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
Чтобы создать базу данных с поддержкой CMEK, используйте поле KMS Key Name . Если вы не укажете параметр --kms-key-name
, Cloud Firestore по умолчанию создаст базу данных без поддержки CMEK.
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
Заменить следующее:
-
DATABASE_ID
с идентификатором вашей базы данных -
LOCATION
с указанием местоположения вашей базы данных -
KMS_PROJECT
с проектом, содержащим ваш ключ CMEK -
KMS_LOCATION
с местоположением, в котором находится ваш ключ CMEK и брелок для ключей -
KMS_KEYRING_ID
с идентификатором вашего CMEK-брелка -
FIRESTORE_PROJECT
с проектом, который будет использоваться для вашей базы данных Cloud Firestore
Убедитесь, что ваша база данных Cloud Firestore защищена с помощью Firebase CLI:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
В ответном сообщении отображается следующая информация CMEK:
- Поле «Имя ключа KMS» содержит полное имя ресурса ключа, который используется для шифрования базы данных Cloud Firestore CMEK.
- Поле Active Key Versions содержит список всех версий ключей, используемых в настоящее время этой базой данных CMEK. Во время ротации ключей у вас может быть несколько активных версий ключей.
Терраформировать
Для создания базы данных с поддержкой CMEK используйте ресурс google_firestore_database
. Для получения дополнительной информации и примеров см. 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"
}
}
Заменить следующее:
-
FIRESTORE_PROJECT
с проектом, который будет использоваться для вашей базы данных Cloud Firestore -
DATABASE_ID
с идентификатором базы данных -
FIRESTORE_DATABASE_LOCATION
с расположением базы данных Cloud Firestore -
DATABASE_TYPE
сFIRESTORE_NATIVE
для собственного режима илиDATASTORE_MODE
для режима хранилища данных. KMS_KEY_NAME
с именем, которое вы назначили ключу. Используйте полное имя ресурса для ключа в формате:projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID
Доступ к базе данных, защищенной 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 -
FIRESTORE_LOCATION
с местоположением вашей базы данных Cloud Firestore -
BACKUP_ID
с идентификатором вашей резервной копии -
KMS_PROJECT
с проектом, содержащим ваш ключ CMEK -
KMS_LOCATION
с местоположением, в котором находится ваш ключ CMEK и брелок для ключей -
KMS_KEYRING_ID
с идентификатором вашего CMEK-брелка
Убедитесь, что восстановленная база данных Cloud Firestore зашифрована с помощью 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 -
FIRESTORE_LOCATION
с местоположением вашей базы данных Cloud Firestore -
BACKUP_ID
с идентификатором вашей резервной копии
Восстановите базу данных, защищенную CMEK, с тем же типом шифрования, что и у резервной копии.
Чтобы восстановить тот же тип шифрования, что и у резервной копии, установите флаг encryption-type
следующим образом:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Заменить следующее:
-
DATABASE_ID
с идентификатором вашей базы данных -
FIRESTORE_PROJECT
с проектом, который будет использоваться для вашей базы данных Cloud Firestore -
FIRESTORE_LOCATION
с местоположением вашей базы данных Cloud Firestore -
BACKUP_ID
с идентификатором вашей резервной копии
Посмотреть используемый ключ
gcloud
Для подтверждения конфигурации базы данных CMEK можно использовать команду CLI databases describe gcloud CLI :
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
Вы должны увидеть информацию CMEK в поле cmekConfig
в ответе, аналогичном следующему:
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"
—----------------------------------------- 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"
]
},
……
}
Отключить клавишу
Чтобы отключить ключ, связанный с базой данных, выполните следующие действия:
- Просмотр основных версий, используемых для базы данных .
- Отключите эти используемые версии ключей .
- Подождите, пока изменения вступят в силу, и проверьте, не стали ли данные недоступны. Изменения обычно вступают в силу в течение нескольких минут, но это может занять до 3 часов.
Если ключ, используемый базой данных, отключен, ожидайте получения исключения FAILED_PRECONDITION
с дополнительными подробностями в сообщении об ошибке, например:
{ "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)" } ] } }
Включить ключ
Чтобы повторно включить ключ, связанный с базой данных, выполните следующие действия:
- Просмотр основных версий, используемых для базы данных
- Включить эти версии ключей в использование
- Подождите, пока изменения вступят в силу, и проверьте, не стали ли данные недоступны. Изменения обычно вступают в силу в течение нескольких минут, но это может занять до 3 часов.
Просмотр журналов аудита для ключа Cloud KMS
Прежде чем включить журналы аудита доступа к данным Cloud KMS, вам следует ознакомиться с журналами аудита Cloud .
Журналы аудита доступа к данным Cloud KMS показывают, когда Cloud Firestore или любые другие продукты, настроенные на использование вашего ключа CMEK, выполняют вызовы шифрования/дешифрования в Cloud KMS. Cloud Firestore не отправляет вызов шифрования/дешифрования на каждый запрос данных, а вместо этого поддерживает опросчик, который периодически проверяет ключ. Результаты опроса отображаются в журналах аудита.
Вы можете настроить и взаимодействовать с журналами аудита в консоли Google Cloud :
Убедитесь, что в вашем проекте включено ведение журнала для API Cloud KMS.
Перейдите в Cloud Logging в консоли Google Cloud.
Ограничьте записи журнала вашим ключом 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.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"
-
Подробную информацию об интерпретации журналов аудита см. в разделе Понимание журналов аудита.
Настройте политику организации CMEK
Чтобы указать требования к соблюдению правил шифрования для баз данных Cloud Firestore в вашей организации, используйте ограничение политики организации CMEK .
Требуется защита CMEK
Настройте constraints/gcp.restrictNonCmekServices
, чтобы требовать CMEK для создания базы данных Cloud Firestore . Установите ограничение на deny
и добавьте firestore.googleapis.com
в список deny, например:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Замените FIRESTORE_PROJECT
на проект, который необходимо ограничить.
Дополнительную информацию о настройке политик организации см. в разделе Создание и редактирование политик .
После вступления политики в силу вы получите исключение FAILED_PRECONDITION
и сообщение об ошибке, если попытаетесь создать базу данных, отличную от CMEK, в затронутом проекте. Например, исключение выглядит так:
{ "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 из одного из разрешенных ресурсов.
В следующем примере разрешены только ключи из ALLOWED_KEY_PROJECT_ID для баз данных, защищенных CMEK, в указанном проекте:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
После вступления политики в силу вы получите исключение 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." } ] } ] } }