1.キー管理について
Snowflakeでは階層構造のキー管理を行なっております。
マネージドサービスのため、ユーザーが直接意識しておくことではないですが、
最低限、開発者側はどのような設計でSnowflakeが暗号化されているかはクライアント側から説明を求められた場合などで、理解しておいた方が良いかと思います。
上図のファイルキーが仮に、漏洩してしまった場合でも、
階層構造で管理している以上、他のファイルを参照されることはありません。
逆に言えば、ルートキーが漏洩してしまった場合は、大きなセキュリティインシデントになります。
ルートキーについては、AWSをプロバイダーとして設定している場合は、
Cloud HSMというものを使用して、キー管理を行なっております。
KMSなど、他のキー管理サービスなどはありますが、より厳格に管理を行いたい場合などは、
HSMを選定するというのが一般的です。
そもそもHSMというものは、
ハードウェアセキュリティモジュールの役割であり、
鍵を守るためだけの専用のハードウェアで管理されているものになります。
詳しくは以下のリンクから詳しく知ることができます。
2. E2EE Encryption
エンドツーエンドエンクリプションの略語であり、Snowflake内部の暗号化は
マネージドサービスであるので、直接意識する必要はありませんが、
クライアントマシンからSnowflakeの内部ステージなどにデータ転送する場合や
クライアントマシンから自身のデータレイク(S3など)を外部ステージなどにする場合、
当然ですが、データ転送する上では、その転送自体にもどのように暗号化されているのかは理解しておく必要があります。
全体を通して、データを暗号化させるという意味で
E2EEという考え方があります。
外部ステージなどにする場合
開発側で、暗号化オプションを選択することができます。
内部ステージなどにクライアントマシンからPUTを行う場合、
Snowflake内部で自動的に暗号化されます。
-- 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...=');