Usar chaves de criptografia gerenciadas pelo cliente (CMEK)

Nesta página, você verá como realizar tarefas relacionadas a chaves de criptografia gerenciadas pelo cliente (CMEK) para o Cloud Firestore com compatibilidade com o MongoDB. Para obter mais informações sobre CMEK em geral, como quando e por que ativar, consulte a documentação do Cloud KMS.

Preparar suas chaves CMEK

Antes de criar um banco de dados do Cloud Firestore com compatibilidade com o MongoDB protegido por CMEK, conclua as etapas a seguir:

  1. Solicite acesso ao recurso CMEK do Cloud Firestore com compatibilidade com o MongoDB.
  2. Crie (ou recupere) um agente de serviço do Cloud Firestore com compatibilidade com o MongoDB.
  3. Crie uma chave CMEK.
  4. Defina as configurações do IAM para essa chave.

Conclua estas etapas para cada projeto que vai conter bancos de dados do Cloud Firestore com compatibilidade com o MongoDB protegidos por CMEK. Se você criar uma nova chave CMEK mais tarde, será necessário definir as configurações do IAM para essa chave.

Solicitar acesso

Antes de criar um agente de serviço do Cloud Firestore com compatibilidade com o MongoDB, solicite acesso ao recurso CMEK preenchendo o formulário de solicitação de acesso.

Criar um agente de serviço do Cloud Firestore com compatibilidade com o MongoDB

Antes de criar uma chave CMEK, é necessário ter um agente de serviço do Cloud Firestore com compatibilidade com o MongoDB, que é um tipo de conta de serviço gerenciada pelo Google que o Cloud Firestore com compatibilidade com o MongoDB usa para acessar a chave.

Execute o comando services identity create para criar o agente de serviço que o Cloud Firestore com compatibilidade com o MongoDB usa para acessar a chave CMEK em seu nome. Esse comando cria a conta de serviço, se ela ainda não existir, e depois a exibe.

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

Substitua FIRESTORE_PROJECT pelo projeto que você planeja usar para seus bancos de dados do Cloud Firestore com compatibilidade com o MongoDB.

O comando exibe o código do agente de serviço, que está formatado como um endereço de e-mail. Registre a string de e-mail de saída, porque você a usará em uma etapa posterior.

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

Crie uma chave

É possível usar uma chave criada diretamente no Cloud KMS ou uma chave gerenciada externamente que você disponibiliza com o Cloud External Key Manager.

O local da chave do Cloud KMS precisa ser o mesmo que o local do banco de dados do Cloud Firestore com compatibilidade com MongoDB com que será usado.

  • Para locais de banco de dados regionais, use o mesmo nome de local para keyring, chave e banco de dados, porque os nomes de local têm um mapeamento um para um.

    Por exemplo, se você quiser criar um banco de dados protegido por CMEK em us-west1, crie um keyring e uma chave em us-west1.

  • Para locais de banco de dados multirregionais, use o nome do local multirregional do KMS:

    • Use o local multirregional us do Cloud KMS para o local multirregional do Cloud Firestore com compatibilidade com o MongoDB nam5.

    • Use o local multirregional europe do Cloud KMS para o local multirregional do Cloud Firestore com compatibilidade com o MongoDB eur3.

No projeto do Google Cloud em que você quer gerenciar as chaves, faça isto:

  1. Ative a API Cloud KMS.

  2. Crie um keyring e uma chave usando uma das seguintes opções:

Como definir as configurações do IAM da chave

Console

Para conceder um papel do Cloud KMS ao seu agente de serviço, faça o seguinte. Também é possível conceder permissão no nível da chave ou do keyring para a granularidade mais baixa.

  1. No console do Google Cloud, abra a página IAM.

    Acessar a página IAM

  2. Clique em Adicionar.

  3. Insira o ID com formato de e-mail para o agente de serviço do Cloud Firestore com compatibilidade com o MongoDB.

  4. Selecione o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS.

  5. Clique em Salvar.

gcloud

Conceda o papel cloudkms.cryptoKeyEncrypterDecrypter ao seu agente de 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:

  • KMS_KEY pelo nome que você atribuiu à chave
  • KMS_KEYRING pelo keyring do KMS que contém a chave
  • KMS_LOCATION pela região que contém o keyring
  • SERVICE_AGENT_EMAIL pelo identificador com formato de e-mail do agente de serviço a que você concederá acesso
  • KMS_PROJECT pelo projeto que contém a chave

