この記事はなむゆの個人ブログにマルチポストしています。
はじめに
こんにちは、相変わらずDP-300受験のためあれこれ調べたり試したりしているなむゆです。
今回もその学習中に見つけたAzure Sql Databaseのセキュリティ系の機能で一席打ちたいと思います。
TDE(透過的なデータ暗号化)とは
TDEとはTransparent Data Encryptionの略で、データベースのデータを暗号化して保護する機能です。
例えば、データベースにINSERT文でデータを挿入するときに、ディスクに書き込みしようとしたタイミングでそのデータを暗号化して保存します。一方で、そのデータを取り出そうとしたときはメモリに読みだされるタイミングで暗号化を解除します。
暗号化と暗号化の解除には暗号化キーと呼ばれるものが必要で、特に自前のサーバーにあるSQL ServerにTDEを設定するときには暗号化キーを作成し、それをSQL Serverの暗号化キーとして設定してやる必要があります。
ちなみに、SQL Databaseでは2017年以降この機能がデフォルトで設定されており、新しくリソースを作る際にTDEを設定するために新しく何かを追加で設定する必要はありません。

しかし、例えばもしデータベースの暗号化に自前の鍵を使いたーい!となった場合にはそのような設定を加えることもできます。
次のパートではその方法を見ていきます。
Key Vaultにキーを保存してそのキーを使用してTDEを設定する
こちらに用意しましたのは前回の記事で作成したSQL Databaseです。
こちらには前回の記事で作成したユーザー情報的なデータが格納されています。

まずは先にKey Vaultを作成しておきます。
今回は「tdetestnamuyu」あたりの名前でどうでしょうか。

それでは、Azure Key Vaultから鍵を取得してTDEを設定するために、まずは SQL Serverのメニューの「Transparent Data Encryption」を開きます。
そして、設定を「顧客が管理するキー」に変更します。

するとその下に使用するキーを選択する部分が出てくるので、「キーの変更」をクリックします。

ここではキーを保存するKey Vaultを設定します。キーコンテナーのドロップダウンから先程作成したKey Vaultを選択しましょう。

するとKey Vaultに保存されている度のキーを使用するか確認されますが今回はまだキーがないので「新規作成」をクリックし、名前を設定して新規作成します。
新規作成したら、作成されたキーのバージョンを設定し、「選択」をクリックして戻ります。
そして最後に、「保存」ボタンをクリックしてTDEの設定を確定すると、それ以降Key Vaultから暗号化キーを取得して暗号化、暗号化解除を行うようになります。

と言っても特にそれで何が変わったか実感することはほとんどないですが・・・
ちょっと悪いことしよう
先程の説明で、暗号化キーはデータを挿入するとき、読み出しを行うときに使用されると解説しました。
では、その暗号化キーを削除するといったいどうなってしまうのでしょうか?
試してみましょう。

あっあっ大事な鍵がー!

ということでさっくり暗号化キーを消し飛ばしました。
さて、TDEの暗号化や複合化で使う暗号化キーを削除すると、SQL Databaseはいったいどうなってしまうのでしょうか(棒)

クエリエディタを開いてログインしようとすると、このようなエラーが出ました。
KeyVaultからキーが読み出せなくなったので、SQL Databaseにログインすらできなくなりました。
当然ながらこの状態ではデータの書き込みも読み出しもできません。

SQL Databaseの概要画面でも、キーが取得できなくなったことに対するメッセージが出ています。

こうなると、キーをKeyVaultの機能を用いて復元するか別所に用意したKeyVaultに保管しておいた同じキーを再設定しない限りデータは復元できません。
KeyVaultに時前の鍵を用意してそれを用いてTDEを設定する際は、誤ってそのリソースを削除したりキーを削除したりしてしまわないようにリソースにロックをかけたりKeyVaultの設定でキーを論理削除できるようにしておきましょう。
復元の手段は多重に確保しておく必要があります。
おわりに
今回はSQL Database(SQL Serverも)のデータベースの保護機能のであるTDE(透過的なデータ暗号化)について共有しました。
データベースの保護機能としてSQL Databaseにおいてはデフォルトで設定されている部分ですが、要件次第でカスタマイズも可能です。
ただ、その場合はくれぐれも鍵をなくさないように・・・というのがポイントかと思います。
こんな機能もあるのかと心に泊めていただけると幸いです。