Usar chaves de criptografia gerenciadas pelo cliente (CMEK)

Esta página descreve como executar tarefas relacionadas à chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para o Firestore. 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 Firestore protegido por CMEK, conclua as etapas a seguir:

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

Conclua estas etapas para cada projeto que terá proteção de CMEK bancos de dados do Firestore. 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 Firestore, solicite acesso ao recurso CMEK preenchendo este formulário.

Criar um agente de serviço do Firestore

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

Execute o comando services identity create para criar o agente de serviço que o Firestore 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. para usar nos bancos de dados do Firestore.

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.iam.gserviceaccount.com

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 Firestore com que será usado.

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

    Por exemplo, se você quiser criar um banco de dados protegido pelo CMEK no 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 nam5 do Firestore.
    • Use o local multirregional europe do Cloud KMS para o local multirregional eur3 do Firestore.

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

  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 formatado por e-mail do Firestore agente de serviço.

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

  5. Clique em Save.

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 atribuído à 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 formatado em e-mail do agente de serviço a que você está concedendo acesso
  • KMS_PROJECT pelo projeto que contém a chave.

O terminal vai exibir 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

Criar um banco de dados ativado para CMEK

Depois de criar e configurar as chaves CMEK, é possível criar uma instância no seu banco de dados. Bancos de dados atuais do Firestore protegidos por Não é possível converter a criptografia padrão do Google para usar a CMEK.

Só é possível escolher um tipo de criptografia e uma chave ao criar uma instância ativada para CMEK no seu banco de dados.

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 banco de dados.

  3. Selecione o modo de banco de dados. Clique em Continuar.

  4. Na página Configurar seu banco de dados, insira um ID do banco de dados.

  5. Selecione um local.

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

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

  8. A lista de chaves é limitada ao projeto atual do Google Cloud 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 solicitado que você conceda permissão de chave à conta de serviço do Firestore, clique em Conceder. Para criar um banco de dados CMEK, sua conta de serviço do Firestore precisa receber o papel cloudkms.cryptoKeyEncrypterDecrypter.

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

  11. Clique em Criar banco de dados.

Após a criação do banco de dados, é possível verificar se ele foi ativado para CMEK acessando Detalhes do banco de dados:

  • Caso seu banco de dados seja protegido por CMEK, o campo Tipo de criptografia será exibido como Gerenciada 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 pela CMEK, o campo Tipo de criptografia vai aparecer como Gerenciada pelo Google.

gcloud

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

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

Substitua:

  • FIRESTORE_DATABASE_LOCATION pelo local do Firestore para o banco de dados
  • DATABASE_ID por um ID para o 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 com o projeto a ser usado para o banco de dados do Firestore.

API REST

Solicitação HTTP:

POST https://firestore.googleapis.com/v1/projects/{FIRESOTRE_PROJECT}/databases

No corpo da solicitação, configure o CMEK no campo cmek_config.kms_key_name.

Defina como o ID de recurso completo de uma chave do Cloud KMS. Somente uma chave no mesmo local que este banco de dados é permitida.

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 -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"
  }
}'

CLI do Firebase

Para criar um banco de dados ativado para CMEK, use o campo Nome da chave KMS. Se você não especificar o parâmetro --kms-key-name, o Firestore criará um banco de dados não CMEK por padrão.

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

Substitua:

  • DATABASE_ID pelo ID do banco de dados
  • LOCATION pelo local do banco de dados
  • KMS_PROJECT com o projeto que contém a chave CMEK.
  • KMS_LOCATION pelo local que contém a chave CMEK e o keyring
  • KMS_KEYRING_ID com o ID do keyring da chave CMEK
  • FIRESTORE_PROJECT pelo projeto a ser usado na Banco de dados do Firestore

Confirme se o banco de dados do Firestore está protegido com a CLI do Firebase:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

As seguintes informações da CMEK aparecem na mensagem de resposta:

  • O campo Nome da chave KMS fornece o nome completo do recurso da chave usado para criptografar seu banco de dados CMEK do Firestore.
  • O campo Versões de chaves ativas apresenta uma lista de todas as versões de chave usadas atualmente por esse banco de dados de CMEK. Durante a rotação de chaves, é possível ter várias versões de chaves ativas.

Terraform

Para criar um banco de dados ativado para CMEK, use o google_firestore_database recurso. Para mais informações e exemplos, consulte 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"
  }

}

Substitua:

  • FIRESTORE_PROJECT com o projeto a ser usado para o banco de dados do Firestore.
  • DATABASE_ID com um ID para o banco de dados
  • FIRESTORE_DATABASE_LOCATION pelo local do Firestore para o banco de dados
  • DATABASE_TYPE com FIRESTORE_NATIVE para o modo nativo ou DATASTORE_MODE para o modo Datastore.
  • 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

