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:

  1. Crie (ou obtenha) um agente de serviço do Bigtable.
  2. Crie uma chave CMEK.
  3. 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

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

  1. No Google Cloud projeto onde quer gerir as suas chaves:

    1. Ative a API Cloud KMS.

    2. Crie um conjunto de chaves e uma chave através de uma das seguintes opções:

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

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda à página IAM

  2. Clique em Adicionar.

  3. Introduza o ID formatado em email do agente do serviço Bigtable.

  4. Selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.

  5. Clique em Guardar.

gcloud

  1. 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 à chave
    • KMS_KEYRING: o conjunto de chaves do KMS que contém a chave
    • KMS_LOCATION : a região que contém o conjunto de chaves
    • SERVICE_ACCOUNT_EMAIL: o identificador no formato de email do agente do serviço ao qual está a conceder acesso
    • KMS_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

  1. Aceda à página de instâncias do Bigtable na Google Cloud consola.

    Abra 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. 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 cluster
  • INSTANCE_ID: o identificador permanente da instância
  • CBT_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.

  1. 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 CMEK
    • KMS_KEYRING: o conjunto de chaves do KMS que contém a chave
    • KMS_LOCATION: a região que contém o conjunto de chaves
    • KMS_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
    
  2. 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 desativar
    • KMS_KEY: o nome da chave CMEK
    • KMS_KEYRING: o conjunto de chaves do KMS que contém a chave
    • KMS_LOCATION: a região que contém o conjunto de chaves
    • KMS_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.

  3. [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 tabela
    • INSTANCE_ID: o identificador permanente da instância
    • CBT_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
    
  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
    

    Forneça os seguintes dados:

    • INSTANCE_ID: o identificador permanente da instância
    • CBT_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.

  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
    

    Forneça os seguintes dados:

    • KMS_KEY: o nome da chave CMEK
    • KMS_KEYRING: o conjunto de chaves do KMS que contém a chave
    • KMS_LOCATION: a região que contém o conjunto de chaves
    • KMS_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 desativar
    • KMS_KEY: o nome da chave CMEK
    • KMS_KEYRING: o conjunto de chaves do KMS que contém a chave
    • KMS_LOCATION: a região que contém o conjunto de chaves
    • KMS_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:

  1. Certifique-se de que o registo está ativado para a API Cloud KMS no seu projeto.

  2. Aceda ao Cloud Logging na Google Cloud consola.

    Aceda ao Cloud Logging

  3. 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 CMEK
    • KMS_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 cluster
  • INSTANCE_ID: o identificador permanente da instância que contém a cópia de segurança
  • CBT_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

  1. Aceda à página de instâncias do Bigtable na Google Cloud consola.

    Abra a lista de instâncias

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

  3. 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ça
  • CLUSTER_ID: o identificador permanente do cluster
  • INSTANCE_ID: o identificador permanente da instância que contém a cópia de segurança
  • CBT_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'

O que se segue?