Esta página descreve como realizar tarefas relacionadas com as chaves de encriptação geridas pelo cliente (CMEK) para o Firestore no modo Datastore. Para mais informações sobre a CMEK em geral, incluindo quando e por que motivo a ativar, consulte a documentação do Cloud KMS.
Prepare as suas chaves CMEK
Antes de poder criar uma base de dados do modo Datastore protegida por CMEK, tem de concluir os seguintes passos:
- Peça acesso à funcionalidade CMEK do modo Datastore.
- Crie (ou obtenha) um agente de serviço do modo Datastore.
- Crie uma chave CMEK.
- Configure as definições da IAM para essa chave.
Conclua estes passos para cada projeto que vai conter bases de dados do Firestore protegidas com 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 modo Datastore, peça acesso à funcionalidade CMEK preenchendo este formulário.
Crie um agente de serviço do modo Datastore
Antes de criar uma chave CMEK, tem de ter um agente de serviço do modo Datastore, que é um tipo de conta de serviço gerida pela Google que o modo Datastore usa para aceder à chave.
Execute o comando services identity create para criar o agente de serviço que o modo Datastore 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 suas bases de dados do modo Datastore.
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 modo Datastore que vai ser usada com a mesma.
Para localizações de bases de dados regionais, use o mesmo nome de localização para o anel de chaves, a chave e a base de dados, porque os nomes de localização têm um mapeamento individual.
Por exemplo, se quiser criar uma base de dados protegida por CMEK em
us-west1
, crie um anel de chaves e uma chave emus-west1
.Para localizações de bases de dados multirregionais, use o nome da localização da localização multirregional do KMS:
- Use a localização
us
multirregional do Cloud KMS para a localizaçãonam5
multirregional do modo Datastore. - Use a localização
europe
multirregional do Cloud KMS para a localizaçãoeur3
multirregional do modo Datastore.
- Use a localização
No Google Cloud projeto onde quer gerir as suas chaves, conclua o seguinte:
Crie um conjunto de chaves e uma chave através de uma das seguintes opções:
- Crie o conjunto de chaves e a chave diretamente no Cloud KMS.
- Use uma chave gerida externamente. Crie a chave externa e, em seguida, crie uma chave do Cloud EKM para disponibilizar a chave através do Cloud KMS.
Configure as definições do IAM para a chave
Consola
Para conceder uma função do Cloud KMS ao seu agente do serviço, faça o seguinte: Também pode conceder autorização ao nível da chave ou do conjunto de chaves se quiser uma granularidade inferior.
Na Google Cloud consola, aceda à página IAM.
Clique em Adicionar.
Introduza o ID formatado em email do agente de serviço do modo Datastore.
Selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.
Clique em Guardar.
gcloud
Conceda a função cloudkms.cryptoKeyEncrypterDecrypter
ao seu agente do serviço:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
Substitua o seguinte:
KMS_KEY
com o nome que atribuiu à chaveKMS_KEYRING
com o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
com a região que contém o conjunto de chavesSERVICE_AGENT_EMAIL
com o identificador formatado em email do agente de serviço ao qual está a conceder acessoKMS_PROJECT
com o projeto que contém a chave
O terminal deve apresentar uma resposta semelhante à seguinte:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
Crie uma base de dados com CMEK ativada
Depois de criar e configurar as chaves CMEK, pode criar uma base de dados protegida por CMEK. As bases de dados do modo Datastore existentes protegidas pela encriptação predefinida da Google não podem ser convertidas para usar CMEK.
Só pode escolher um tipo de encriptação e uma chave quando cria uma base de dados com a CMEK ativada.
Consola
Na Google Cloud consola, aceda à página Bases de dados.
Clique em Criar base de dados.
Selecione o modo da base de dados. Clique em Continuar.
Na página Configure a sua base de dados, introduza um ID da base de dados.
Selecione uma localização.
Clique em Mostrar opções de encriptação e, de seguida, selecione Chave do Cloud KMS.
Selecione ou introduza o nome do recurso da chave CMEK que quer usar para a base de dados.
A lista de chaves está limitada ao Google Cloud projeto atual e à localização da base de dados que selecionou. Para usar uma chave de um Google Cloud projeto diferente, clique em Mudar de projeto ou Introduzir chave manualmente.
Se lhe for pedido para conceder autorização de chave à conta de serviço do modo Datastore, clique em Conceder. Para criar uma base de dados CMEK, tem de conceder a função
cloudkms.cryptoKeyEncrypterDecrypter
à conta de serviço do modo Datastore.Selecione regras de segurança para clientes Web e para dispositivos móveis.
Clique em Criar base de dados.
Depois de criar a base de dados, pode verificar se a mesma tem a CMEK ativada, consultando os detalhes da base de dados:
- Se a sua base de dados estiver protegida por CMEK, o campo Tipo de encriptação é apresentado como Gerido pelo cliente e o campo Chave de encriptação apresenta o Cloud KMS correspondente e a versão da chave usada para proteger esta base de dados.
- Se a sua base de dados não estiver protegida por CMEK, o campo Tipo de encriptação é apresentado como Gerido pela Google.
gcloud
Antes de criar uma base de dados com CMEK através da CLI gcloud, instale a versão mais recente e autorize a CLI gcloud. Para mais informações, consulte o artigo Instale a CLI gcloud.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Substitua o seguinte:
FIRESTORE_DATABASE_LOCATION
com a localização do modo Datastore para a base de dadosDATABASE_ID
com um ID para a base de dadosKMS_KEY_NAME
com o nome que atribuiu à chave. Use o nome completo do recurso para a chave no seguinte formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo Datastore
API REST
Pedido HTTP:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
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 informações sobre outros campos, consulte a página database create
.
Exemplo de pedido:
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"
}
}'
Firebase CLI
Para criar uma base de dados com CMEK ativada, use o campo Nome da chave do KMS. Se não especificar o parâmetro --kms-key-name
, o modo Datastore cria uma base de dados não CMEK por predefiniçã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 o seguinte:
DATABASE_ID
com o ID da sua base de dadosLOCATION
com a localização da sua base de dadosKMS_PROJECT
com o projeto que contém a sua chave CMEKKMS_LOCATION
com a localização que contém a sua chave CMEK e conjunto de chavesKMS_KEYRING_ID
com o ID do seu conjunto de chaves CMEKFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo Datastore
Confirme se a base de dados do modo Datastore está protegida com a Firebase CLI:
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 do KMS indica o nome completo do recurso da chave que é usado para encriptar a base de dados CMEK do modo Datastore.
- O campo Versões de chaves ativas apresenta uma lista de todas as versões de chaves atualmente usadas por esta base de dados CMEK. Durante a rotação de chaves, pode ter várias versões de chaves ativas.
Terraform
Para criar uma base de dados com CMEK ativada, 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 o seguinte:
FIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo DatastoreDATABASE_ID
com um ID para a base de dadosFIRESTORE_DATABASE_LOCATION
com a localização do modo Datastore para a base de dadosDATABASE_TYPE
comFIRESTORE_NATIVE
para o modo nativo ouDATASTORE_MODE
para o modo Datastore.KMS_KEY_NAME
com o nome que atribuiu à chave. Use o nome completo do recurso para a chave no formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
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 (primary-version) 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 as flags 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
opcional.
Se não especificar o tipo de encriptação, a base de dados restaurada usa a mesma configuração de encriptação que a cópia de segurança.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo DatastoreFIRESTORE_LOCATION
com a localização da sua base de dados no modo DatastoreBACKUP_ID
com o ID da sua cópia de segurançaKMS_PROJECT
com o projeto que contém a sua chave CMEKKMS_LOCATION
com a localização que contém a sua chave CMEK e conjunto de chavesKMS_KEYRING_ID
com o ID do seu conjunto de chaves CMEK
Confirme que a base de dados do modo Datastore restaurada está encriptada com CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Restaure uma base de dados protegida por CMEK para a encriptação predefinida
Para restaurar a encriptação predefinida da Google (não CMEK), defina a flag encryption-type
da seguinte forma:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo DatastoreFIRESTORE_LOCATION
com a localização da sua base de dados no modo DatastoreBACKUP_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_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Substitua o seguinte:
DATABASE_ID
com o ID da sua base de dadosFIRESTORE_PROJECT
com o projeto a usar para a sua base de dados do modo DatastoreFIRESTORE_LOCATION
com a localização da sua base de dados no modo DatastoreBACKUP_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 databases describe da CLI gcloud 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 atualmente em utilização pela base de dados protegida por CMEK. Durante a rotação de chaves, 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 esta deixe de aparecer no campoactiveKeyVersion
.
API REST
Pedido HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
No corpo do pedido, configure a CMEK no campo cmek_config.kms_key_name
.
Definido como o ID de recurso completo de uma chave do Cloud KMS. Só é permitida uma chave na mesma localização que esta base de dados.
Este valor deve ser o ID do recurso da chave do Cloud KMS no formato de
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
Para mais informações sobre outros campos, consulte a
página database create
.
Exemplo de pedido 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"
]
},
……
}
Desative uma chave
Para desativar uma chave associada a uma base de dados, conclua o seguinte:
- Ver as versões das chaves em utilização para uma base de dados.
- Desative estas versões de chaves em utilização.
- Aguarde que a alteração entre em vigor e verifique se os dados já não estão acessíveis. Normalmente, as alterações entram em vigor numa fração de minutos, mas podem demorar até 3 horas.
Quando uma chave usada por uma base de dados é desativada, espera 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)" } ] } }
Ative uma chave
Para reativar uma chave associada a uma base de dados, conclua o seguinte:
- Veja as versões principais em utilização para uma base de dados
- Ative estas versões de chaves em utilização
- Aguarde que a alteração entre em vigor e verifique se os dados já não estão acessíveis. Normalmente, as alterações entram em vigor numa fração de minutos, mas podem 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 a dados do Cloud KMS mostram quando o modo Datastore ou quaisquer outros produtos configurados para usar a sua chave CMEK fazem chamadas de encriptação/desencriptação para o Cloud KMS. O modo Datastore não emite uma chamada de encriptação/desencriptação em cada pedido de dados, mas mantém um inquiridor que verifica a chave periodicamente. Os resultados da sondagem são apresentados nos registos de auditoria.
Pode configurar e interagir com os registos de auditoria na Google Cloud consola:
Certifique-se de que o registo está ativado para a API Cloud KMS no seu projeto.
Aceda ao Cloud Logging na Google Cloud consola.
Limite as entradas do registo à sua chave do Cloud KMS adicionando as seguintes linhas ao criador de consultas:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATION
Substitua o seguinte:
KMS_KEY
com o nome da chave CMEKKMS_KEYRING
com o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
com a localização da chave e do conjunto de chaves
O registo mostra algumas entradas de registo a cada cinco minutos por base de dados. As entradas do registo são semelhantes a estes exemplos:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
Consulte o artigo Compreender os registos de auditoria para ver detalhes sobre a interpretação dos registos de auditoria.
Configure uma política da organização de CMEK
Para especificar os requisitos de conformidade da encriptação para bases de dados no modo Datastore na sua organização, use uma restrição da política da organização da CMEK.
Exija proteção CMEK
Configure constraints/gcp.restrictNonCmekServices
para exigir CMEK para a criação de bases de dados no modo Datastore. 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 do modo Datastore 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/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
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." } ] } ] } }