Explicação da criptografia de ponta a ponta no Snowflake

Este tópico fornece conceitos relacionados à criptografia de ponta a ponta no Snowflake.

Neste tópico:

Visão geral

A criptografia de ponta a ponta (E2EE) é um método para proteger os dados que impede que terceiros leiam os dados em repouso ou em trânsito para e do Snowflake e para minimizar a superfície de ataque.

A figura ilustra o sistema E2EE no Snowflake:

E2EE in Snowflake

O sistema E2EE inclui os seguintes componentes:

  • O cliente Snowflake em uma rede corporativa.

  • Uma área de preparação de arquivos de dados fornecida pelo cliente ou pelo Snowflake.

  • O Snowflake é executado em uma nuvem privada virtual segura (VPC) ou rede virtual (VNet), dependendo da plataforma de nuvem.

O Snowflake suporta tanto os estágios internos (fornecidos pelo Snowflake) quanto externos (fornecidos pelo cliente) para arquivos de dados. O Snowflake fornece estágios internos onde você pode carregar e agrupar seus arquivos de dados antes de carregar os dados em tabelas (imagem B).

Os estágios fornecidos pelo cliente são contêineres ou diretórios em um serviço de armazenamento em nuvem com suporte (por exemplo, Amazon S3) que você controla e gerencia (imagem A). Os estágios fornecidos pelo cliente são uma opção atraente para os clientes que já têm dados armazenados em um serviço de armazenamento em nuvem que desejam copiar para o Snowflake.

Conforme mostra a figura desta seção, o fluxo de E2EE no Snowflake é o seguinte:

  1. Um usuário carrega um ou mais arquivos de dados em um estágio.

    Se o estágio for externo (imagem A), o usuário pode opcionalmente criptografar os arquivos de dados usando a criptografia do lado do cliente (consulte Criptografia do lado do cliente para mais informações). Recomendamos a criptografia do lado do cliente para arquivos de dados em estágios externos; mas se os dados não forem criptografados, o Snowflake criptografa imediatamente os dados quando são carregados em uma tabela.

    Se o estágio for interno (ou seja, Snowflake) (imagem B), os arquivos de dados são automaticamente criptografados pelo cliente Snowflake na máquina local do usuário antes de serem transmitidos para o estágio interno, além de serem criptografados após serem carregados no estágio.

  2. O usuário carrega os dados do estágio em uma tabela.

    Os dados são transformados para o formato de arquivo proprietário do Snowflake e armazenados em um contêiner de armazenamento em nuvem. No Snowflake, todos os dados em repouso são sempre criptografados e usam TLS em trânsito. O Snowflake também descriptografa os dados quando eles são transformados ou operados em uma tabela e, em seguida, criptografa os dados novamente quando as transformações e operações estão completas.

  3. O usuário pode descarregar os resultados da consulta em um estágio externo ou interno.

    Os resultados são opcionalmente criptografados usando criptografia do lado do cliente quando descarregados em um estágio administrado pelo cliente, e são automaticamente criptografados quando descarregados em um estágio fornecido pelo Snowflake.

  4. O usuário baixa arquivos de dados do estágio e descriptografa os dados no lado do cliente.

Criptografia do lado do cliente

A criptografia do lado do cliente significa que um cliente criptografa os dados antes de copiá-los para uma área de preparação do armazenamento em nuvem. A criptografia do lado do cliente fornece um sistema seguro para o gerenciamento de dados no armazenamento em nuvem.

A criptografia do lado do cliente segue um protocolo específico definido pelo serviço de armazenamento em nuvem. O serviço SDK e ferramentas de terceiros implementam este protocolo.

A imagem a seguir resume a criptografia do lado do cliente:

Uploading data to cloud storage using client-side encryption

O protocolo de criptografia do lado do cliente funciona da seguinte forma:

  1. O cliente cria uma chave mestra secreta, que é compartilhada com o Snowflake.

  2. O cliente, que é fornecido pelo serviço de armazenamento em nuvem, gera uma chave de criptografia aleatória e criptografa o arquivo antes de carregá-lo no armazenamento em nuvem. A chave de criptografia aleatória, por sua vez, é criptografada com a chave mestra do cliente.

  3. Tanto o arquivo criptografado quanto a chave aleatória criptografada são carregados no serviço de armazenamento em nuvem. A chave aleatória criptografada é armazenada com os metadados do arquivo.

