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:

  1. Peça acesso à funcionalidade CMEK do Firestore com compatibilidade com o MongoDB.
  2. Crie (ou obtenha) um agente do serviço de compatibilidade do Firestore com o MongoDB.
  3. Crie uma chave CMEK.
  4. 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 em us-west1.

  • Para localizações de bases de dados multirregionais, use o nome da localização da localização multirregional do KMS:

    • Use a uslocalização multirregionalnam5 do Cloud KMS para a localização multirregional do Firestore com compatibilidade com o MongoDB.

    • Use a europelocalizaçã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:

  1. Ative a API Cloud KMS.

  2. Crie um conjunto de chaves e uma chave através de uma das seguintes opções:

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.

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda à página IAM

  2. Clique em Adicionar.

  3. Introduza o ID no formato de email do agente do serviço Firestore com compatibilidade com o MongoDB.

  4. Selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.

  5. 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 à chave
  • KMS_KEYRING com o conjunto de chaves do KMS que contém a chave
  • KMS_LOCATION com a região que contém o conjunto de chaves
  • SERVICE_AGENT_EMAIL com o identificador formatado como email para o agente de serviço ao qual está a conceder acesso
  • KMS_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

  1. Na Google Cloud consola, aceda à página Bases de dados.

    Aceda à página Bases de dados

  2. Clique em Criar uma base de dados do Firestore.

  3. Introduza um ID da base de dados.

  4. Selecione a edição Enterprise.

  5. Selecione uma localização para a base de dados.

  6. Clique em Mostrar opções de encriptação e, de seguida, selecione Chave do Cloud KMS.

  7. Selecione ou introduza o nome do recurso da chave CMEK que quer usar para a base de dados.

  8. 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.

  9. 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.

  10. Selecione regras de segurança para clientes Web e para dispositivos móveis.

  11. 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 dados
  • DATABASE_ID com um ID para a base de dados
  • KMS_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 dados
  • FIRESTORE_PROJECT com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com a localização da sua base de dados do Firestore com compatibilidade com o MongoDB
  • BACKUP_ID com o ID da sua cópia de segurança
  • KMS_PROJECT com o projeto que contém a sua chave CMEK
  • KMS_LOCATION com a localização que contém a chave CMEK e o conjunto de chaves
  • KMS_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 dados
  • FIRESTORE_PROJECT com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com a localização da sua base de dados do Firestore com compatibilidade com o MongoDB
  • BACKUP_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 dados
  • FIRESTORE_PROJECT com o projeto a usar para a sua base de dados Firestore com compatibilidade com o MongoDB
  • FIRESTORE_LOCATION com a localização da sua base de dados do Firestore com compatibilidade com o MongoDB
  • BACKUP_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 campo activeKeyVersion.

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:

  1. Veja as versões principais em utilização para uma base de dados
  2. Desative essas versões das chaves
  3. 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:

  1. Veja as versões principais em utilização para uma base de dados
  2. Ative essas versões principais
  3. 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:

  1. Certifique-se de que o registo está ativado para a API Cloud KMS no seu projeto.

  2. Aceda ao Cloud Logging na Google Cloud consola.

    Aceda ao Cloud Logging

  3. 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 CMEK
    • KMS_KEYRING com o conjunto de chaves do KMS que contém a chave
    • KMS_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."
          }
        ]
      }
    ]
  }
}

O que se segue?