O terminal exibirá uma resposta semelhante a esta:

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

Criar um banco de dados com CMEK ativado

Depois que as chaves CMEK forem criadas e configuradas, será possível criar um banco de dados protegido por CMEK. Os bancos de dados do Cloud Firestore com compatibilidade com o MongoDB que estão protegidos pela criptografia padrão do Google não podem ser convertidos para usar CMEK.

Só é possível escolher um tipo de criptografia e uma chave ao criar um banco de dados com CMEK ativado.

Console

  1. No Console do Google Cloud, acesse a página Bancos de Dados.

    Acesse a página "Bancos de dados"

  2. Clique em Criar um banco de dados do Firestore.

  3. Insira um ID do banco de dados.

  4. Selecione a edição Enterprise.

  5. Selecione um local para seu banco de dados.

  6. Clique em Mostrar opções de criptografia e selecione Chave do Cloud KMS.

  7. Selecione ou insira o nome do recurso para a chave CMEK que você quer usar para o banco de dados.

  8. A lista de chaves é limitada ao projeto do Google Cloud atual e ao local do banco de dados selecionado. Para usar uma chave de outro projeto do Google Cloud, clique em Alternar projeto ou Inserir chave manualmente.

  9. Se for necessário conceder permissão de chave à conta de serviço do Cloud Firestore com compatibilidade com MongoDB, clique em Conceder. Para criar um banco de dados com CMEK, a conta de serviço do Cloud Firestore com compatibilidade com o MongoDB precisa receber a função cloudkms.cryptoKeyEncrypterDecrypter.

  10. Selecione regras de segurança para clientes da Web e de dispositivo móvel.

  11. Clique em Criar banco de dados.

Depois que o banco de dados for criado, é possível verificar se ele está com CMEK ativado acessando os Detalhes do banco de dados:

  • Se o banco de dados estiver protegido por CMEK, o campo Tipo de criptografia exibirá Gerenciado pelo cliente, e o campo Chave de criptografia listará o Cloud KMS correspondente e a versão da chave usada para proteger esse banco de dados.
  • Se o banco de dados não estiver protegido por CMEK, o campo Tipo de criptografia exibirá Gerenciado pelo Google.

gcloud

Antes de criar um banco de dados com CMEK ativado pela Google Cloud CLI, instale a versão mais recente e autorize a gcloud CLI. Para mais informações, consulte Instalar o gcloud CLI.

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

Substitua:

  • FIRESTORE_DATABASE_LOCATION pelo local do referente ao banco de dados
  • DATABASE_ID por um ID do banco de dados
  • KMS_KEY_NAME pelo nome atribuído à 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 pelo projeto a ser usado para o banco de dados do Cloud Firestore com compatibilidade com o MongoDB

Acessar um banco de dados protegido por CMEK

Todas as operações de leitura, gravação e consulta enviadas a um banco de dados protegido por CMEK devem funcionar do mesmo modo que um banco de dados criptografado padrão do Google. Por exemplo, não é necessário fornecer uma chave para cada solicitação.

Restaurar um banco de dados protegido por CMEK

Antes de restaurar o banco de dados protegido por CMEK de um backup:

  • Decida se você quer restaurar o banco de dados para a criptografia CMEK, para a criptografia padrão do Google (sem CMEK) ou para a mesma criptografia do backup.
  • Prepare a chave (versão principal) e a versão de chave usada para criptografar o backup. Ative a chave e a versão da chave.

gcloud

Restaurar um banco de dados protegido por CMEK para a criptografia CMEK

Para restaurar a criptografia CMEK, execute o comando gcloud firestore databases restore com as flags opcionais encryption-type e kms-key-name para configurar o tipo de criptografia do banco de dados restaurado. Se você não especificar o tipo de criptografia, o banco de dados restaurado usará a mesma configuração de criptografia do backup.

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

Substitua KMS_KEY_NAME pelo nome que você 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

Restaurar um banco de dados protegido por CMEK para a criptografia padrão

Para restaurar a criptografia padrão do Google (sem CMEK), defina a sinalização encryption-type da seguinte maneira:

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

Restaurar um banco de dados protegido por CMEK para o mesmo tipo de criptografia do backup