Ao baixar os dados, o cliente baixa tanto o arquivo criptografado quanto a chave aleatória criptografada. O cliente descriptografa a chave aleatória criptografada usando a chave mestra do cliente.

Em seguida, o cliente descriptografa o arquivo criptografado usando a chave aleatória agora descriptografada. Esta criptografia e decodificação acontece do lado do cliente.

Em nenhum momento o serviço de armazenamento em nuvem ou qualquer outro terceiro (como um ISP) vê os dados claramente. Os clientes podem carregar dados criptografados do lado do cliente usando qualquer cliente ou ferramenta que suporte criptografia do lado do cliente.

Ingestão de dados criptografados do lado do cliente no Snowflake

O Snowflake suporta o protocolo de criptografia do lado do cliente usando uma chave mestra do lado do cliente ao ler ou gravar dados entre um estágio do serviço de armazenamento em nuvem e o Snowflake, como mostrado na imagem a seguir:

Ingesting client-Side encrypted data into Snowflake

Para carregar dados criptografados do lado do cliente de um estágio fornecido pelo cliente, cria-se um objeto de preparação nomeado com um parâmetro MASTER_KEY adicional usando um comando CREATE STAGE, e depois carregam-se os dados do estágio em suas tabelas Snowflake. O parâmetro MASTER_KEY requer uma chave Advanced Encryption Standard (AES) de 128 bits ou de 256 bits codificada em Base64.

Um objeto de preparação nomeado armazena configurações relacionadas a um estágio e fornece uma maneira conveniente de carregar ou descarregar dados entre o Snowflake e um contêiner específico em armazenamento em nuvem. O seguinte snippet SQL cria um exemplo de objeto de preparação da Amazon S3 no Snowflake que suporta criptografia do lado do cliente:

-- create encrypted stage
create stage encrypted_customer_stage
url='s3://customer-bucket/data/'
credentials=(AWS_KEY_ID='ABCDEFGH' AWS_SECRET_KEY='12345678')
encryption=(MASTER_KEY='eSxX...=');
Copy

A chave mestra truncada especificada neste comando SQL é a cadeia de caracteres codificada Base64 da chave mestra secreta do cliente. Como em todas as outras credenciais, esta chave mestra é transmitida sobre a camada de segurança de transporte (HTTPS) ao Snowflake e é armazenada criptografada no armazenamento de metadados. Somente o cliente e os componentes de processamento de consultas do Snowflake são expostos à chave mestra.

Um benefício dos objetos de preparação nomeado é que podem ser concedidos a outros usuários dentro de uma conta Snowflake sem revelar credenciais de acesso ou chaves de criptografia do lado do cliente a esses usuários. Os usuários com os privilégios de controle de acesso apropriados simplesmente referenciam o objeto de preparação nomeado ao carregar ou descarregar dados.

Os seguintes comandos SQL criam uma tabela chamada users e copiam os dados do estágio criptografado para a tabela users:

-- create table and ingest data from stage
CREATE TABLE users (id bigint, name varchar(500), purchases int);
COPY INTO users FROM @encrypted_customer_stage/users;
Copy

Os dados agora estão prontos para serem analisados usando o Snowflake.

Você também pode descarregar os dados no estágio. O seguinte comando SQL cria uma tabela most_purchases e a preenche com os resultados de uma consulta que encontra os 10 principais usuários com mais compras e depois descarrega os dados da tabela no estágio:

-- find top 10 users by purchases, unload into stage
CREATE TABLE most_purchases as select * FROM users ORDER BY purchases desc LIMIT 10;
COPY INTO @encrypted_customer_stage/most_purchases FROM most_purchases;
Copy

O Snowflake codifica os arquivos de dados copiados para o estágio do cliente usando a chave mestra armazenada no objeto do estágio. O Snowflake adere ao protocolo de criptografia do lado do cliente para o serviço de armazenamento em nuvem. Um cliente pode baixar os arquivos de dados criptografados usando qualquer cliente ou ferramenta que suporte a criptografia do lado do cliente.

Próximos tópicos: