Chaves de encriptação fornecidas pelos clientes

Configuração

Esta página aborda as chaves de encriptação fornecidas pelos clientes. Para outras opções de encriptação, consulte o artigo Opções de encriptação de dados.

Vista geral

Como camada adicional além da encriptação padrão do Cloud Storage, pode optar por fornecer a sua própria chave de encriptação AES-256, codificada no Base64 padrão. Esta chave é conhecida como uma chave de encriptação fornecida pelo cliente. Se fornecer uma chave de encriptação fornecida pelo cliente, o Cloud Storage não armazena permanentemente a sua chave nos respetivos servidores nem gere a sua chave de outra forma.

Em alternativa, fornece a sua chave para cada operação do Cloud Storage e a chave é eliminada dos servidores do Cloud Storage após a conclusão da operação. O Cloud Storage armazena apenas um hash criptográfico da chave para que os pedidos futuros possam ser validados em relação ao hash. Não é possível recuperar a sua chave a partir deste hash, e não é possível usar o hash para desencriptar os seus dados.

Recomendamos que faça uma cópia de segurança de cada chave numa localização segura e tome precauções para garantir que as suas chaves não são partilhadas com partes não fidedignas. Se algum ficheiro ou máquina que contenha a sua chave de encriptação for comprometido, deve fazer imediatamente a rotação de chaves para todos os objetos encriptados com a chave comprometida.

Quando é usada a chave?

Quando aplica uma chave de encriptação fornecida pelo cliente a um objeto, o Cloud Storage usa a chave quando encripta:

  • Os dados do objeto.
  • O checksum CRC32C do objeto.
  • O hash MD5 do objeto.

A encriptação padrão do Cloud Storage é usada para encriptar os metadados restantes do objeto, incluindo o nome do objeto. Isto permite-lhe ler e atualizar metadados gerais, bem como listar, substituir e eliminar objetos, sem precisar da chave de encriptação fornecida pelo cliente. No entanto, para realizar qualquer uma destas ações, tem de ter autorização suficiente para o fazer.

Por exemplo, se um objeto estiver encriptado com uma chave de encriptação fornecida pelo cliente, tem de usar a chave para realizar operações no objeto, como transferi-lo ou movê-lo. Se tentar ler os metadados do objeto sem fornecer a chave, recebe metadados como o nome do objeto e Content-Type, mas não a soma de verificação CRC32C nem o hash MD5 do objeto. Se fornecer a sua chave com o pedido de metadados do objeto, a soma de verificação CRC32C e o hash MD5 do objeto são incluídos nos metadados.

Comportamento de reescrita

Se reescrever um objeto encriptado com uma chave de encriptação fornecida pelo cliente sem fornecer uma chave para encriptar o objeto reescrito, acontece o seguinte:

Verificação de HTTPS

Para proteger os seus dados à medida que viajam pela Internet durante as operações de leitura e escrita, use o Transport Layer Security, comummente conhecido como TLS ou HTTPS. O TLS é necessário quando fornece uma chave de encriptação. Se usar acidentalmente a sua chave de encriptação através de uma ligação não encriptada (HTTP), é possível que um atacante intercete a sua chave. Devido a esta possibilidade, a API Cloud Storage devolve uma mensagem de erro a avisar que a sua chave pode ter sido comprometida. Se isto ocorrer, deve alternar imediatamente as suas chaves.

Restrições

Aplicam-se as seguintes restrições quando usa chaves de encriptação fornecidas pelos clientes:

  • Não pode usar a consola para transferir objetos encriptados com uma chave de encriptação fornecida pelo cliente. Google Cloud Da mesma forma, quando usa a consola para carregar um objeto, não pode encriptá-lo com uma chave de encriptação fornecida pelo cliente.Google Cloud

  • O Serviço de transferência de armazenamento e o Cloud Dataflow não suportam objetos encriptados com chaves de encriptação fornecidas pelo cliente.

  • Só pode definir chaves de encriptação fornecidas pelo cliente em objetos individuais. Não pode definir uma chave de encriptação fornecida pelo cliente predefinida para um contentor.

  • Se estiver a realizar uma operação compose em objetos encriptados por chaves de encriptação fornecidas pelo cliente, os objetos componentes têm de ser encriptados pela mesma chave, e tem de fornecer a chave com o pedido de composição. O objeto composto resultante é encriptado pela mesma chave.

  • Quando publica um objeto encriptado por uma chave de encriptação fornecida pelo cliente, o Cloud Storage ignora os metadados Cache-Control associados ao objeto e publica o objeto com Cache-Control definido como private, max-age=0.

Chaves de encriptação com APIs REST

Quando usa uma chave de encriptação fornecida pelo cliente e trabalha diretamente com a API JSON ou XML, tem de fornecer a chave AES-256 e um hash SHA256 da chave. Deve armazenar a chave AES-256 e o hash SHA256 da chave em segurança. O Cloud Storage armazena o hash SHA256 da sua chave nos metadados do objeto, onde pode obtê-lo mais tarde. Este hash SHA256 não pode ser usado pelo Cloud Storage (nem por mais ninguém) para desencriptar os seus dados. É armazenado como uma forma de identificar de forma exclusiva a chave AES-256 que foi usada para encriptar um objeto específico.

