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

  1. Crie (ou recupere) um agente de serviço do Biqtable.
  2. Crie uma chave CMEK.
  3. Defina as configurações do IAM para essa chave.

Crie um agente de serviço do Bigtable

Antes de criar uma chave CMEK, você precisa ter um serviço do Bigtable agente, 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

  1. 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.

  1. No projeto do Google Cloud em que você quer gerenciar suas chaves:

    1. Ative a API Cloud KMS.

    2. Crie um keyring e uma chave usando uma das seguintes opções:

      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 em us-central1-a, us-central1-b e us-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.

  1. No console do Google Cloud, abra a página IAM.

    Acessar a página IAM

  2. Clique em Add.

  3. Insira o ID com formato de e-mail para o agente de serviço do Bigtable.

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

  5. Clique em Save.

gcloud

  1. 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

  1. Acesse a página "Instâncias do Bigtable" no console do Google Cloud.

    Abrir a lista de instâncias

  2. 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.

  3. 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.

  1. 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
    
  2. 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.

  3. [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
    
  4. [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.

  1. 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:

  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
    

    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

  1. Acesse a página "Instâncias do Bigtable" no console do Google Cloud.

    Abrir a lista de instâncias

  2. Clique no nome da instância para abrir a página de Detalhes da instância.

  3. 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'

A seguir