Acessar um banco de dados protegido por CMEK

Todas as operações de leitura, gravação e consulta enviadas para um banco de dados protegido pela CMEK deve funcionar da mesma forma que um banco de dados criptografado padrão do Google. Por exemplo, não é preciso fornecer uma chave para cada solicitação.

Restaurar um banco de dados protegido por CMEK

Antes de restaurar um banco de dados protegido pelo CMEK de um backup:

  • Decida se você quer restaurar o banco de dados para a criptografia CMEK, para a criptografia padrão do Google (não CMEK) ou para a mesma criptografia do backup.
  • Prepare a chave (versão primária) e a versão da chave que você usou para criptografar o backup. Ative a chave e a versão dela.

gcloud

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

Para restaurar para criptografia CMEK, execute os bancos de dados do gcloud Firestore restaure o comando com as sinalizações opcionais encryption-type e kms-key-name para configurar tipo de criptografia do banco de dados restaurado. Se você não especificar o tipo de criptografia, o banco de dados restaurado vai 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 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

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

Para restaurar a criptografia padrão do Google (não CMEK), defina a flag 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 flag 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 criptografia da CMEK

Para restaurar para a criptografia CMEK, use as sinalizações opcionais encryption-type e kms-key-name. Se você não especificar o tipo de criptografia, o banco de dados restaurado usará o 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 seu banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado na Banco de dados do Firestore
  • FIRESTORE_LOCATION pelo local do Banco de dados do Firestore
  • 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 CMEK e o keyring
  • KMS_KEYRING_ID com o ID do keyring da chave CMEK

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

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

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

Para restaurar a criptografia padrão do Google (não CMEK), defina a flag 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 seu banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado na Banco de dados do Firestore
  • FIRESTORE_LOCATION pelo local do Banco de dados do Firestore
  • 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 flag encryption-type da seguinte maneira:

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

Substitua:

  • DATABASE_ID pelo ID do seu banco de dados
  • FIRESTORE_PROJECT pelo projeto a ser usado na Banco de dados do Firestore
  • FIRESTORE_LOCATION pelo local do Banco de dados do Firestore
  • BACKUP_ID pelo ID do backup

Ver a chave em uso

gcloud

Você pode usar o databases describe CLI gcloud para confirmar a configuração da CMEK do banco de dados:

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

As informações do CMEK vão aparecer 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 chave 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 até que ela não apareça mais 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 de recurso completo de uma chave do Cloud KMS. Apenas uma chave no mesmo porque esse banco de dados é permitido.

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 e resposta:

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

Desativar uma chave

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

  1. Conferir as versões da chave em uso em um banco de dados
  2. Desativar essas versões da chave
  3. Aguarde a mudança entrar em vigor e verifique se os dados não estão mais acessíveis. Geralmente as alterações entram em vigor em alguns minutos, mas podem levar até três horas.

Quando uma chave usada por um banco de dados for desativada, espere receber uma Exceção FAILED_PRECONDITION com detalhes adicionais na mensagem de erro, Por exemplo:

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

Ativar uma chave

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

  1. Conferir as versões de chave em uso em um banco de dados
  2. Ativar 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 alterações entram em vigor em alguns minutos, mas podem levar até três 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 Firestore ou qualquer outro produto configurado para usar sua A chave CMEK faz chamadas de criptografia/descriptografia para o Cloud KMS. O Firestore não emite uma chamada de criptografia/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.

    Acesse o 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 com o 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 por 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.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 Noções básicas sobre registros de auditoria para detalhes sobre como interpretar registros de auditoria.

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

Especificar requisitos de conformidade de criptografia para o Firestore bancos de dados na sua organização, use uma restrição de política da organização de CMEK.

Exigir proteção de CMEK

Configurar constraints/gcp.restrictNonCmekServices para exigir a CMEK para Criação do banco de dados do Firestore. Defina a restrição como deny e adicione firestore.googleapis.com à lista de bloqueio, por exemplo:

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

Substitua FIRESTORE_PROJECT pelo projeto a ser restrito.

Para saber mais sobre como configurar as políticas da organização, consulte Como 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 que não seja CMEK no projeto afetado. Por exemplo, uma exceção é semelhante a esta:

{
  "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 de CMEKs, 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 com suporte para que as chaves CMEK possam ser escolhidas apenas nos projetos, pastas e organizações listados. As solicitações para criar recursos protegidos por CMEK em serviços configurados não são bem-sucedidas sem uma chave do Firestore 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/ALLOWED_KEY_PROJECT_ID \
--project=FIRESTORE_PROJECT

Depois que a política entrar em vigor, você receberá uma exceção FAILED_PRECONDITION. e uma mensagem de erro se você 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