Cabeçalhos do pedido

Inclua os seguintes cabeçalhos HTTP no seu pedido JSON ou XML:

Nome do cabeçalho Valor Descrição
x-goog-encryption-algorithm de string O algoritmo de encriptação a usar. Tem de usar o valor AES256.
x-goog-encryption-key de string Uma string codificada em Base64 RFC 4648 da sua chave de encriptação AES-256.
x-goog-encryption-key-sha256 de string Uma string codificada em Base64 RFC 4648 do hash SHA256 da sua chave de encriptação.

Se estiver a realizar uma operação de reescrita com a API JSON, os cabeçalhos indicados acima são usados para encriptar o objeto de destino e os seguintes cabeçalhos são usados para desencriptar o objeto de origem:

Nome do cabeçalho Valor Descrição
x-goog-copy-source-encryption-algorithm de string O algoritmo de encriptação a usar. Tem de usar o valor AES256.
x-goog-copy-source-encryption-key de string Uma string codificada em Base64 da RFC 4648 da chave de encriptação AES-256 do objeto de origem.
x-goog-copy-source-encryption-key-sha256 de string Uma string codificada em Base64 RFC 4648 do hash SHA256 da chave de encriptação do objeto de origem.

Resposta

JSON

Quando usa a API JSON, os metadados de uma chave de encriptação fornecida pelo cliente são devolvidos no corpo da resposta, que inclui as seguintes propriedades:

Nome de propriedade Valor Descrição
customerEncryption objeto Informações sobre a encriptação usada para o pedido.
customerEncryption.encryptionAlgorithm de string O algoritmo de encriptação usado. Contém sempre o valor AES256.
customerEncryption.keySha256 de string Uma string codificada em Base64 RFC 4648 do hash SHA256 da sua chave de encriptação. Pode usar este hash SHA256 para identificar de forma exclusiva a chave de encriptação AES-256 necessária para desencriptar o objeto, que tem de armazenar em segurança.

XML

Quando usa a API XML, a resposta inclui os seguintes cabeçalhos:

Nome do cabeçalho Valor Descrição
x-goog-encryption-algorithm de string O algoritmo de encriptação usado. Contém sempre o valor AES256.
x-goog-encryption-key-sha256 de string Uma string codificada em Base64 RFC 4648 do hash SHA256 da sua chave de encriptação. Pode usar este hash SHA256 para identificar de forma exclusiva a chave de encriptação AES-256 necessária para desencriptar o objeto, que tem de armazenar em segurança.

Recebe um erro HTTP 400 nos seguintes casos:

  • Carrega um objeto através de uma chave de encriptação fornecida pelo cliente e tenta realizar outra operação no objeto (que não pedir ou atualizar a maioria dos metadados ou eliminar o objeto) sem fornecer a chave.
  • Carrega um objeto com uma chave de encriptação fornecida pelo cliente e tenta executar outra operação no objeto com uma chave incorreta.
  • Carrega um objeto sem fornecer uma chave de encriptação fornecida pelo cliente e tenta realizar outra operação no objeto com uma chave de encriptação fornecida pelo cliente.
  • Especifica um algoritmo de encriptação, uma chave ou um hash SHA256 que não é válido.

Chaves de encriptação com gcloud storage

A CLI do Google Cloud suporta a utilização de chaves de encriptação fornecidas pelos clientes. Quando usar a CLI gcloud com chaves de encriptação fornecidas pelos clientes, tenha em atenção o seguinte:

  • A chave especificada como chave de encriptação é usada em comandos como chave de encriptação e, quando necessário, como chave de desencriptação.

  • Opcionalmente, pode especificar até 100 chaves de desencriptação, que são usadas apenas para desencriptar objetos.

  • Ao desencriptar, é calculado o hash SHA256 de todas as chaves de encriptação e desencriptação fornecidas, e a chave correta a usar para um objeto específico é selecionada fazendo corresponder o hash SHA256 nos metadados do objeto.

  • Quando adiciona ou roda uma chave de encriptação fornecida pelo cliente para um objeto existente, o objeto é reescrito como parte do pedido. Isto é verdade mesmo para o comando gcloud storage objects update.

  • Os comandos de lista que podem devolver o hash MD5 ou CRC32C para objetos encriptados com uma chave fornecida pelo cliente fazem um pedido de metadados GET adicional para cada objeto desse tipo. Estes pedidos adicionais podem tornar a listagem substancialmente mais lenta do que a listagem de objetos encriptados com a encriptação padrão do Cloud Storage.

  • Em situações em que a chave de encriptação pode ou muda durante uma operação de escrita ou cópia parcialmente concluída, como quando volta a executar um carregamento após sair à força ou encontrar um limite de tempo da rede, a operação é reiniciada para garantir que o objeto de destino é escrito com a nova chave.cp

Rotação da chave de encriptação

Se um objeto estiver encriptado com uma chave de encriptação fornecida pelo cliente, pode rodar a chave do objeto reescrevendo o objeto. As reescritas são suportadas através da API JSON, mas não da API XML. Consulte o artigo Alterar uma chave de encriptação para ver exemplos de alteração de chaves.

O que se segue?