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:
Se incluir uma chave de desencriptação adequada no pedido, o objeto reescrito é encriptado através da chave de encriptação predefinida do Cloud Key Management Service do contentor de destino ou, na ausência de tal chave, através da encriptação padrão do Cloud Storage.
Se não incluir uma chave de desencriptação adequada no seu pedido, recebe um erro.
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 comCache-Control
definido comoprivate, 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.