Chaves de criptografia fornecidas pelo cliente

Configuração

Nesta página, abordaremos as chaves de criptografia fornecidas pelo cliente. Para outras opções de criptografia de dados, acesse este link.

Visão geral

Como uma camada adicional na criptografia padrão do Cloud Storage, é possível fornecer sua própria chave de criptografia AES-256, codificada em Base64 padrão. Ela é conhecida como uma chave de criptografia fornecida pelo cliente. Quando você fornece uma chave de criptografia fornecida pelo cliente, o Cloud Storage não armazena permanentemente a chave nos servidores dele nem gerencia sua chave.

Em vez disso, você fornece uma chave para cada operação do Cloud Storage, e ela é removida dos servidores do Cloud Storage após a conclusão da operação. O Cloud Storage armazena apenas um hash de criptografia da chave para que as solicitações futuras possam ser validadas em relação ao hash. Sua chave não pode ser recuperada desse hash e ele não pode ser usado para descriptografar seus dados.

Recomendamos fazer backup de cada chave em um local seguro e tomar precauções para garantir que elas não sejam compartilhadas com terceiros não confiáveis. Se qualquer arquivo ou máquina que contenha sua chave de criptografia for comprometido, faça a rotação de chaves imediatamente para todos os objetos criptografados com a chave comprometida.

Quando a chave é usada?

Ao aplicar uma chave de criptografia fornecida pelo cliente a um objeto, ela é usada pelo Cloud Storage para criptografar:

  • os dados do objeto;
  • a soma de verificação CRC32C do objeto;
  • O hash MD5 do objeto.

A criptografia padrão do Cloud Storage é usada para criptografar os metadata restantes do objeto, incluindo o nome. Desse modo, é possível ler e atualizar metadados gerais, além de listar, substituir e excluir objetos sem precisar da chave de criptografia fornecida pelo cliente. No entanto, você precisa ter permissões suficientes para executar essas ações.

Por exemplo, se um objeto for criptografado com uma chave de criptografia fornecida pelo cliente, a chave deverá ser usada para executar operações no objeto, como downloads ou transferências. Se você tentar ler os metadados do objeto sem fornecer a chave, receberá metadados como o nome do objeto e o Content-Type, mas não a soma de verificação CRC32C ou hash MD5 do objeto. Se você fornecer sua chave com a solicitação de metadados do objeto, a soma de verificação CRC32C e o hash MD5 dele serão incluídos na resposta.

Reescrever o comportamento

Se você rewrite um objeto criptografado com uma chave fornecida pelo cliente sem fornecer uma chave para criptografar o objeto reescrito, acontece o seguinte:

Verificação de HTTPS

Para proteger seus dados no tráfego pela Internet durante as operações de leitura e gravação, use o protocolo Transport Layer Security, normalmente conhecido como TLS ou HTTPS. O TLS é necessário ao fornecer uma chave de criptografia. Se você usar sua chave de criptografia acidentalmente em uma conexão não criptografada (HTTP), um invasor poderá interceptar sua chave. Devido a essa possibilidade, a Cloud Storage API retorna uma mensagem de erro avisando que sua chave pode estar comprometida. Se isso ocorrer, troque suas chaves imediatamente.

Restrições

As restrições a seguir se aplicam ao usar chaves de criptografia fornecidas pelo cliente:

  • Não é possível usar o Console do Google Cloud para fazer o download de objetos criptografados com uma chave fornecida pelo cliente. Da mesma forma, quando você usa o Console do Google Cloud para fazer o upload de um objeto, não é possível criptografá-lo com uma chave fornecida pelo cliente.

  • O Serviço de transferência do Cloud Storage e o Cloud Dataflow não são compatíveis com objetos criptografados com chaves de criptografia fornecidas pelo cliente.

  • Você só pode definir chaves de criptografia fornecidas pelo cliente em objetos individuais. Não é possível definir uma chave de criptografia padrão fornecida pelo cliente para um bucket.

  • Se você estiver realizando uma compose operação nos objetos criptografados pela chave de criptografia fornecida pelo cliente, os objetos do componente precisam ser criptografados pela mesma chave, e você precisa fornecer a chave com a solicitação de escrita. O objeto composto resultante é criptografado pela mesma chave.

  • Ao exibir um objeto criptografado por uma chave de criptografia fornecida pelo cliente, o Cloud Storage ignora Cache-Control metadados associados ao objeto e exibe o objeto comCache-Control Defina comoprivate, max-age=0 (em inglês).

Chaves de criptografia com APIs REST

Quando você usa uma chave de criptografia fornecida pelo cliente e trabalha diretamente com a API JSON ou XML, precisa fornecer a chave AES-256 e um hash SHA256 da chave. Armazene a chave AES-256 e o hash SHA256 da chave com segurança. O Cloud Storage armazena o hash SHA256 da sua chave nos metadados do objeto, de onde é possível recuperá-lo mais tarde. Esse hash SHA256 não pode ser usado pelo Cloud Storage (nem por qualquer outra pessoa) para descriptografar seus dados. Ele é armazenado como um modo de identificar de maneira exclusiva a chave AES-256 que foi usada para criptografar um objeto específico.