Para restaurar o mesmo tipo de criptografia do backup, defina a sinalização encryption-type da seguinte maneira:

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

CLI do Firebase

Restaurar um banco de dados protegido por CMEK para a criptografia CMEK

Para restaurar a criptografia CMEK, use a flag opcional encryption-type e kms-key-name. Se você não especificar o tipo de criptografia, o banco de dados restaurado usará a mesma configuração de criptografia do backup.

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:

  • DATABASE_ID pelo ID do banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado para o banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com o local do seu banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • BACKUP_ID pelo ID do backup
  • KMS_PROJECT pelo projeto que contém a chave CMEK
  • KMS_LOCATION pelo local que contém a chave e o keyring CMEK
  • KMS_KEYRING_ID pelo ID do keyring CMEK

Confirme se o banco de dados restaurado do Cloud Firestore com compatibilidade com o MongoDB está criptografado com CMEK:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

Restaurar um banco de dados protegido por CMEK para a criptografia padrão

Para restaurar a criptografia padrão do Google (sem CMEK), defina a sinalização encryption-type da seguinte maneira:

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:

  • DATABASE_ID pelo ID do banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado para o banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com o local do seu banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • BACKUP_ID pelo ID do backup

Restaurar um banco de dados protegido por CMEK para o mesmo tipo de criptografia do backup

Para restaurar o mesmo tipo de criptografia do backup, defina a sinalização encryption-type da seguinte maneira:

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

Substitua:

  • DATABASE_ID pelo ID do banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado para o banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com o local do seu banco de dados do Cloud Firestore com compatibilidade com o MongoDB
  • BACKUP_ID pelo ID do backup

Clonar um banco de dados protegido por CMEK

Antes de clonar um banco de dados protegido por CMEK:

  • Decida se você quer clonar o banco de dados para a criptografia CMEK, para a criptografia padrão do Google (sem CMEK) ou para a mesma criptografia do banco de dados de origem.
  • Prepare a chave (versão principal) e a versão de chave usada para criptografar o banco de dados de origem. Ative a chave e a versão da chave.

gcloud

Clonar um banco de dados protegido por CMEK para a criptografia CMEK

Para clonar para a criptografia CMEK, execute o comando gcloud alpha firestore databases clone com as flags opcionais encryption-type e kms-key-name para configurar o tipo de criptografia do banco de dados clonado. Se você não especificar o tipo de criptografia, o banco de dados clonado usará a mesma configuração de criptografia do banco 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 você 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

Clonar um banco de dados protegido por CMEK para a criptografia padrão

Para clonar a criptografia padrão do Google (sem CMEK), defina a flag encryption-type da seguinte maneira:

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

Clonar um banco de dados protegido por CMEK para o mesmo tipo de criptografia do banco de dados de origem

Para clonar o mesmo tipo de criptografia do banco de dados de origem, defina a flag encryption-type da seguinte maneira:

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

Ver a chave em uso

gcloud

Use o comando databases describe do gcloud CLI para confirmar a configuração de CMEK do banco de dados:

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

As informações de CMEK são exibidas no campo cmekConfig na resposta semelhante a esta:

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 usada para criptografar seu banco de dados protegido por CMEK.
  • activeKeyVersion: uma lista de todas as versões de chaves em uso pelo banco de dados protegido por CMEK. Durante a rotação de chaves, é possível ter várias versões de chaves ativas. A versão antiga e a nova precisam estar disponíveis durante a rotação de chaves. Não desative a versão antiga da chave enquanto estiver exibida no campo activeKeyVersion.

API REST

Solicitação HTTP:

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

No corpo da solicitação, configure o CMEK no campo cmek_config.kms_key_name. Defina como o ID completo do recurso de uma chave do Cloud KMS. É permitida apenas uma chave no mesmo local desse banco de dados.

Esse valor precisa ser o ID do recurso da chave do Cloud KMS no formato 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 solicitação:

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

Desativar uma chave

Para desativar uma chave associada a um banco de dados, faça isto:

  1. Consulte as versões de chaves em uso para um banco de dados
  2. Desative essas versões de chave
  3. Aguarde a mudança entrar em vigor e verifique se os dados não estão mais acessíveis. Geralmente, as mudanças entram em vigor após alguns minutos, mas o processo pode levar até 3 horas.

