Snowflakeのデータ保護(暗号化)についてお勉強してみた #SnowflakeDB

データの保護はスノフレ任せで万事オッケー
2020.01.28

大阪オフィスの玉井です。

Snowflakeは全データをデフォルトで暗号化する仕様となっています(追加費用等は不要)。つまり、Snowflakeのユーザーは、データの保護について神経質になること無く利用することができます。

今回はSnowflakeが実行する暗号化について見ていきたいと思います。

Snowflakeの暗号化の特徴と付随する機能

Snowflake内の全てのデータは暗号化される

Snowflake内に入れたデータは、追加の費用を一切払うことなく、全て暗号化されます。また、利用しているエディションも関係ありません。一番安いエディションでも暗号化の恩恵を受けられます。

エンドツーエンド暗号化

エンドツーエンド暗号化(E2EE)は、エンドユーザー以外はデータを読み取ることができない通信形式です。Snowflakeはこちらを採用しており、ユーザーとSnowflake(のランタイムコンポーネント)の2者だけしかデータを読み取ることができない…という仕様になっています。何が良いかというと、仮にSnowflakeが動いているプラットフォーム(AWSなど)が攻撃されてデータを取られても、この暗号化により、データ自体は保護されるというメリットがあります。

Snowflakeにデータをロードする方法は色々あります。

基本的に、「Snowflake側」に行った時点でデータは暗号化されます。例えば内部ステージにファイルを配置した場合は、配置した時点でデータが暗号化されます。逆に、例えば外部ステージ(Amazon S3など)を利用する場合、S3はSnowflakeのサービスではないため、データについては、ユーザーが自身で管理する責任が生じます。ただ、外部ステージからSnowflakeにデータをロードした場合は、その時点でデータは暗号化されます。

Data Encryption — Snowflake Documentationより

CloudHSMを使った階層型キーモデル

階層型キーモデル

Snowflakeは暗号鍵を階層的に管理します。この階層内では、親キーはそのすべての子キーを暗号化します。キーが別のキーを暗号化することを「wrapping」と呼びます。キーが再び復号化されることを「unwrapping」と呼びます。

この階層キーモデルには、AWS CloudHSMが使われています。CloudHSMの詳細は下記エントリをご覧ください。

Data Encryption — Snowflake Documentationより

最上位のルートキーは、AWS CloudHSMに格納されています。ルートキーは、アカウントのマスターキーを暗号化します。アカウントマスタキーは、Snowflakeの各顧客アカウントに対応します。次に、アカウントマスターキーは、テーブルマスターキー等を含むすべてのデータレベルキーを暗号化します。さらに、各データファイルは個別のキーで暗号化されます。

この仕組により、各キーが保護するデータ量と使用期限を最小限に留めています。

自動キーローテーション

キーには2つの状態があります。「Active」は暗号化に使用されるキーで、そのオブジェクトのオリジネイター(創始者)しか使用できません。「Retired」は復号化のみに使用されるキーで、そのオブジェクトの受領者しか使用できません。

アカウントとテーブルのマスターキーは、30日以上経過すると、Snowflake側で自動的にローテーションされます(ActiveなキーはRetiredとなり、新しいキーが作成され、それがActiveとなる)。

Data Encryption — Snowflake Documentationより

定期的なキーローテーションにより、キーの有効期間を最小限に留めています。キーの有効期間を制限することはアメリカ国立標準技術研究所(NIST)によって推奨されており、Snowflakeは、これを実現しています。

定期的なキーの再生成

Snowflakeには新しいキーを使用してデータを再暗号化する機能があります。特定の時間間隔(1年)が経過すると、(現在Retiredの)キーで暗号化されていたデータが、その新しいキーで再暗号化されます。

注意点として、この機能に関してはEnterpriseエディション以上でないと使用できません。また、この機能に関してはクエリを用いて有効無効を切り替えることができます。

この機能で、キーの有効期限をさらに狭めることができるため、よりセキュリティが向上します。

キーのローテーションと再生成はSnowflakeが裏側で自動でやってくれるため、ユーザーは意識する必要はありません。また、動作中にダウンタイムが発生することもありません。

Tri-Secret Secure

Business Criticalエディション以上でのみ提供される機能です。申し込むには別途Snowflake社に連絡する必要があります。

Snowflakeアカウントをホストするクラウドプロバイダーのキー管理サービスで管理するマスター暗号化キーを使用して、データへのアクセスを制御することができます。AWSの場合はAWS KMSが使われます。

KMSは、暗号化キーを保存し、それらへのアクセスを厳密に制御するサービスです。KMSの詳細は下記をご覧ください。

この機能を使うことで、Snowflake全体のデータを制御し、必要に応じて(攻撃を受けた時など)一切のデータ操作を無効にすることができます。また、暗号化に使うキーはユーザー側が管理することになるため、Snowflake社すら、ユーザーの同意なしにデータを復号化することができなくなります。

おわりに

機能によってはエディションの制限があるものの、暗号化自体についてはエディション関係無く、全Snowflakeユーザーが対象です。つまり、Snowflakeにデータを入れた時点で、ここで紹介したレベルのセキュリティが担保されることになります。エンジニアが別途運用作業を行う必要がないため、ユーザーはデータ分析そのものに集中することができます。

参考資料