Use chaves de encriptação geridas pelo cliente (CMEK)
Esta página descreve como realizar tarefas relacionadas com as chaves de encriptação geridas pelo cliente (CMEK) para o Firestore com compatibilidade com o MongoDB. Para mais informações sobre as CMEK em geral, incluindo quando e por que motivo as ativar, consulte a documentação do Cloud KMS.
Prepare as suas chaves CMEK
Antes de poder criar uma base de dados do Firestore com compatibilidade com o MongoDB protegida por CMEK, tem de concluir os seguintes passos:
- Peça acesso à funcionalidade CMEK do Firestore com compatibilidade com o MongoDB.
- Crie (ou obtenha) um agente do serviço de compatibilidade do Firestore com o MongoDB.
- Crie uma chave CMEK.
- Configure as definições da IAM para essa chave.
Conclua estes passos para cada projeto que vai conter bases de dados do Firestore com compatibilidade com o MongoDB protegidas por CMEK. Se criar posteriormente uma nova chave CMEK, tem de configurar as definições do IAM para essa chave.
Pedir acesso
Antes de criar um agente de serviço do Firestore com compatibilidade com o MongoDB, peça acesso à funcionalidade CMEK preenchendo o formulário de pedido de acesso.
Crie um agente de serviço do Firestore com compatibilidade com o MongoDB
Antes de criar uma chave CMEK, tem de ter um agente de serviço do Firestore com compatibilidade com o MongoDB, que é um tipo de conta de serviço gerida pela Google que o Firestore com compatibilidade com o MongoDB usa para aceder à chave.
Execute o comando services identity create para criar o agente de serviço que o Firestore com compatibilidade com o MongoDB usa para aceder à chave CMEK em seu nome. Este comando cria a conta de serviço se ainda não existir e, em seguida, apresenta-a.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
Substitua FIRESTORE_PROJECT
pelo projeto que planeia usar
para as bases de dados compatíveis com o Firestore com o MongoDB.
O comando apresenta o ID do agente de serviço, que está formatado como um endereço de email. Registe a string de email de saída, porque a vai usar num passo posterior.
Service identity created:
service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
Crie uma chave
Pode usar uma chave criada diretamente no Cloud KMS ou uma chave gerida externamente que disponibiliza com o Cloud External Key Manager.
A localização da chave do Cloud KMS tem de ser igual à localização da base de dados do Firestore com compatibilidade com o MongoDB que vai ser usada.
Para localizações de bases de dados regionais, use o mesmo nome de localização para o anel de chaves, a chave e a base de dados, porque os nomes de localização têm um mapeamento individual.
Por exemplo, se quiser criar uma base de dados protegida por CMEK em
us-west1
, crie um anel de chaves e uma chave emus-west1
.Para localizações de bases de dados multirregionais, use o nome da localização da localização multirregional do KMS:
Use a
us
localização multirregionalnam5
do Cloud KMS para a localização multirregional do Firestore com compatibilidade com o MongoDB.Use a
europe
localização multirregionaleur3
do Cloud KMS para a localização multirregional do Firestore com compatibilidade com o MongoDB.
No Google Cloud projeto onde quer gerir as suas chaves, conclua o seguinte:
Crie um conjunto de chaves e uma chave através de uma das seguintes opções:
- Crie o conjunto de chaves e a chave diretamente no Cloud KMS.
- Use uma chave gerida externamente. Crie a chave externa e, em seguida, crie uma chave do Cloud EKM para disponibilizar a chave através do Cloud KMS.
Configure as definições do IAM para a chave
Consola
Para conceder uma função do Cloud KMS ao seu agente do serviço, faça o seguinte: Também pode conceder autorização ao nível da chave ou do conjunto de chaves se quiser uma granularidade inferior.
Na Google Cloud consola, aceda à página IAM.
Clique em Adicionar.
Introduza o ID no formato de email do agente do serviço Firestore com compatibilidade com o MongoDB.
Selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.
Clique em Guardar.
gcloud
Conceda a função cloudkms.cryptoKeyEncrypterDecrypter
ao seu agente do serviço:
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
Substitua o seguinte:
KMS_KEY
com o nome que atribuiu à chaveKMS_KEYRING
com o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
com a região que contém o conjunto de chavesSERVICE_AGENT_EMAIL
com o identificador formatado como email para o agente de serviço ao qual está a conceder acessoKMS_PROJECT
com o projeto que contém a chave
O terminal deve apresentar uma resposta semelhante à seguinte:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
Crie uma base de dados com CMEK ativada
Depois de criar e configurar as chaves CMEK, pode criar uma base de dados protegida por CMEK. Não é possível converter bases de dados do Firestore com compatibilidade com o MongoDB existentes que estejam protegidas pela encriptação predefinida da Google para usar CMEK.
Só pode escolher um tipo de encriptação e uma chave quando cria uma base de dados com a CMEK ativada.
Consola
Na Google Cloud consola, aceda à página Bases de dados.
Clique em Criar uma base de dados do Firestore.
Introduza um ID da base de dados.
Selecione a edição Enterprise.
Selecione uma localização para a base de dados.
Clique em Mostrar opções de encriptação e, de seguida, selecione Chave do Cloud KMS.
Selecione ou introduza o nome do recurso da chave CMEK que quer usar para a base de dados.
A lista de chaves está limitada ao Google Cloud projeto atual e à localização da base de dados que selecionou. Para usar uma chave de um projeto Google Cloud diferente, clique em Mudar de projeto ou Introduzir chave manualmente.
Se lhe for pedido que conceda autorização de chave à conta de serviço do Firestore com compatibilidade com o MongoDB, clique em Conceder. Para criar uma base de dados CMEK, a conta de serviço do Firestore com compatibilidade com o MongoDB tem de ter a função
cloudkms.cryptoKeyEncrypterDecrypter
concedida.Selecione regras de segurança para clientes Web e para dispositivos móveis.
Clique em Criar base de dados.
Depois de criar a base de dados, pode verificar se a mesma tem a CMEK ativada, consultando os detalhes da base de dados:
- Se a sua base de dados estiver protegida por CMEK, o campo Tipo de encriptação é apresentado como Gerido pelo cliente e o campo Chave de encriptação apresenta o Cloud KMS correspondente e a versão da chave usada para proteger esta base de dados.
- Se a sua base de dados não estiver protegida por CMEK, o campo Tipo de encriptação é apresentado como Gerido pela Google.
gcloud
Antes de criar uma base de dados com CMEK através da CLI gcloud, instale a versão mais recente e autorize a CLI gcloud. Para mais informações, consulte o artigo Instale a CLI gcloud.
gcloud firestore databases create \
--location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--edition=enterprise \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Substitua o seguinte:
FIRESTORE_DATABASE_LOCATION
com a localização da base de dadosDATABASE_ID
com um ID para a base de dadosKMS_KEY_NAME
com o nome que atribuiu à chave. Use o nome completo do recurso para a chave no seguinte formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDB
Aceda a uma base de dados protegida por CMEK
Todas as operações de leitura, escrita e consulta enviadas para uma base de dados protegida por CMEK devem funcionar da mesma forma que com uma base de dados encriptada predefinida da Google. Por exemplo, não tem de fornecer uma chave para cada pedido.
Restaure uma base de dados protegida por CMEK
Antes de restaurar a base de dados protegida pela CMEK a partir de uma cópia de segurança:
- Decida se quer restaurar a base de dados para a encriptação CMEK, para a encriptação predefinida da Google (não CMEK) ou para a mesma encriptação da cópia de segurança.
Prepare a chave (versão principal) e a versão da chave que usou para encriptar a cópia de segurança. Ative a chave e a versão da chave.
gcloud
Restaure uma base de dados protegida por CMEK para a encriptação CMEK
Para restaurar a encriptação CMEK, execute o comando
gcloud firestore databases restore
com os marcadores opcionais encryption-type
e kms-key-name
para
configurar o tipo de encriptação para a base de dados restaurada. Se não especificar o tipo de encriptação, a base de dados restaurada usa a mesma configuração de encriptação que a cópia de segurança.
gcloud firestore databases restore \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
Substitua KMS_KEY_NAME
pelo nome que atribuiu à chave. Use o nome completo do recurso para a chave no seguinte formato:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Restaure uma base de dados protegida por CMEK para a encriptação predefinida
Para restaurar a encriptação predefinida da Google (não CMEK),
defina a flag encryption-type
da seguinte forma:
gcloud firestore databases restore \
--encryption-type=google-default-encryption
Restaure uma base de dados protegida por CMEK para o mesmo tipo de encriptação da cópia de segurança
Para restaurar o mesmo tipo de encriptação da cópia de segurança, defina a flag encryption-type
da seguinte forma:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
Restaure uma base de dados protegida por CMEK para a encriptação CMEK
Para restaurar a encriptação CMEK, use a flag encryption-type
e kms-key-name
opcionais. Se não especificar o tipo de encriptação, a base de dados restaurada usa a mesma configuração de encriptação que a cópia de segurança.
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
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDBFIRESTORE_LOCATION
com a localização da sua base de dados do Firestore com compatibilidade com o MongoDBBACKUP_ID
com o ID da sua cópia de segurançaKMS_PROJECT
com o projeto que contém a sua chave CMEKKMS_LOCATION
com a localização que contém a chave CMEK e o conjunto de chavesKMS_KEYRING_ID
com o ID do seu conjunto de chaves CMEK
Confirme se a base de dados do Firestore com compatibilidade com o MongoDB restaurada está encriptada com CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Restaure uma base de dados protegida por CMEK para a encriptação predefinida
Para restaurar a encriptação predefinida da Google (não CMEK),
defina a flag encryption-type
da seguinte forma:
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
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDBFIRESTORE_LOCATION
com a localização da sua base de dados do Firestore com compatibilidade com o MongoDBBACKUP_ID
com o ID da sua cópia de segurança
Restaure uma base de dados protegida por CMEK para o mesmo tipo de encriptação da cópia de segurança
Para restaurar o mesmo tipo de encriptação da cópia de segurança, defina a flag encryption-type
da seguinte forma:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDBFIRESTORE_LOCATION
com a localização da sua base de dados do Firestore com compatibilidade com o MongoDBBACKUP_ID
com o ID da sua cópia de segurança
Clone uma base de dados protegida por CMEK
Antes de clonar uma base de dados protegida por CMEK:
- Decida se quer clonar a base de dados para a encriptação CMEK, para a encriptação predefinida da Google (não CMEK) ou para a mesma encriptação que a base de dados de origem.
Prepare a chave (versão principal) e a versão da chave que usou para encriptar a base de dados de origem. Ative a chave e a versão da chave.
gcloud
Clone uma base de dados protegida por CMEK para a encriptação CMEK
Para clonar para a encriptação CMEK, execute o comando
gcloud alpha firestore databases clone
com as flags opcionais encryption-type
e kms-key-name
para configurar o
tipo de encriptação para a base de dados clonada. Se não especificar o tipo de encriptação, a base de dados clonada usa a mesma configuração de encriptação que a base de dados de origem.
gcloud alpha firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
Substitua KMS_KEY_NAME
pelo nome que atribuiu à chave. Use o nome completo do recurso para a chave no seguinte formato:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Clone uma base de dados protegida por CMEK para a encriptação predefinida
Para clonar para a encriptação predefinida da Google (não CMEK), defina a flag encryption-type
da seguinte forma:
gcloud alpha firestore databases clone \
--encryption-type=google-default-encryption
Clone uma base de dados protegida por CMEK para o mesmo tipo de encriptação que a base de dados de origem
Para clonar para o mesmo tipo de encriptação que a base de dados de origem, defina a flag encryption-type
da seguinte forma:
gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption
Veja a chave em utilização
gcloud
Pode usar o comando da CLI gcloud databases describe para confirmar a configuração da CMEK da base de dados:
gcloud firestore databases describe \
--database=DATABASE_ID \
--project=FIRESTORE_PROJECT
Deve ver informações sobre a CMEK no campo cmekConfig
na resposta
semelhantes às seguintes:
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
A resposta inclui as seguintes informações:
kmsKeyName
: o nome completo do recurso da chave que é usado para encriptar a base de dados protegida por CMEK.activeKeyVersion
: uma lista de todas as versões de chaves em utilização pela base de dados protegida por CMEK. Durante a alteração de chave, pode ter várias versões de chaves ativas. A versão da chave antiga e a versão da chave nova têm de estar disponíveis durante a alteração da chave. Não desative a versão antiga da chave até que deixe de aparecer no campoactiveKeyVersion
.
API REST
Pedido HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
No corpo do pedido, configure a CMEK no campo cmek_config.kms_key_name
.
Definido como o ID de recurso completo de uma chave do Cloud KMS. Só é permitida uma chave na mesma localização que esta base de dados.
Este valor deve ser o ID do recurso da chave do Cloud KMS no formato de
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
.
Para mais detalhes sobre outros campos, consulte a
página database create
.
Exemplo de pedido:
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"
Exemplo de resposta:
{
"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"
]
},
...
}
Desative uma chave
Para desativar uma chave associada a uma base de dados, conclua o seguinte:
- Veja as versões principais em utilização para uma base de dados
- Desative essas versões das chaves
- Aguarde que a alteração entre em vigor e verifique se os dados já não estão acessíveis. Normalmente, a aplicação das alterações demora alguns minutos, mas pode demorar até 3 horas.
Quando uma chave usada por uma base de dados é desativada, espera receber uma exceção INVALID_ARGUMENT
com detalhes adicionais na mensagem de erro, por exemplo:
{
"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."
}
]
}
}
Ative uma chave
Para reativar uma chave associada a uma base de dados, conclua o seguinte:
- Veja as versões principais em utilização para uma base de dados
- Ative essas versões principais
- Aguarde que a alteração entre em vigor e verifique se os dados já não estão acessíveis. Normalmente, a aplicação das alterações demora alguns minutos, mas pode demorar até 3 horas.
Veja os registos de auditoria de uma chave do Cloud KMS
Antes de ativar os registos de auditoria de acesso aos dados do Cloud KMS, deve estar familiarizado com os registos de auditoria do Google Cloud.
Os registos de auditoria de acesso aos dados do Cloud KMS mostram quando o Firestore com compatibilidade com o MongoDB ou quaisquer outros produtos configurados para usar a sua chave CMEK fazem chamadas de encriptação ou desencriptação para o Cloud KMS. O Firestore com compatibilidade com o MongoDB não emite uma chamada de encriptação ou desencriptação em cada pedido de dados, mas mantém um verificador que verifica a chave periodicamente. Os resultados da sondagem são apresentados nos registos de auditoria.
Pode configurar e interagir com os registos de auditoria na Google Cloud consola:
Certifique-se de que o registo está ativado para a API Cloud KMS no seu projeto.
Aceda ao Cloud Logging na Google Cloud consola.
Limite as entradas do registo à sua chave do Cloud KMS adicionando as seguintes linhas ao criador 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
Substitua o seguinte:
KMS_KEY
com o nome da chave CMEKKMS_KEYRING
com o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
com a localização da chave e do conjunto de chaves
O registo mostra algumas entradas de registo a cada cinco minutos por base de dados. As entradas do registo são semelhantes a estes exemplos:
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"
Consulte o artigo Compreender os registos de auditoria para ver detalhes sobre a interpretação dos registos de auditoria.
Configure uma política da organização de CMEK
Para especificar os requisitos de conformidade da encriptação para bases de dados do Firestore com compatibilidade com o MongoDB na sua organização, use uma restrição da política da organização de CMEK.
Exija proteção CMEK
Configure o constraints/gcp.restrictNonCmekServices
para exigir a CMEK para a criação da base de dados do Firestore com compatibilidade com o MongoDB. Defina a restrição como deny
e adicione firestore.googleapis.com
à lista de negações, por exemplo:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Substitua FIRESTORE_PROJECT
pelo projeto a restringir.
Para saber como configurar políticas da organização, consulte o artigo Criar e editar políticas.
Após a entrada em vigor da política, recebe uma exceção FAILED_PRECONDITION
e uma mensagem de erro se tentar criar uma base de dados não CMEK no projeto afetado. Por exemplo, uma exceção tem o seguinte aspeto:
{
"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."
}
]
Limite a utilização de chaves para CMEK
Para limitar as chaves do Cloud KMS usadas para a proteção CMEK,
configure a restrição constraints/gcp.restrictCmekCryptoKeyProjects
.
Como restrição de lista, os valores aceites são indicadores da hierarquia de recursos (por exemplo, projects/PROJECT_ID
, under:folders/FOLDER_ID
e under:organizations/ORGANIZATION_ID
). Use esta restrição configurando uma lista de indicadores da hierarquia de recursos e definindo a restrição como Permitir.
Esta configuração restringe os serviços suportados para que as chaves CMEK só possam ser escolhidas
a partir dos projetos, das pastas e das organizações indicados. Os pedidos de criação de recursos protegidos por CMEK em serviços configurados não são bem-sucedidos sem uma chave de compatibilidade do Firestore com o MongoDB de um dos recursos permitidos.
O exemplo seguinte permite apenas chaves do ALLOWED_KEY_PROJECT_ID para bases de dados protegidas por CMEK no projeto especificado:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>
Depois de a política entrar em vigor, recebe uma exceção FAILED_PRECONDITION
e uma mensagem de erro se violar a restrição. Uma exceção tem o seguinte aspeto:
{
"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."
}
]
}
]
}
}