Quando uma chave usada por um banco de dados é desativada, talvez você receba uma exceção INVALID_ARGUMENT com mais detalhes 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."
      }
    ]
  }
}

Ativar uma chave

Para reativar uma chave associada a um banco de dados, faça isto:

  1. Consulte as versões de chaves em uso para um banco de dados
  2. Ative essas versões de chave
  3. Aguarde a mudança entrar em vigor e verifique se os dados não estão mais acessíveis. Geralmente, as mudanças entram em vigor após alguns minutos, mas o processo pode levar até 3 horas.

Visualizar registros de auditoria para chave do Cloud KMS

Antes de ativar os registros de auditoria de acesso a dados do Cloud KMS, familiarize-se com os registros de auditoria do Cloud.

Os registros de auditoria de acesso a dados do Cloud KMS mostram quando o Cloud Firestore com compatibilidade com MongoDB ou qualquer outro produto configurado para usar a chave CMEK faz chamadas de criptografia ou descriptografia para o Cloud KMS. O Cloud Firestore com compatibilidade com o MongoDB não emite uma chamada de criptografia ou descriptografia em todas as solicitações de dados, mas mantém um aplicativo de pesquisa que verifica a chave periodicamente. Os resultados da pesquisa aparecem nos registros de auditoria.

É possível configurar e interagir com os registros de auditoria no Console do Google Cloud:

  1. Verifique se a geração de registros está ativada para a API Cloud KMS no seu projeto.

  2. Acesse o Cloud Logging no console do Google Cloud.

    Acessar Cloud Logging

  3. Limite as entradas de registro na 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:

    • KMS_KEY pelo nome da chave CMEK
    • KMS_KEYRING pelo keyring do KMS que contém a chave
    • KMS_LOCATION pelo local da chave e do keyring

    O registro mostra algumas entradas de registro a cada cinco minutos para todo banco de dados. As entradas de registro serã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.
    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."
    

Consulte Noções básicas sobre registros de auditoria para detalhes sobre como interpretar registros de auditoria.

Configurar uma política de CMEK da organização

Para especificar os requisitos de conformidade de criptografia para bancos de dados do Cloud Firestore com compatibilidade com MongoDB na sua organização, use uma restrição da política da organização CMEK.

Exigir proteção de CMEK

Configure constraints/gcp.restrictNonCmekServices para exigir CMEK para a criação do banco de dados do Cloud Firestore com compatibilidade com o MongoDB. Defina a restrição como deny e adicione firestore.googleapis.com à lista de proibições, por exemplo:

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

Substitua FIRESTORE_PROJECT pelo projeto que será restrito.

Para saber mais sobre como configurar políticas da organização, consulte Criar e editar políticas.

Depois que a política entrar em vigor, você receberá uma exceção FAILED_PRECONDITION e uma mensagem de erro se tentar criar um banco de dados sem CMEK no projeto afetado. Por exemplo, uma exceção tem o seguinte aspecto:

{
  "error": {
    "code": 400,
    "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/gcp.restrictNonCmekServices",
            "subject": "orgpolicy:projects/FIRESTORE_PROJECT",
            "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
          }
        ]

Limitar o uso de chaves para CMEK

Para limitar quais chaves do Cloud KMS são usadas para proteção por CMEK, configure a restrição constraints/gcp.restrictCmekCryptoKeyProjects.

Como uma restrição de lista, os valores aceitos são indicadores de hierarquia de recursos (por exemplo, projects/PROJECT_ID, under:folders/FOLDER_ID e under:organizations/ORGANIZATION_ID). Use essa restrição configurando uma lista de indicadores de hierarquia de recursos e definindo a restrição como Permitir. Essa configuração restringe os serviços compatíveis para que as chaves CMEK possam ser selecionadas apenas pela lista de projetos, pastas e organizações. As solicitações para criar recursos protegidos por CMEK em serviços configurados não funcionam sem uma chave do Cloud Firestore com compatibilidade com o MongoDB de um dos recursos permitidos.

O exemplo a seguir permite apenas chaves do ALLOWED_KEY_PROJECT_ID para bancos de dados protegidos 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 que a política entrar em vigor, você receberá uma exceção FAILED_PRECONDITION e uma mensagem de erro se violar a restrição. Uma exceção é semelhante a esta:

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

A seguir