Esta página descreve como realizar tarefas relacionadas a chaves de criptografia gerenciadas pelo cliente (CMEK) para o Firestore no modo Datastore. 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 no modo Datastore protegido por CMEK, conclua as seguintes etapas:
- Solicitar acesso ao recurso CMEK do modo Datastore.
- Crie (ou recupere) um agente de serviço do modo Datastore.
- Crie uma chave CMEK.
- Defina as configurações do IAM para essa chave.
Conclua estas etapas para cada projeto que vai conter bancos de dados do Firestore protegidos pelo 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 no modo Datastore, solicite acesso ao recurso CMEK preenchendo este formulário.
Criar um agente de serviço no modo Datastore
Antes de criar uma chave CMEK, é necessário ter um agente de serviço do modo do Datastore, que é um tipo de conta de serviço gerenciado pelo Google que o modo do Datastore usa para acessar a chave.
Execute o comando services identity create para criar o agente de serviço que o modo Datastore 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 no modo Datastore.
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 modo Datastore 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 emus-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 multirregionalnam5
do modo Datastore. - Use o local multirregional
europe
do Cloud KMS para o local multirregionaleur3
do modo Datastore.
- Use o local multirregional
No projeto do Google Cloud em que você quer gerenciar as chaves, faça o seguinte:
Crie um keyring e uma chave usando uma das seguintes opções:
- Crie o keyring e a chave diretamente no Cloud KMS.
- Use uma chave gerenciada externamente. Crie a chave externa e depois crie uma chave do Cloud EKM para disponibilizá-la por meio do Cloud KMS.
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.
No console do Google Cloud, abra a página IAM.
Clique em Adicionar.
Insira o ID com formato de e-mail para o agente de serviço do modo do Datastore.
Selecione o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS.
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 que você atribuiu à chaveKMS_KEYRING
com o keyring do KMS que contém a chaveKMS_LOCATION
pela região que contém o keyringSERVICE_AGENT_EMAIL
com o identificador formatado pelo e-mail do agente de serviço a que você está concedendo acessoKMS_PROJECT
com o projeto que contém a chave
O terminal vai mostrar uma resposta semelhante a esta:
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 que as chaves CMEK forem criadas e configuradas, será possível criar um banco de dados protegido por CMEK. Os bancos de dados do modo Datastore 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 ativado pelo CMEK.
Console
No Console do Google Cloud, acesse a página Bancos de Dados.
Clique em Criar banco de dados.
Selecione o modo do banco de dados. Clique em Continuar.
Na página Configurar seu banco de dados, insira um ID do banco de dados.
Selecione um local.
Clique em Mostrar opções de criptografia e selecione Chave do Cloud KMS.
Selecione ou insira o nome do recurso da chave CMEK que você quer usar no banco de dados.
A lista de chaves é limitada ao projeto atual do Google Cloud e ao local do banco de dados que você selecionou. Para usar uma chave de outro projeto do Google Cloud, clique em Alternar projeto ou Digitar chave manualmente.
Se for solicitado que você conceda permissão de chave à conta de serviço do modo Datastore, clique em Conceder. Para criar um banco de dados do CMEK, a conta de serviço do modo Datastore precisa receber o papel
cloudkms.cryptoKeyEncrypterDecrypter
.Selecione regras de segurança para clientes da Web e de dispositivos móveis.
Clique em Criar banco de dados.
Depois que o banco de dados for criado, você poderá verificar se ele está ativado para CMEK acessando os Detalhes do banco de dados:
- Se o banco de dados estiver protegido por CMEK, o campo Tipo de criptografia vai aparecer como Gerenciado pelo cliente, e o campo Chave de criptografia vai 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 vai aparecer como Gerenciado pelo Google.
gcloud
Antes de criar um banco de dados com CMEK ativado 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
com o local do modo Datastore para o banco de dadosDATABASE_ID
com um ID para o banco de dadosKMS_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 modo Datastore
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 do KMS. Se você não especificar o parâmetro --kms-key-name
, o modo Datastore vai criar um banco de dados sem 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 seu banco de dadosLOCATION
pelo local do banco de dadosKMS_PROJECT
com o projeto que contém a chave CMEK.KMS_LOCATION
pelo local que contém a chave e o keyring do CMEK.KMS_KEYRING_ID
com o ID do keyring da chave CMEKFIRESTORE_PROJECT
com o projeto a ser usado para o banco de dados do modo Datastore
Confirme se o banco de dados no modo Datastore está protegido com a CLI do Firebase:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
As seguintes informações do CMEK aparecem na mensagem de resposta:
- O campo Nome da chave do KMS fornece o nome completo do recurso da chave usado para criptografar o banco de dados CMEK do modo Datastore.
- O campo Versões de chave ativas mostra uma lista de todas as versões de chave usadas atualmente por esse banco de dados da 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 recurso google_firestore_database
. 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 modo DatastoreDATABASE_ID
com um ID para o banco de dadosFIRESTORE_DATABASE_LOCATION
com o local do modo Datastore para o banco de dadosDATABASE_TYPE
comFIRESTORE_NATIVE
para o modo nativo ouDATASTORE_MODE
para o modo Datastore.KMS_KEY_NAME
pelo nome atribuído à chave. Use o nome completo do recurso da chave no 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 a um banco de dados protegido por CMEK devem funcionar da mesma forma 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 (não 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 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 pela CMEK para a criptografia padrão
Para restaurar a criptografia padrão do Google (sem 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 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 vai 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 seu banco de dadosFIRESTORE_PROJECT
com o projeto a ser usado para o banco de dados do modo DatastoreFIRESTORE_LOCATION
pelo local do seu banco de dados do modo DatastoreBACKUP_ID
pelo ID do backupKMS_PROJECT
com o projeto que contém a chave CMEK.KMS_LOCATION
pelo local que contém a chave e o keyring do CMEK.KMS_KEYRING_ID
com o ID do keyring da chave CMEK
Confirme se o banco de dados restaurado do modo do Datastore 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 (sem 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 dadosFIRESTORE_PROJECT
com o projeto a ser usado para o banco de dados do modo DatastoreFIRESTORE_LOCATION
pelo local do seu banco de dados do modo DatastoreBACKUP_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 dadosFIRESTORE_PROJECT
com o projeto a ser usado para o banco de dados do modo DatastoreFIRESTORE_LOCATION
pelo local do seu banco de dados do modo DatastoreBACKUP_ID
pelo ID do backup
Ver a chave em uso
gcloud
Use o comando databases describe da CLI gcloud para confirmar a configuração do 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 campoactiveKeyVersion
.
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. 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 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:
- Conferir as versões de chave em uso em um banco de dados
- Desativar essas versões de chave
- 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 é desativada, é possível receber uma
exceção FAILED_PRECONDITION
com mais detalhes 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:
- Conferir as versões de chave em uso em um banco de dados
- Ativar essas versões de chave
- 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 modo Datastore ou qualquer outro produto configurado para usar a chave CMEK faz chamadas de criptografia/descriptografia para o Cloud KMS. O modo Datastore 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:
Verifique se a geração de registros está ativada para a API Cloud KMS no seu projeto.
Acesse o Cloud Logging no Console do Google Cloud.
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 CMEKKMS_KEYRING
com o keyring do KMS que contém a chaveKMS_LOCATION
com a localização 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
Para especificar os requisitos de conformidade de criptografia para bancos de dados do modo Datastore na sua organização, use uma restrição da política da organização de CMEK.
Exigir proteção de CMEK
Configure constraints/gcp.restrictNonCmekServices
para exigir CMEK na
criação de bancos de dados do modo Datastore. 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 a 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ê vai 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 tem esta aparência:
{ "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 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 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 de modo do Datastore 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ê vai 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." } ] } ] } }