Por padrão, o BigQuery criptografa o conteúdo do cliente armazenado em repouso. O BigQuery lida e gerencia essa criptografia padrão para você sem nenhuma ação adicional da sua parte. Primeiro, os dados de uma tabela do BigQuery são criptografados usando uma chave de criptografia de dados. Em seguida, essas chaves de criptografia de dados são criptografadas com chaves de criptografia de chaves, o que é conhecido como criptografia de envelope. Em vez de criptografarem diretamente seus dados, as chaves de criptografia de chaves são usadas para criptografar as chaves de criptografia de dados que o Google usa para criptografar seus dados. Para mais informações, consulte Gerenciamento de chaves.
Para você controlar a criptografia, use as chaves de criptografia gerenciadas pelo cliente (CMEK) para o BigQuery. Em vez de o Google gerenciar as chaves de criptografia de chaves que protegem seus dados, você controla e gerencia as chaves de criptografia de chaves no Cloud KMS. Este tópico fornece detalhes sobre essa técnica.
Saiba mais sobre opções de criptografia no Google Cloud.
Antes de começar
Entenda conjuntos de dados, tabelas e consultas.
Decida se você executará o BigQuery e o Cloud KMS no mesmo projeto do Google Cloud ou em projetos diferentes. Para fins de exemplo de documentação, usamos a convenção a seguir:
PROJECT_ID
: o ID do projeto que executa o BigQueryPROJECT_NUMBER
: o número do projeto que executa o BigQueryKMS_PROJECT_ID
: o ID do projeto que executa o Cloud KMS, mesmo que seja o mesmo projeto que executa o BigQuery
O BigQuery é ativado automaticamente em novos projetos. Se você estiver usando um projeto pré-existente para executar o BigQuery, ative a API BigQuery.
No projeto do Google Cloud que executa o Cloud KMS:
- Ativar a API Cloud Key Management Service
- Crie um keyring e uma chave, conforme descrito em Como criar keyrings e chaves. Crie o keyring em um local que corresponda ao local do conjunto de dados do BigQuery:
-
Qualquer conjunto de dados multirregional deve usar um keyring multirregional do local correspondente. Para exemplos, um conjunto de dados na região
US
deve ser protegido com um keyring da regiãous
e um conjunto de dados na regiãoEU
deve ser protegido com um keyring da regiãoeurope
. -
Conjuntos de dados regionais devem usar as chaves regionais correspondentes. Por exemplo, um conjunto de dados na região
asia-northeast1
deve ser protegido com um keyring da regiãoasia-northeast1
. - A região
global
não é compatível com o BigQuery.
-
Qualquer conjunto de dados multirregional deve usar um keyring multirregional do local correspondente. Para exemplos, um conjunto de dados na região
Especificação de criptografia
As chaves do Cloud KMS usadas para proteger seus dados no BigQuery são chaves AES-256. Elas são usadas como chaves de criptografia de chaves no BigQuery porque criptografam as chaves de criptografia de dados que criptografam seus dados.
Conceder permissões de criptografia e descriptografia
Para proteger seus dados do BigQuery com uma chave CMEK, conceda permissão à conta de serviço do BigQuery para criptografar e descriptografar com essa chave. O papel Criptografador/Descriptografador de CryptoKey do Cloud KMS concede essa permissão.
Use o Console do Google Cloud para determinar o código da conta de serviço do BigQuery e forneça à conta de serviço a função apropriada para criptografar e descriptografar usando o Cloud KMS.
Determinar o ID da conta de serviço
O ID da conta de serviço do BigQuery está no formato:
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
As técnicas a seguir mostram como você pode determinar o ID da conta de serviço do BigQuery para seu projeto.
Console
Vá para a página Painel de controle no Console do Cloud.
Clique na lista suspensa Selecionar de na parte superior da página. Na janela Selecionar de exibida, selecione o projeto.
O código e o número do projeto são exibidos no cartão Informações do projeto no Painel:
Na string a seguir, substitua PROJECT_NUMBER pelo número do projeto. A nova string identifica o ID da conta de serviço do BigQuery.
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
bq
Use o comando bq show
com a sinalização --encryption_service_account
para
determinar o ID da conta de serviço:
bq show --encryption_service_account
O comando exibe o ID da conta de serviço:
ServiceAccountID ------------------------------------------------------------- bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
Atribuir o papel criptografador/descriptografador
Atribua o papel "Criptografador/Descriptografador de CryptoKey do Cloud KMS" à conta de serviço do sistema do BigQuery que você copiou para a área de transferência. Essa conta está no formato
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
Console
Abra a página Chaves criptográficas no Console do Cloud.
Clique no nome do keyring que contém a chave.
Clique na caixa de seleção da chave de criptografia à qual você quer adicionar o papel. A guia Permissões será aberta.
Clique em Adicionar membro.
Digite o endereço de e-mail da conta de serviço,
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
.- Se já estiver na lista de membros, a conta de serviço tem papéis. Clique na lista suspensa de funções atual para a conta de serviço
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
.
- Se já estiver na lista de membros, a conta de serviço tem papéis. Clique na lista suspensa de funções atual para a conta de serviço
Clique na lista suspensa Selecionar um papel, clique em Cloud KMS e, depois, clique no papel Criptografador/Descriptografador de CryptoKey do Cloud KMS.
Clique em Salvar para aplicar o papel à conta de serviço
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
.
gcloud
Use a ferramenta de linha de comando gcloud
para atribuir o papel:
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
Substitua:
KMS_PROJECT_ID
: o ID do projeto do Google Cloud que está executando o Cloud KMS.PROJECT_NUMBER
: o número (não o ID) do projeto do Cloud que está executando o BigQuery.KMS_KEY_LOCATION
: o nome do local da chave do Cloud KMS.KMS_KEY_RING
: o nome do keyring da chave do Cloud KMSKMS_KEY
: o nome da chave do Cloud KMS.
ID de recurso da chave
O código do recurso da chave do Cloud KMS é necessário para uso de CMEK, como mostrado nos exemplos deste tópico. Essa chave diferencia maiúsculas de minúsculas e está no formato:
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY
Recuperar o ID do recurso da chave
Abra a página Chaves criptográficas no Console do Cloud.
Clique no nome do keyring que contém a chave.
Na chave referente ao código de recurso que está sendo recuperado, clique em Mais more_vert.
Clique em Copiar ID do recurso. O código do recurso da chave é copiado para a área de transferência.
Criar uma tabela protegida pelo Cloud KMS
Criar uma tabela vazia protegida pelo Cloud KMS
Para criar uma tabela protegida pelo Cloud KMS:
Console
Abra a página do BigQuery no Console do Cloud.
Na seção Recursos do painel de navegação, abra o projeto e selecione um conjunto de dados.
Clique em Criar tabela.
Na página Criar tabela, preencha as informações necessárias para criar uma tabela vazia com uma definição de esquema. Antes de clicar em Criar tabela, configure o tipo de criptografia e especifique a chave do Cloud KMS a ser usada com a tabela:
- Clique em Opções avançadas.
- Clique em Chave gerenciada pelo cliente.
- Selecione a chave. Se a chave que você quer usar não estiver listada, insira o ID do recurso da chave.
Clique em Criar tabela.
bq
É possível usar a ferramenta de linha de comando bq
com a sinalização --destination_kms_key
para criar a tabela. A sinalização --destination_kms_key
especifica o código de recurso da chave a ser usada com a tabela.
Para criar uma tabela vazia com um esquema:
bq mk --schema name:string,value:integer -t \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET_ID.TABLE_ID
Como alternativa, é possível usar uma instrução DDL:
bq query --use_legacy_sql=false " CREATE TABLE DATASET_ID.TABLE_ID (name STRING, value INT64) OPTIONS( kms_key_name='projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY' ) "
Para criar uma tabela de uma consulta:
bq query --destination_table=DATASET_ID.TABLE_ID \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ "SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"
Para mais informações sobre a ferramenta de linha de comando bq
, consulte
Como usar a ferramenta de linha de comando bq
.
Go
Java
Python
Proteja uma nova tabela com uma chave de criptografia gerenciada pelo cliente definindo a propriedade Table.encryption_configuration como um objeto EncryptionConfiguration antes de criar a tabela.
Consultar uma tabela protegida por uma chave do Cloud KMS
Nenhuma disposição especial é obrigatória para consultar uma tabela protegida pelo Cloud KMS. O nome da chave usada para criptografar o conteúdo da tabela é armazenado no BigQuery e essa chave será usada quando houver uma consulta a uma tabela protegida pelo Cloud KMS.
Todas as ferramentas existentes, o console do BigQuery e a ferramenta de linha de comando bq
são executadas
da mesma forma que as tabelas criptografadas padrão, desde que o
BigQuery tenha acesso à chave do Cloud KMS usada para criptografar
o conteúdo da tabela.
Proteger os resultados da consulta com a chave do Cloud KMS
Console
Abra a página do BigQuery no Console do Cloud.
Clique em Escrever nova consulta.
Insira uma consulta SQL do BigQuery válida na área de texto da consulta.
Clique em Mais, em Configurações de consulta e em Opções avançadas.
Selecione Criptografia gerenciada pelo cliente.
Selecione a chave. Se a chave que você quer usar não estiver listada, insira o ID do recurso da chave.
Clique em Save.
Clique em Run.
bq
Especifique a sinalização --destination_kms_key
para proteger a tabela de destino ou os resultados da consulta (se estiver usando uma tabela temporária) com a chave do Cloud KMS.
A sinalização --destination_kms_key
especifica o código de recurso da chave a ser usada com a tabela de destino ou resultante.
Se preferir, use a sinalização --destination_table
para especificar o destino dos resultados da consulta. Se --destination_table
não for usado, os resultados da consulta serão gravados em uma tabela temporária.
Para consultar uma tabela:
bq query \ --destination_table=DATASET_ID.TABLE_ID \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ "SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"
Para mais informações sobre a ferramenta de linha de comando bq
, consulte
Como usar a ferramenta de linha de comando bq
.
Go
Java
Antes de testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Python
Carregar uma tabela protegida pelo Cloud KMS
Para carregar um arquivo de dados em uma tabela protegida pelo Cloud KMS:
Console
Para proteger uma tabela de destino do job de carga com uma chave de criptografia gerenciada pelo cliente, especifique a chave ao carregar a tabela.
Abra a página do BigQuery no Console do Cloud.
Na seção Recursos do painel de navegação, abra o projeto e selecione um conjunto de dados.
No lado direito da janela, no painel de detalhes, clique em Criar tabela.
Insira as opções a serem usadas no carregamento da tabela antes de clicar em Criar tabela e Opções avançadas.
Em Criptografia, selecione Chave gerenciada pelo cliente.
Clique na lista suspensa Selecionar uma chave gerenciada pelo cliente e selecione a chave a ser usada. Caso não veja nenhuma chave disponível, insira um código de recurso de chave.
Clique em Criar tabela.
bq
Para proteger uma tabela de destino do job de carregamento com uma chave de criptografia gerenciada pelo cliente, defina a sinalização --destination_kms_key
.
bq --location=LOCATION load \ --autodetect \ --source_format=FORMAT \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET.TABLE \ path_to_sourcePor exemplo:
bq load \ --autodetect \ --source_format=NEWLINE_DELIMITED_JSON \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ test2.table4 \ gs://cloud-samples-data/bigquery/us-states/us-states.json
Go
Java
Python
Para proteger uma tabela de destino da tarefa de carregamento com uma chave de criptografia gerenciada pelo cliente, defina a propriedade LoadJobConfig.destination_encryption_configuration como EncryptionConfiguration e carregue a tabela.
Fazer streaming em uma tabela protegida pelo Cloud KMS
Faça o streaming de dados na sua tabela do BigQuery protegida pelo CMEK sem especificar um parâmetro adicional. Observe que esses dados são criptografados usando sua chave do Cloud KMS no buffer e no local final. Antes de usar streaming com uma tabela CMEK, revise os requisitos em disponibilidade e acessibilidade da chave.
Saiba mais sobre streaming em Como fazer streaming de dados no BigQuery.
Alterar uma tabela da criptografia padrão para proteção do Cloud KMS
bq
É possível usar o comando bq cp
com a sinalização --destination_kms_key
para copiar uma tabela protegida por criptografia padrão para uma nova tabela ou para a tabela original, protegida pelo Cloud KMS. A sinalização --destination_kms_key
especifica o código de recurso da chave a ser usada com a tabela de destino.
Para copiar uma tabela com criptografia padrão para uma nova tabela com proteção do Cloud KMS:
bq cp \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ SOURCE_DATASET_ID.SOURCE_TABLE_ID DESTINATION_DATASET_ID.DESTINATION_TABLE_ID
Caso você queira copiar uma tabela com criptografia padrão para a mesma tabela com proteção do Cloud KMS:
bq cp -f \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET_ID.TABLE_ID DATASET_ID.TABLE_ID
Se quiser alterar uma tabela da proteção do Cloud KMS para a criptografia padrão, copie o arquivo para si mesmo executando bq cp
sem usar a sinalização --destination_kms_key
.
Para mais informações sobre a ferramenta de linha de comando bq
, consulte
Como usar a ferramenta de linha de comando bq
.
Go
Java
Python
Antes de testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Para proteger o destino de uma cópia de tabela com uma chave de criptografia gerenciada pelo cliente, defina a propriedade QueryJobConfig.destination_encryption_configuration como EncryptionConfiguration e copie a tabela.
Determinar se uma tabela é protegida pelo Cloud KMS
No Console do Cloud, clique na seta azul à esquerda do conjunto de dados para expandi-lo ou clique duas vezes no nome do conjunto de dados. Isso exibe as tabelas e visualizações no conjunto de dados.
Clique no nome da tabela.
Clique em Detalhes. A página Detalhes da tabela exibe a descrição e as informações da tabela.
Caso a tabela esteja protegida pelo Cloud KMS, o campo Chave de criptografia gerenciada pelo cliente exibirá o código do recurso da chave.
Alterar a chave do Cloud KMS para uma tabela do BigQuery
Para alterar a chave do Cloud KMS de uma tabela protegida pelo CMEK, é possível realizar uma consulta ALTER TABLE
, usar a API ou usar a ferramenta de linha de comando bq
.
Há duas maneiras de modificar a chave do Cloud KMS usando a API e a
ferramenta de linha de comando bq
: update
ou cp
. Se você usar update
, poderá alterar a
chave do Cloud KMS usada em uma tabela protegida por ele. Se você usar cp
,
terá como alterar a chave do Cloud KMS usada em uma tabela protegida pelo CMEK,
alterar uma tabela da criptografia padrão para a proteção de CMEK e alterar uma tabela
da proteção de CMEK para a criptografia padrão. A vantagem de update
é que é uma função
mais rápida que cp
e permite usar
decoradores de tabela.
Console
Abra a página do BigQuery no Console do Cloud.
Clique em Escrever nova consulta.
Digite a instrução DDL na área de texto Nova consulta. Para o valor
kms_key_name
, especifique o ID de recurso da chave que você quer usar para proteger a tabela.#standardSQL ALTER TABLE DATASET_ID.mytable SET OPTIONS ( kms_key_name="projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY" )
Clique em Run.
bq
É possível usar o comando bq cp
com a sinalização --destination_kms_key
para alterar a chave de uma tabela protegida pelo Cloud KMS. A sinalização --destination_kms_key
especifica o código de recurso da chave a ser usada com a tabela.
bq update \ --destination_kms_key projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ -t DATASET_ID.TABLE_ID
Go
Java
Python
Altere a chave de criptografia gerenciada pelo cliente de uma tabela alterando a propriedade Table.encryption_configuration para um novo objeto EncryptionConfiguration e atualize a tabela.
Definir uma chave padrão do conjunto de dados
É possível definir uma chave padrão do Cloud KMS para o conjunto de dados inteiro. Ela será aplicada a todas as tabelas recém-criadas nesse conjunto, exceto se outra chave do Cloud KMS for especificada na criação da tabela. A chave padrão não se aplica às tabelas atuais. A alteração da chave padrão não modifica nenhuma tabela e se aplica somente às novas tabelas criadas após a alteração.
Para aplicar, alterar ou remover uma chave padrão do conjunto de dados
especificando a chave padrão no campo
EncryptionConfiguration.kmsKeyName
ao chamar os métodosdatasets.insert
oudatasets.patch
especificando a chave padrão na sinalização
--default_kms_key
ao executar o comandobq mk --dataset
.
Remover o acesso do BigQuery à chave do Cloud KMS
Remova o acesso do BigQuery à chave do Cloud KMS a qualquer momento, revogando a permissão do IAM para essa chave.
Se o BigQuery perder o acesso à chave do Cloud KMS, a experiência do usuário provavelmente será afetada e poderá ocorrer perda de dados:
Os dados nestas tabelas protegidas pelo CMEK não poderão mais ser acessados:
query
,cp
,extract
etabledata.list
falharão.Nenhum dado novo será adicionado a essas tabelas protegidas pelo CMEK.
Depois que o acesso for concedido novamente, o desempenho das consultas para essas tabelas poderá ser reduzido durante vários dias.
Impacto do rodízio de chaves do Cloud KMS
O BigQuery não alterna automaticamente uma chave de criptografia de tabela quando a chave do Cloud KMS associada à tabela é alternada. As tabelas atuais continuam usando a versão da chave com que foram criadas. As novas tabelas usam a versão atual da chave.
Limitações
Acesso do BigQuery à chave do Cloud KMS
Uma chave do Cloud KMS é considerada disponível e acessível pelo BigQuery nas seguintes condições:
- a chave está ativada
- A conta de serviço do BigQuery tem permissões de criptografia e descriptografia na chave.
As próximas seções descrevem o impacto nas inserções de streaming e nos dados inacessíveis a longo prazo quando uma chave está inacessível.
Impacto em inserções de streaming
A chave do Cloud KMS precisa estar disponível e acessível por pelo menos 24 horas consecutivas no período de 48 horas após uma solicitação de inserção de streaming. Se a chave não estiver disponível e acessível, é possível que os dados transmitidos por streaming não sejam totalmente persistidos e possam ser perdidos. Para mais informações sobre inserções de streaming, consulte Como fazer streaming de dados para o BigQuery.
Impacto nos dados inacessíveis em longo prazo
Como o BigQuery fornece armazenamento gerenciado, os dados inacessíveis a longo prazo não são compatíveis com a arquitetura dele. Se a chave do Cloud KMS de uma determinada tabela do BigQuery não estiver disponível e acessível por sessenta dias consecutivos, o BigQuery poderá escolher excluir a tabela e os dados associados a ela. Pelo menos sete dias antes da exclusão dos dados, o BigQuery envia um e-mail para o endereço de e-mail associado à conta de faturamento.
Como usar decoradores de tabela
Se você proteger uma tabela com o Cloud KMS e substituir os dados na
tabela usando o valor WRITE_TRUNCATE
para uma operação load
, cp
ou query
, os decoradores de intervalos
não funcionarão dentro do limite de mudança de criptografia. Ainda é possível usar decoradores
de tabela, incluindo decoradores de intervalo, para consultar os dados antes ou depois do
limite ou consultar o snapshot em um momento.
Perguntas frequentes
Quem precisa de permissão para a chave do Cloud KMS?
Com as chaves de criptografia gerenciadas pelo cliente, não é necessário especificar permissões repetidamente. Enquanto a conta de serviço do BigQuery tiver permissão para usar a chave do Cloud KMS para criptografia e descriptografia, qualquer pessoa com permissão para a tabela do BigQuery terá acesso aos dados, mesmo sem acesso direto a essa chave.
Qual conta de serviço é usada?
A conta de serviço do BigQuery associada ao projeto do Cloud da tabela é usada para descriptografar os dados dessa tabela. As contas de serviço do BigQuery são exclusivas para cada projeto. Para um job que grava dados em uma tabela anônima protegida pelo Cloud KMS, é usada a conta de serviço do projeto desse job.
Como exemplo, considere três tabelas protegidas pelo CMEK: table1
, table2
e table3
. Para consultar dados de {project1.table1, project2.table2}
com tabela de destino {project3.table3}
:
- Use a conta de serviço
project1
paraproject1.table1
- Use a conta de serviço
project2
paraproject2.table2
- Use a conta de serviço
project3
paraproject3.table3
Como o BigQuery usa minha chave do Cloud KMS?
O BigQuery usará a chave do Cloud KMS para descriptografar dados em resposta a uma consulta do usuário, por exemplo, tabledata.list
ou jobs.insert
.
O BigQuery também pode usar a chave para tarefas de manutenção de dados e otimização de armazenamento, como a conversão de dados em formato otimizado para leitura.
Quais bibliotecas de criptografia são usadas?
O BigQuery usa a funcionalidade de CMEK do Cloud KMS. O Cloud KMS usa a Tink (em inglês) para criptografia.
Como receber mais ajuda?
Se você tiver perguntas que não foram respondidas aqui, consulte o suporte do BigQuery ou o suporte do Cloud KMS.
Como solucionar erros
Veja a seguir os erros comuns e as mitigações recomendadas.
Erro | Recomendação |
---|---|
Atribua o papel criptografador/descriptografador da CryptoKey do Cloud KMS | A conta de serviço do BigQuery associada ao projeto não tem permissão do IAM suficiente para operar na chave do Cloud KMS especificada. Siga as instruções do erro ou desta documentação para conceder a permissão adequada do IAM. |
As configurações de criptografia de tabela atuais não correspondem às configurações de criptografia especificadas na solicitação | Isso ocorre quando as configurações de criptografia da tabela de destino não correspondem às da sua solicitação. Como mitigação, use a disposição de gravação TRUNCATE para substituir a tabela ou especifique uma tabela de destino diferente. |
Esta região não é compatível | A região da chave do Cloud KMS não corresponde à do conjunto de dados do BigQuery da tabela de destino. Como mitigação, selecione a chave em uma região que corresponda ao seu conjunto de dados ou carregue em um conjunto de dados que corresponda à região da chave. |