Snowflakeのエンドツーエンド暗号化を理解する

このトピックでは、Snowflakeのエンドツーエンド暗号化に関連する概念を提供します。

このトピックの内容:

概要

エンドツーエンド暗号化(E2EE)は、データを保護する方法であり、保存データまたはSnowflakeとの間で転送中のデータを第三者が読み取ることを防ぎ、攻撃対象領域を最小限に抑えます。

この図は、Snowflakeの E2EE システムを示しています。

E2EE in Snowflake

E2EE システムには次のコンポーネントが含まれます。

  • 企業ネットワーク内のSnowflakeの顧客

  • 顧客提供またはSnowflake提供のデータファイルステージング領域。

  • Snowflakeは、クラウドプラットフォームに応じて、安全な仮想プライベートクラウド(VPC)または仮想ネットワーク(VNet)で実行されます。

Snowflakeは、データファイルの内部(Snowflakeが提供)ステージと外部(顧客が提供)ステージの両方をサポートしています。Snowflakeには、データをテーブルにロードする前にデータファイルをアップロードおよびグループ化できる内部ステージが用意されています(画像B)。

顧客が提供するステージは、サポートされているクラウドストレージサービス(例: Amazon S3)のコンテナーまたはディレクトリであり、ユーザーが制御および管理します(画像A)。顧客が提供するステージは、Snowflakeにコピーするデータがクラウドストレージサービスに既に保存されている顧客にとって、魅力的なオプションです。

Snowflakeでの E2EE のフローは次のとおりです。

  1. ユーザーが1つ以上のデータファイルをステージにアップロードします。

    ステージが外部ストレージ(画像A)の場合、ユーザーはオプションでクライアント側の暗号化を使用してデータファイルを暗号化できます(詳細については、 クライアント側の暗号化 をご参照ください)。外部ステージのデータファイルには、クライアント側の暗号化をお勧めします。ただし、データが暗号化されていない場合、Snowflakeはテーブルにロードされるとすぐにデータを暗号化します。

    ステージが内部(つまり、Snowflake)ステージ(画像B)の場合、データファイルは、ステージにロードされた後に暗号化されるとともに、内部ステージに送信される前に、ユーザーのローカルマシン上でSnowflakeクライアントにより自動的に暗号化されます。

  2. ユーザーは、ステージからテーブルにデータをロードします。

    データは、Snowflake独自のファイル形式に変換され、クラウドストレージコンテナーに保存されます。Snowflakeでは、すべての保存データは常に暗号化され、転送中は TLS で暗号化されます。Snowflakeは、データがテーブルで変換または操作されたときにデータを復号化し、変換と操作が完了したときにデータを再暗号化します。

  3. ユーザーは、クエリ結果を外部ステージまたは内部ステージにアンロードできます。

    結果は、顧客が管理するステージにアンロードするときにクライアント側の暗号化を使用してオプションで暗号化され、Snowflakeが提供するステージにアンロードするときに自動的に暗号化されます。

  4. ユーザーはステージからデータファイルをダウンロードし、クライアント側でデータを復号化します。

クライアント側の暗号化

クライアント側の暗号化とは、ユーザーが保存されたデータをSnowflakeにロードする前に暗号化することを意味します。クライアント側の暗号化によって、クラウドストレージ内のデータを管理するための安全なシステムを提供します。

クライアント側の暗号化は、クラウドストレージサービスによって定義された特定のプロトコルに従います。サービス SDK およびサードパーティツールは、このプロトコルを実装しています。

次の画像は、クライアント側の暗号化をまとめたものです。

Uploading data to cloud storage using client-side encryption

クライアント側の暗号化プロトコルは次のように機能します。

  1. 顧客は、Snowflakeと共有される秘密のマスターキーを作成します。

  2. クラウドストレージサービスによって提供されるクライアントは、ランダムな暗号化キーを生成し、クラウドストレージにアップロードする前にファイルを暗号化します。ランダム暗号化キーは、順次、顧客のマスターキーで暗号化されます。

  3. 暗号化されたファイルと暗号化されたランダムキーの両方が、クラウドストレージサービスにアップロードされます。暗号化されたランダムキーは、ファイルのメタデータとともに格納されます。

データをダウンロードするとき、クライアントは暗号化されたファイルと暗号化されたランダムキーの両方をダウンロードします。クライアントは、顧客のマスターキーを使用して暗号化されたランダムキーを復号化します。

次に、クライアントは、現在復号化されているランダムキーを使用して、暗号化されたファイルを復号化します。この暗号化と復号化はクライアント側で行われます。

クラウドストレージサービスや他の第三者(ISP など)が暗号化されていないデータを見ることはありません。顧客は、クライアント側の暗号化をサポートするクライアントまたはツールを使用して、クライアント側の暗号化されたデータをアップロードできます。

クライアント側で暗号化されたデータのSnowflakeへの取り込み

次の画像で示されているように、Snowflakeは、クラウドストレージサービスステージとSnowflakeの間でデータを読み書きする際に、クライアント側のマスターキーを使用してクライアント側の暗号化プロトコルをサポートします。

Ingesting client-Side encrypted data into Snowflake

顧客提供のステージからクライアント側の暗号化されたデータをロードするには、 CREATE STAGE コマンドを使用して追加の MASTER_KEY パラメーターで名前付きステージオブジェクトを作成し、ステージからSnowflakeテーブルにデータをロードします。 MASTER_KEY パラメーターには、Base64でエンコードされた256ビットAdvanced Encryption Standard(AES)キーが必要です。

名前付きステージオブジェクトは、ステージに関連する設定を保存し、Snowflakeとクラウドストレージ内にある特定のコンテナーの間でデータをロードまたはアンロードする便利な方法を提供します。次の SQL スニペットは、クライアント側の暗号化をサポートするSnowflakeのサンプルAmazon S3ステージオブジェクトを作成します。

-- 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='eSxX0jzYfIamtnBKOEOxq80Au6NbSgPH5r4BDDwOaO8=');

この SQL コマンドで指定されたマスターキーは、顧客の秘密マスターキーのBase64エンコードされた文字列です。他のすべての認証情報と同様に、このマスターキーはトランスポート層セキュリティ(HTTPS)を介してSnowflakeに送信され、暗号化されてメタデータストレージに保存されます。Snowflakeの顧客とクエリ処理コンポーネントのみがマスターキーに公開されます。

名前付きステージオブジェクトの利点は、アクセス認証情報またはクライアント側の暗号化キーをユーザーに公開することなく、Snowflakeアカウント内の他のユーザーに付与できることです。適切なアクセス制御権限のあるユーザーは、データのロードまたはアンロード時に名前付きステージオブジェクトを参照するだけです。

次の SQL コマンドは、 users という名前のテーブルを作成し、暗号化されたステージから 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;

これで、Snowflakeを使用してデータを分析する準備が整いました。

ステージにデータをアンロードすることもできます。次の SQL コマンドは、 most_purchases テーブルを作成し、最も購入数の多い上位10ユーザーを検索するクエリの結果を設定して、テーブルデータをステージにアンロードします。

-- 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;

Snowflakeは、ステージオブジェクトに保存されているマスターキーを使用して、顧客のステージにコピーされたデータファイルを暗号化します。Snowflakeは、クラウドストレージサービスのクライアント側の暗号化プロトコルを順守しています。顧客は、クライアント側の暗号化をサポートするクライアントまたはツールを使用して、暗号化されたデータファイルをダウンロードできます。

次のトピック:

最上部に戻る