Usar chaves de criptografia gerenciadas pelo cliente (CMEK)
Esta página descreve como realizar tarefas relacionadas a chaves de criptografia gerenciadas pelo cliente (CMEK) para o Bigtable. Para obter mais informações sobre CMEK, em geral, como quando e por que ativar, consulte a documentação do Cloud KMS.
Recomendamos que você use o Console do Google Cloud para todas as tarefas de gerenciamento de chaves. Se você pretende usar a CLI do Google Cloud, instale a CLI para o Bigtable.
Preparar suas chaves CMEK
Antes de criar um recurso Bigtable protegido por CMEK, é necessário concluir as etapas a seguir para criar uma chave CMEK para cada região em que os clusters da instância estarão:
- Crie (ou recupere) um agente de serviço do Biqtable.
- Crie uma chave CMEK.
- Defina as configurações do IAM para essa chave.
Crie um agente de serviço do Bigtable
Antes de criar uma chave CMEK, é necessário ter um agente de serviço do Bigtable, que o Bigtable usa para acessar a chave.
Console
Não é possível criar um agente de serviço no Console do Google Cloud. No entanto, se você criar sua chave no Console do Google Cloud, receberá uma solicitação para conceder o papel de Criptografador/Descriptografador do Cloud KMS, e o agente de serviços será criado nesse momento, caso ainda não exista.
gcloud
Execute o comando gcloud services identity create para visualizar o agente de serviço que o Bigtable 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=bigtableadmin.googleapis.com \ --project CBT_PROJECT
Substitua
CBT_PROJECT
pelo projeto que contém os recursos do Bigtable.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-bigtable.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.
No projeto do Google Cloud em que você quer gerenciar suas chaves:
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 com gerenciamento externo. Crie a chave externa e depois crie uma chave do Cloud EKM para disponibilizá-la por meio do Cloud KMS.
O local da chave do Cloud KMS precisa ser o mesmo que o cluster do Bigtable com que será usado. Por exemplo, se você criar um keyring em
us-central1
(Iowa), os clusters emus-central1-a
,us-central1-b
eus-central1-c
poderão ser protegidos pelas chaves do keyring.
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 Add.
Insira o ID com formato de e-mail para o agente de serviço do Bigtable.
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_ACCOUNT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project KMS_PROJECT
Preencha o seguinte:
KMS_KEY
: nome atribuído à chave;KMS_KEYRING
: keyring do KMS que contém a chave;KMS_LOCATION
: região que contém o keyring;SERVICE_ACCOUNT_EMAIL
: identificador formatado pelo e-mail do agente de serviço a que você está concedendo acesso;KMS_PROJECT
: projeto que contém a chave.
Criar uma instância ativada para CMEK
Depois que as chaves de CMEK forem criadas e configuradas, será possível criar uma instância protegida por CMEK. As atuais instâncias do Cloud Bigtable que estão protegidas pela criptografia padrão do Google não podem ser convertidas para usar CMEK; é possível escolher apenas um tipo de criptografia e uma chave no momento da criação.
Siga as etapas em Criar uma instância para criar uma instância protegida por CMEK.
Ver a chave em uso
As informações sobre versões de chave são do campo encryption_info
.
Para visualizar as informações da versão de chave CMEK de uma tabela, conclua as etapas a seguir:
Console
Acesse a página "Instâncias do Bigtable" no console do Google Cloud.
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.
Ao lado de um ID do cluster, clique no nome da chave em Chave de criptografia para visualizar a página Versões da chave do cluster.
gcloud
Para cada cluster, é possível confirmar a configuração de CMEK da seguinte maneira:
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Preencha o seguinte:
CLUSTER_ID
: identificador permanente do cluster;INSTANCE_ID
: identificador permanente da instância;CBT_PROJECT
: o projeto que contém os recursos do Bigtable.
O comando exibe uma resposta semelhante a esta:
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
Desativar uma chave
A desativação de uma versão de chave CMEK suspende o acesso a todos os dados protegidos por ela. Como destruir uma versão de chave é a contraparte permanente (após 24 horas) dessa ação. Sempre desative todas as chaves de uma instância em vez de desativar apenas as chaves de um ou alguns clusters.
Console
Este é o método recomendado. Usando o Console do Google Cloud, é possível desativar todas as versões de uma chave de uma só vez.
Siga estas instruções para cada versão de chave.
gcloud
É recomendável usar o Console do Google Cloud para desativar as chaves. Se você quiser usar a CLI do Google Cloud, execute os comandos a seguir.
Liste todas as versões de chave CMEK:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Preencha o seguinte:
KMS_KEY
: nome da chave CMEK;KMS_KEYRING
: keyring do KMS que contém a chave;KMS_LOCATION
: região que contém o keyring;KMS_PROJECT
: projeto que contém a chave.
A resposta será semelhante a:
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
Desativar 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
Preencha o seguinte:
1 2 3 4
: versões que você está desativando;KMS_KEY
: nome da chave CMEK;KMS_KEYRING
: keyring do KMS que contém a chave;KMS_LOCATION
: região que contém o keyring;KMS_PROJECT
: projeto que contém a chave.
Ao listar todas as versões de chave novamente, o estado alterado para
DISABLED
será exibido; no entanto, poderá levar até quatro horas para que o Bigtable aja de acordo com essa alteração de estado.[Opcional] Para confirmar o status de uma CMEK desativada depois de esperar quatro horas, execute o seguinte comando:
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECT
Preencha o seguinte:
TABLE_ID
: identificador permanente da tabela;INSTANCE_ID
: identificador permanente da instância;CBT_PROJECT
: o projeto que contém os recursos do Bigtable.
O comando exibe uma resposta semelhante a esta:
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
Preencha o seguinte:
INSTANCE_ID
: identificador permanente da instância;CBT_PROJECT
: o projeto que contém os recursos do Bigtable.
O comando exibe uma resposta semelhante a esta:
NAME ZONE NODES STORAGE STATE my-cluster us-central1-a 1 SSD DISABLED my-other-cluster us-central1-b 1 SSD DISABLED
Ativar uma chave
Se uma versão de chave tiver sido desativada, você poderá reativá-la para recuperar o acesso aos recursos do Bigtable. Essa opção fica disponível por 30 dias a partir do momento em que a versão de chave é desativada.
Console
Este é o método recomendado. Usando o Console do Google Cloud, é possível ativar todas as versões de uma chave de uma só vez.
Siga estas instruções para cada versão de chave.
gcloud
É recomendável usar o Console do Google Cloud para ativar as chaves. Se quiser usar a CLI do Google Cloud, execute os comandos a seguir.
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
Preencha o seguinte:
KMS_KEY
: nome da chave CMEK;KMS_KEYRING
: keyring do KMS que contém a chave;KMS_LOCATION
: região que contém o keyring;KMS_PROJECT
: projeto que contém a chave.
O comando exibe uma resposta semelhante a esta:
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
, fornecendo todas as versões listadas. Usando o exemplo de saída, o comando será semelhante a este: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
Preencha o seguinte:
1 2 3 4
: versões que você está desativando;KMS_KEY
: nome da chave CMEK;KMS_KEYRING
: keyring do KMS que contém a chave;KMS_LOCATION
: região que contém o keyring;KMS_PROJECT
: projeto que contém a chave.
Ao listar as versões de chave novamente, o estado alterado para
ENABLED
será exibido.
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 Bigtable ou qualquer outro produto configurado para usar a chave CMEK faz chamadas de criptografia/descriptografia para o Cloud KMS. O Bigtable 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
Preencha o seguinte:
KMS_KEY
: nome da chave CMEK;KMS_KEYRING
: keyring do KMS que contém a chave;
O registro mostra algumas entradas de registro a cada cinco minutos por tabela em cada cluster. 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/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 Noções básicas sobre registros de auditoria para detalhes sobre como interpretar registros de auditoria.
Ver uso da chave
O Cloud KMS permite visualizar as informações a seguir sobre os recursos do Bigtable que as chaves protegem.
- Resumo do uso da chave: inclui informações sobre o número de projetos e recursos protegidos que usam a chave.
- Detalhe do uso da chave: identifica os recursos que uma chave protege e os recursos que dependem dela.
Os seguintes recursos do Bigtable são compatíveis:
bigtableadmin.googleapis.com/Backup
bigtableadmin.googleapis.com/Cluster
bigtableadmin.googleapis.com/Table
Para mais informações sobre como ver o uso da chave, consulte Ver informações de uso da chave.
Visualizar o status de criptografia de uma tabela
Console
Não é possível visualizar o status de criptografia de uma tabela no Console do Google Cloud.
gcloud
Para visualizar os detalhes da CMEK em uma tabela, defina view
como ENCRYPTION
ou FULL
.
A resposta inclui a versão de chave em uso e seu status, conforme visto pelo
Bigtable.
gcloud alpha bigtable instances tables describe TABLE_ID \
--instance INSTANCE_ID --view ENCRYPTION \
--project CBT_PROJECT
Preencha o seguinte:
TABLE_ID
: identificador permanente do cluster;INSTANCE_ID
: identificador permanente da instância que contém o backup;CBT_PROJECT
: o projeto que contém os recursos do Bigtable.
O comando exibe uma resposta semelhante a esta:
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
Visualizar os detalhes de criptografia de um backup
Um backup permanece fixado à versão original da chave. As rotações de versão de chave no Cloud KMS não alternam as versões usadas para descriptografar os backups.
Console
Acesse a página "Instâncias do Bigtable" no console do Google Cloud.
Clique no nome da instância para abrir a página de Detalhes da instância.
No painel de navegação à esquerda, clique em Backups.
O nome e a versão de chave para cada backup são listados em Chave gerenciada pelo cliente.
gcloud
Execute o seguinte comando para visualizar as informações de criptografia de um backup.
gcloud alpha bigtable backups describe BACKUP_ID \
--instance INSTANCE_ID --cluster CLUSTER_ID \
--project CBT_PROJECT
Preencha o seguinte:
BACKUP_ID
: código atribuído ao backup;CLUSTER_ID
: identificador permanente do cluster;INSTANCE_ID
: identificador permanente da instância que contém o backup;CBT_PROJECT
: o projeto que contém os recursos do Bigtable.
O comando retorna uma saída semelhante à seguinte. O kmsKeyVersion
é a versão de chave CMEK em que o backup é fixado. O status da
versão de chave não é informado.
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'