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ê reescrever um objeto criptografado com uma chave fornecida pelo cliente sem fornecer uma chave para criptografar o objeto reescrito, acontece o seguinte:
Se você incluir uma chave de descriptografia apropriada na solicitação, o objeto reescrito será criptografado usando a chave de criptografia padrão do Cloud Key Management Service do bucket de destino ou, na ausência de uma chave como essa, a criptografia padrão do Cloud Storage.
Se você não incluir uma chave de descriptografia apropriada na solicitação, receberá um erro.
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 regravação 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.