Azure SQL Database の暗号化

SQLデータベースを暗号化する機能についてご紹介致します。二種類の暗号化方法がありますので、比較しながら見ていきましょう。


Transparent Data Encryption (TDE)

【特徴】
SQLデータベースを暗号化する機能 ※SQL Server 2008 導入
ディスクに書き込まれる前に暗号化され、メモリ上に展開されるタイミングで複合化される。
暗号化、複合化は SQL Server 自体が実施するため、アプリケーション側は一切意識する必要が無い。
※暗号化すると圧縮率(バックアップなど)が非常に悪くなります。
直接HDDからデータを複製された場合のみ保護される。

暗号化範囲:データベース単位
暗号化テクノロジー:AES256 , 3DES
暗号化キーの管理:Microsoft
※SQL(IaaS) の場合、鍵の管理もユーザーが行うので、KeyVaultを利用できます。

【サポート対象】
Azure SQL Database、Azure SQL Data Warehouse、SQL Server(2008以降)

【しくみ】

sql020
①Data Protection API (DPAPI):Windows2000以降からOSに組み込まれている暗号化機能。サービスマスターキーを暗号化する。
②サービスマスターキー:SQLサーバー構築時に自動で作成される。データベースマスターキーを暗号化する。
③データベースマスターキー:証明書を作成する。マスターシステムデータベースに格納。
④証明書:データベース暗号化キーを暗号化する。マスターシステムデータベースに格納。
⑤データベース暗号化キー:ユーザーデータベースを暗号化する。ユーザーデータベースに格納。
※Azure SQL Database版 TDE は、これらの処理を自動で行ないます。

【暗号化手順】

(SQL データベース)ー[Transparent Data Encrytion]ー[オン]を選択

sql019


Always Encrypted

【特徴】
SQLデータベースを暗号化する機能 ※SQL Server 2016 導入
SQLクライアント側にて暗号化/復号化を実施
※暗号化すると、SSMSからは参照しかできなくなります。

暗号化範囲:列(カラム)単位
暗号化テクノロジー:AES256(CEK) , RSA(CMK)
暗号化キーの管理:ユーザー (Azure Key Vault)
※暗号化対象となる、SQLと同一リージョンであること

【サポート対象】
Azure SQL Database、SQL Server(2016以降)

【しくみ】

sql036

[暗号化]
[SSMS]は[CMK]を作成し[UserID]を使い[KeyVault]に格納。[CMK]より[CEK]を生成し暗号化を実施。[CEK]はDBに格納。

[復号化]
・[SSMS]は[UserID]を使い[KeyVault]から[CMK]、[CEK]を取得し復号化する。
・[SQL Client]は[AzureAD App]を使い[KeyVault]から[CMK]、[CEK]を取得し復号化する。

【暗号化手順】
全体の流れ

Step1:「認証用アプリケーション」の作成 ※詳細はこちら
Step2:「Key Vault」の作成 ※手順省略
Step3:「常に暗号化」の実行

SQL Databaseを作成し、SSMS (SQL Server Management Studio)にて接続します。

sql021

テスト用に数字が並んだだけの、簡単なテーブルを作成します。

sql022

SSMSで作成した[テーブルを選択]右クリックー[列の暗号化]を選択※今回は[c1]列のみ暗号化
暗号化の種類
決定論的:同じ文字列からは、同じ暗号値を生成する
ランダム化:同じ文字列でも、違う暗号値を生成する

sql023

「Key Vault」にアクセスできるユーザー(アクセスポリシー登録済み)を指定する。

sql024

sql025

sql026

sql027

これで暗号化完了です!!


テーブルを確認してみましょう。

[c1]列のみ暗号化されているのがわかります。

sql028

復号化して表示したい場合、SSMSで[Column Encryption Setting=enabled]を追記

sql032

すると、復号化した状態で表示できます。

sql033

めでたし、めでたし!


このままでは、終われません。鍵の格納場所が気になります!!

CMK、CEKを確認しましょう!

マスターキー[CMK_Auto1]、暗号化キー[CEK_Auto1]が作成されています。

sql029

暗号化キーはデータベース内に格納されています。

sql030

マスターキーは「Key Vault」に格納されているのが確認できます。

sql031

ポータルから「Key Vault」を見ると、マスターキーが確認できます。

sql034