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 Bigtable. Para mais informações sobre a CMEK em geral, incluindo quando e por que motivo a ativar, consulte a documentação do Cloud KMS.
Recomendamos que use a Google Cloud consola para todas as tarefas de gestão importantes. Se planeia usar a CLI do Google Cloud, instale a CLI gcloud para o Bigtable.
Prepare as suas chaves CMEK
Antes de poder criar um recurso do Bigtable protegido por CMEK, tem de concluir os seguintes passos para criar uma chave CMEK para cada região em que os clusters da instância vão estar:
- Crie (ou obtenha) um agente de serviço do Bigtable.
- Crie uma chave CMEK.
- Configure as definições da IAM para essa chave.
Crie um agente de serviço do Bigtable
Antes de criar uma chave CMEK, tem de ter um agente de serviço do Bigtable, que o Bigtable usa para aceder à chave.
Consola
Não pode criar um agente de serviço na Google Cloud consola. No entanto, se criar a chave na Google Cloud consola, é-lhe pedido que conceda a função encriptar/desencriptar do Cloud KMS, e o agente de serviço é criado nesse momento, se ainda não existir.
gcloud
Execute o comando gcloud services identity create para ver o agente de serviço que o Bigtable 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=bigtableadmin.googleapis.com \ --project CBT_PROJECT
Substitua
CBT_PROJECT
pelo projeto que contém os seus recursos do Bigtable.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-bigtable.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.
No Google Cloud projeto onde quer gerir as suas chaves:
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.
A localização da chave do Cloud KMS tem de ser igual à do cluster do Bigtable com o qual vai ser usada. Por exemplo, se criar um conjunto de chaves e uma chave em
us-central1
(Iowa), os clusters emus-central1-a
,us-central1-b
> eus-central1-c
podem ser protegidos por chaves desse conjunto de chaves.
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 do serviço Bigtable.
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_ACCOUNT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project KMS_PROJECT
Forneça os seguintes dados:
KMS_KEY
: o nome que atribuiu à chaveKMS_KEYRING
: o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
: a região que contém o conjunto de chavesSERVICE_ACCOUNT_EMAIL
: o identificador no formato de email do agente do serviço ao qual está a conceder acessoKMS_PROJECT
: o projeto que contém a chave
Crie uma instância com CMEK ativadas
Depois de criar e configurar as chaves CMEK, pode criar uma instância protegida por CMEK. As instâncias do Bigtable 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 no momento da criação.
Siga os passos em Criar uma instância para criar a sua instância protegida por CMEK.
Veja a chave em utilização
As informações sobre as versões principais provêm do campo encryption_info
.
Para ver as informações da versão da chave CMEK de uma tabela, conclua os seguintes passos:
Consola
Aceda à página de instâncias do Bigtable na Google Cloud consola.
Clique no nome da instância que contém a tabela para abrir a página Detalhes da instância e ver a lista de clusters na instância.
Junto a um ID do cluster, clique no nome da chave em Chave de encriptação para ver a página Versões da chave do cluster.
gcloud
Para cada cluster, pode confirmar a respetiva configuração da CMEK da seguinte forma:
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Forneça os seguintes dados:
CLUSTER_ID
: o identificador permanente do clusterINSTANCE_ID
: o identificador permanente da instânciaCBT_PROJECT
: o projeto que contém os seus recursos do Bigtable
O comando apresenta um resultado semelhante ao seguinte:
defaultStorageType: SSD
encryptionConfig:
kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
location: projects/cloud-bigtable-project/locations/us-central1-a
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
serveNodes: 1
state: READY
Desative uma chave
A desativação de uma versão de chave CMEK suspende o acesso a todos os dados protegidos por essa versão de chave. Destruir uma versão principal é a contrapartida permanente (após 24 horas) desta ação. Desative sempre todas as chaves para uma instância, em vez de desativar apenas as chaves de um ou alguns clusters.
Consola
Este é o método recomendado. A utilização da Google Cloud consola permite-lhe desativar todas as versões de uma chave de uma só vez.
Siga estas instruções para cada versão da chave.
gcloud
Recomendamos que use a Google Cloud consola para desativar chaves. Em alternativa, se quiser usar a CLI do Google Cloud, execute os seguintes comandos.
Apresentar todas as versões da chave CMEK:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Forneça os seguintes dados:
KMS_KEY
: o nome da chave CMEKKMS_KEYRING
: o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
: a região que contém o conjunto de chavesKMS_PROJECT
: o projeto que contém a chave
O resultado é semelhante ao seguinte:
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 ENABLED KMS_KEY_NAME/cryptoKeyVersions/2 ENABLED KMS_KEY_NAME/cryptoKeyVersions/3 ENABLED KMS_KEY_NAME/cryptoKeyVersions/4 ENABLED
Desative todas as versões:
for $KV in 1 2 3 4; do gcloud kms keys versions disable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; done
Forneça os seguintes dados:
1 2 3 4
: as versões que está a desativarKMS_KEY
: o nome da chave CMEKKMS_KEYRING
: o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
: a região que contém o conjunto de chavesKMS_PROJECT
: o projeto que contém a chave
A nova apresentação de todas as versões das chaves mostra o respetivo estado invertido para
DISABLED
, embora possa demorar até 4 horas para que o Bigtable atue sobre esta alteração de estado.[Opcional] Para confirmar o estado de uma CMEK desativada após aguardar 4 horas, execute o seguinte comando:
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECT
Forneça os seguintes dados:
TABLE_ID
: o identificador permanente da tabelaINSTANCE_ID
: o identificador permanente da instânciaCBT_PROJECT
: o projeto que contém os seus recursos do Bigtable
O comando apresenta um resultado semelhante ao seguinte:
clusterStates: CLUSTER: encryptionInfo: - encryptionStatus: code: 9 details: - '@type': type.googleapis.com/google.rpc.PreconditionFailure violations: - subject: KMS_KEY_NAME/cryptoKeyVersions/<int> type: KEY_DISABLED message: KMS_KEY_NAME is not enabled, current state is: DISABLED. encryptionType: CUSTOMER_MANAGED_ENCRYPTION kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int> name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
[Opcional] Para verificar se os clusters na instância estão desativados, execute o seguinte comando:
gcloud bigtable clusters list --instances INSTANCE_ID --project CBT_PROJECT
Forneça os seguintes dados:
INSTANCE_ID
: o identificador permanente da instânciaCBT_PROJECT
: o projeto que contém os seus recursos do Bigtable
O comando apresenta um resultado semelhante ao seguinte:
NAME ZONE NODES STORAGE STATE my-cluster us-central1-a 1 SSD DISABLED my-other-cluster us-central1-b 1 SSD DISABLED
Ative uma chave
Se uma versão da chave tiver sido desativada, pode reativá-la para voltar a ter acesso aos seus recursos do Bigtable. Esta opção está disponível durante 30 dias a partir do momento em que a versão da chave é desativada.
Consola
Este é o método recomendado. A utilização da Google Cloud consola permite-lhe ativar todas as versões de uma chave de uma só vez.
Siga estas instruções para cada versão da chave.
gcloud
Recomendamos que use a Google Cloud consola para ativar chaves. Se quiser usar a CLI do Google Cloud, execute os seguintes comandos.
Veja a lista de versões para identificar todas as versões da chave:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Forneça os seguintes dados:
KMS_KEY
: o nome da chave CMEKKMS_KEYRING
: o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
: a região que contém o conjunto de chavesKMS_PROJECT
: o projeto que contém a chave
O comando apresenta um resultado semelhante ao seguinte:
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 DISABLED KMS_KEY_NAME/cryptoKeyVersions/2 DISABLED KMS_KEY_NAME/cryptoKeyVersions/3 DISABLED KMS_KEY_NAME/cryptoKeyVersions/4 DISABLED
Execute o comando
kms keys versions enable
, indicando todas as versões apresentadas. Usando o resultado de exemplo, o comando tem um aspeto semelhante ao seguinte:for $KV in 1 2 3 4; do gcloud kms keys versions enable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; done
Forneça os seguintes dados:
1 2 3 4
: as versões que está a desativarKMS_KEY
: o nome da chave CMEKKMS_KEYRING
: o conjunto de chaves do KMS que contém a chaveKMS_LOCATION
: a região que contém o conjunto de chavesKMS_PROJECT
: o projeto que contém a chave
A nova apresentação das versões das chaves mostra o respetivo estado invertido para
ENABLED
.
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 Bigtable ou quaisquer outros produtos configurados para usar a sua chave CMEK fazem chamadas de encriptação/desencriptação para o Cloud KMS. O Bigtable não emite uma chamada de encriptação/desencriptação em todos os pedidos de dados, mas mantém um inquérito 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
Forneça os seguintes dados:
KMS_KEY
: o nome da chave CMEKKMS_KEYRING
: o conjunto de chaves do KMS que contém a chave
O registo mostra algumas entradas de registo a cada cinco minutos por tabela em cada cluster. 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/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
Consulte o artigo Compreender os registos de auditoria para ver detalhes sobre a interpretação dos registos de auditoria.
Veja a utilização da chave
O Cloud KMS permite-lhe ver as seguintes informações acerca dos recursos do Bigtable que as suas chaves protegem.
- Resumo da utilização da chave: inclui informações sobre o número de recursos protegidos e projetos que usam a chave.
- Detalhes da utilização da chave: identifica os recursos que uma chave protege e os recursos que dependem da chave.
Os seguintes recursos do Bigtable são suportados:
bigtableadmin.googleapis.com/Backup
bigtableadmin.googleapis.com/Cluster
bigtableadmin.googleapis.com/Table
bigtableadmin.googleapis.com/AuthorizedView
Os seguintes recursos do Bigtable são suportados como pré-visualização:
bigtableadmin.googleapis.com/LogicalView
bigtableadmin.googleapis.com/MaterializedView
Para mais informações sobre como ver a utilização de chaves, consulte o artigo Veja informações de utilização de chaves.
Veja o estado de encriptação de uma tabela
Consola
Não pode ver o estado de encriptação de uma tabela na Google Cloud consola.
gcloud
Para ver os detalhes da CMEK numa tabela, defina view
como ENCRYPTION
ou FULL
.
A resposta inclui a versão da chave em utilização e o respetivo estado, conforme visto pelo Bigtable.
gcloud alpha bigtable instances tables describe TABLE_ID \
--instance INSTANCE_ID --view ENCRYPTION \
--project CBT_PROJECT
Forneça os seguintes dados:
TABLE_ID
: o identificador permanente do clusterINSTANCE_ID
: o identificador permanente da instância que contém a cópia de segurançaCBT_PROJECT
: o projeto que contém os seus recursos do Bigtable
O comando apresenta um resultado semelhante ao seguinte:
clusterStates:
my-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
my-other-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table
Veja os detalhes da encriptação de uma cópia de segurança
Uma cópia de segurança permanece fixada à versão original da chave. As alternâncias de versões de chaves no Cloud KMS não alternam as versões usadas para desencriptar as cópias de segurança.
Consola
Aceda à página de instâncias do Bigtable na Google Cloud consola.
Clique no nome da instância para abrir a página Detalhes da instância.
No painel de navegação do lado esquerdo, clique em Cópias de segurança.
O nome da chave e a versão da chave de cada cópia de segurança são apresentados em Chave gerida pelo cliente.
gcloud
Execute o seguinte comando para ver as informações de encriptação de uma cópia de segurança.
gcloud alpha bigtable backups describe BACKUP_ID \
--instance INSTANCE_ID --cluster CLUSTER_ID \
--project CBT_PROJECT
Forneça os seguintes dados:
BACKUP_ID
: o ID atribuído à cópia de segurançaCLUSTER_ID
: o identificador permanente do clusterINSTANCE_ID
: o identificador permanente da instância que contém a cópia de segurançaCBT_PROJECT
: o projeto que contém os seus recursos do Bigtable
O comando devolve um resultado semelhante ao seguinte. O kmsKeyVersion
é a versão da chave CMEK à qual a cópia de segurança está associada. O estado da versão da chave não é comunicado.
encryptionInfo:
encryptionStatus:
code: 2
message: Status of the associated key version is not tracked.
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
endTime: '2020-09-01T00:03:26.568600Z'
expireTime: '2020-09-02T00:03:25.436473Z'
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
sizeBytes: '3780'