Cabeçalhos de solicitação

Inclua os seguintes cabeçalhos HTTP em sua solicitação JSON ou XML:

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

Se você estiver executando uma operação de rewrite com a JSON API, os cabeçalhos listados acima serão usados para criptografar o objeto de destino. Os cabeçalhos a seguir serão usados para descriptografar o objeto de origem:

Nome do cabeçalho Valor Descrição
x-goog-copy-source-encryption-algorithm string O algoritmo de criptografia a ser usado. Use o valor AES256.
x-goog-copy-source-encryption-key string Uma string RFC 4648 codificada por Base64 da sua chave de criptografia AES-256 do objeto de origem.
x-goog-copy-source-encryption-key-sha256 string Uma string RFC 4648 codificada por Base64 do hash SHA256 da sua chave de criptografia do objeto de origem.

Resposta

JSON

Ao usar a JSON API, os metadados de uma chave de criptografia fornecida pelo cliente são retornados no corpo da resposta, que inclui as seguintes propriedades:

Nome da propriedade Valor Descrição
customerEncryption objeto Informações sobre a criptografia usada para a solicitação.
customerEncryption.encryptionAlgorithm string O algoritmo de criptografia usado. Sempre contém o valor AES256.
customerEncryption.keySha256 string Uma string RFC 4648 codificada por Base64 do hash SHA256 da sua chave de criptografia. Você pode usar esse hash SHA256 para identificar de maneira exclusiva a chave de criptografia AES-256 necessária para descriptografar o objeto, que precisa ser armazenado com segurança.

XML

Ao usar a XML API, a resposta inclui os seguintes cabeçalhos:

Nome do cabeçalho Valor Descrição
x-goog-encryption-algorithm string O algoritmo de criptografia usado. Sempre contém o valor AES256.
x-goog-encryption-key-sha256 string Uma string RFC 4648 codificada por Base64 do hash SHA256 da sua chave de criptografia. Você pode usar esse hash SHA256 para identificar de maneira exclusiva a chave de criptografia AES-256 necessária para descriptografar o objeto, que precisa ser armazenado com segurança.

Você recebe um erro HTTP 400 nos seguintes casos:

  • Você faz upload de um objeto usando uma chave de criptografia fornecida pelo cliente e tenta executar outra operação no objeto, além de solicitar ou atualizar a maioria dos metadados ou excluir o objeto, sem fornecer a chave.
  • Você faz upload de um objeto usando uma chave de criptografia fornecida pelo cliente e tenta executar outra operação no objeto com uma chave incorreta.
  • Você faz upload de um objeto sem fornecer uma chave de criptografia fornecida pelo cliente e tenta executar outra operação no objeto com uma chave de criptografia fornecida pelo cliente.
  • Você especifica um algoritmo de criptografia, chave ou hash SHA256 inválidos.

Chaves de criptografia com gcloud storage

A CLI do Google Cloud permite o uso de chaves de criptografia fornecidas pelo cliente. Ao usar a CLI gcloud com chaves de criptografia fornecidas pelo cliente, lembre-se do seguinte:

  • a chave especificada como chave de criptografia é usada em comandos como uma chave de criptografia e, quando necessário, como uma chave de descriptografia.

  • Se quiser, especifique até 100 chaves de descriptografia, que são usadas apenas para descriptografar objetos.

  • Ao descriptografar, o hash SHA256 de qualquer chave de criptografia e descriptografia fornecida é calculado, e a chave correta a ser usada para um objeto específico é selecionada pela correspondência do hash SHA256 nos metadados do objeto.

  • Ao adicionar ou rotacionar uma chave de criptografia fornecida pelo cliente para um objeto atual, o objeto é reescrito como parte da solicitação. Isso é válido mesmo para o comando gcloud storage objects update.

  • Os comandos de lista que podem retornar o hash MD5 ou CRC32C para objetos criptografados com uma chave fornecida pelo cliente executam uma solicitação GET de metadados adicional para cada um desses objetos. Essas solicitações adicionais podem tornar a listagem significativamente mais lenta do que a listagem de objetos criptografados com a criptografia padrão do Cloud Storage.

  • Em situações em que a chave de criptografia pode ou não ser alterada durante uma operação de gravação ou cópia parcialmente concluída, como quando você executa novamente um upload de cp após forçar a saída ou encontrar um tempo limite de rede, a operação reinicia para garantir que o objeto de destino seja gravado com a nova chave.

Rotação de chave de criptografia

Se um objeto for criptografado usando uma chave de criptografia fornecida pelo cliente, você poderá girar a chave regravando o objeto. As regravações são compatíveis com a API JSON, mas não com a API XML. Consulte Como fazer a rotação de uma chave de criptografia para ver exemplos de rotação de chaves.

A seguir