演習 - 転送中、保存時、および表示中のデータのセキュリティ保護
marketplaceDb データベースには、物理的な住所、メール アドレス、電話番号などの機密情報が格納されています。 それが無防備のままでは、悪意のある攻撃者がこの情報を使って、ビジネスや顧客に損害を与える可能性があります。 暗号化とデータ マスキングを使って、データベースのセキュリティをどのように強化できるか調べます。
TLS ネットワーク暗号化
Azure SQL Database では、すべての接続に対して常にトランスポート層セキュリティ (TLS) 暗号化が適用され、すべてのデータがデータベースとクライアントの間の "移動中" に暗号化されることが保証されます。 TLS 暗号化を使うことにより、アプリ サーバーとデータベースの間でトラフィックをインターセプトされることがあってもデータは読み取られないことを保証できます。 TLS 暗号化は、インターネット経由のトラフィックをセキュリティ保護する標準であり、この場合は、Azure SQL Database とやり取りされるネットワーク トラフィックが既定でセキュリティ保護されます。
Transparent Data Encryption
Azure SQL Database では、Transparent Data Encryption (TDE) を使用して保存データが保護されます。 TDE では、アプリケーションを変更する必要なしに、データベース、関連付けられたバックアップ、および保存されているトランザクション ログ ファイルの暗号化とその解除が、リアルタイムで実行されます。 Transparent Data Encryption では、データベースの暗号化キーを使って、ページ レベルでデータのリアルタイムの I/O 暗号化とその解読が実行されます。 各ページは、メモリに読み込まれるときに暗号化が解除され、ディスクに書き込まれる前に暗号化されます。
既定では、新しくデプロイされるすべての Azure SQL データベースで TDE が有効になります。 データの暗号化がオフになっていないことを確認することが重要です。 以前の Azure SQL Server データベースでは、TDE が有効にされていない場合があります。
Azure portal で marketplaceDb データベースに TDE が構成されている場所を見てみましょう。
サンドボックスをアクティブ化したときと同じアカウントを使用して、Azure portal にサインインします。
Azure portal の一番上にある検索バーで marketplaceDb を検索して、そのデータベースを選びます。
左側のメニュー ペインで、[セキュリティ] の下にある [データの暗号化] を選びます。
データ暗号化オプションで、[データ暗号化] が [オン] に設定されていることを確認します。 暗号化の状態が [暗号化済み] になっている必要もあります。
新しいデータベースは既定で暗号化されるため、データベースを作成するとすぐに、ディスク上のデータは確実に暗号化されます。
Note
Azure に組み込まれている Microsoft Defender for Cloud というサービスでは、Azure SQL データベースも含む環境内のセキュリティを可視化できます。 Microsoft Defender for Cloud では、TDE が有効になっていないデータベースにはフラグが設定されるので、お客様はそれを報告してデータをセキュリティ保護する措置を実行できます。
動的データ マスク
前のユニットでクエリを実行したとき、データベース内の情報の一部が機密性のものであることに気付いたかもしれません。 電話番号、メール アドレス、そしてデータにアクセスできるすべてのユーザーに完全に表示したくはないその他の情報が存在しています。
おそらく、ユーザーには完全な電話番号やメール アドレスを見せたくはありませんが、顧客サービス担当者には顧客を識別するためにデータの一部を利用できるようにする必要があります。 Azure SQL Database の動的データ マスキング機能を使うと、ユーザーに表示されるデータを制限できます。 動的データ マスキングはポリシー ベースのセキュリティ機能であり、指定されたデータベース フィールドに対するクエリの結果セットに含まれる機密データが表示されないようにします。データベース内のデータは変更されません。
データ マスク ルールは、マスクを適用する列と、データをマスクする方法で構成されます。 独自のマスク形式を作成することも、次のような標準マスクのいずれかを使用することもできます。
- 既定値: そのデータ型の既定値を代わりに表示します。
- クレジット カードの値: 数字の最後の 4 桁のみを表示し、それ以外の数字はすべて小文字の x に変換します。
- 電子メール: ドメイン名を隠し、電子メール アカウント名の最初の 1 文字を除いたすべての文字も隠します。
- 番号: 値の範囲内でランダムな数値を指定します。 たとえば、クレジット カードの有効期限の月と年で、1 から 12 までのランダムな月を選択し、また年の範囲を 2018 から 3000 に設定できます。
- カスタム文字列: データの先頭から何文字を開示するか、データの末尾から何文字を開示するか、およびデータの残りの部分に対して繰り返す文字を設定できます。
データベース管理者が列のクエリを実行したときは、元の値が表示されます。 管理者以外には、マスクされた値が表示されます。 マスキングから除外される SQL ユーザーのリストに他のユーザーを追加することで、それらのユーザーへのマスクされていない値の表示を許可できます。
marketplaceDb データベースでデータ マスキングがどのように機能するかを確認します。
引き続きポータルの marketplaceDb データベース パネルで、左側のメニュー ウィンドウの [セキュリティ] セクションから [動的データ マスク] を選択します。
[マスク ルール] 画面には、既存の動的データ マスクのリストと、動的データ マスクを適用した方がよい可能性がある列の推奨が表示されます。
最後の 4 桁のみを表示するマスクを電話番号に追加します。 上部にある [マスクの追加] ボタンを選択して、[マスク ルールの追加] ダイアログ ボックスを開きます。
次の値を選択します。
設定 価値 スキーマ SalesLT テーブル Customer 列 Phone (nvarchar) マスク フィールド形式 カスタム文字列 (プレフィックス [パディング] サフィックス) 公開されるプレフィックス 0 パディング文字列 XXX-XXX- 公開されるサフィックス 4 [追加] を選択してマスク ルールを追加します。
さらに、メール アドレスにも 1 つ追加します。 上部にある [マスクの追加] ボタンをもう一度選んで、[マスク ルールの追加] ダイアログ ボックスを開きます。
設定 価値 スキーマ SalesLT テーブル Customer 列 EmailAddress (nvarchar) マスク フィールド形式 電子メール (aXXX@XXX.com) [追加] を選択してマスク ルールを追加します。
新しい各マスクが、マスク ルール リストに追加されます。 [保存] を選択してマスクを適用します。
データ マスキングによってクエリがどのように変わるのかを確認します。
データベースに、今度は ApplicationUser ユーザーとしてもう一度サインインします。
sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
次のクエリを実行します。
SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer; GO
出力がどのようにマスクされているかを見てください。
FirstName LastName EmailAddress Phone ------------- ------------- -------------------- ------------ Orlando Gee oXXX@XXXX.com XXX-XXX-0173 Keith Harris kXXX@XXXX.com XXX-XXX-0127 Donna Carreras dXXX@XXXX.com XXX-XXX-0130 Janet Gates jXXX@XXXX.com XXX-XXX-0173 ...
作成したマスキング ルールにより、指定した形式でデータがマスクされています。 これらのルールにより、顧客サービス担当者は、電話番号の末尾 4 桁で顧客を確認できますが、顧客の完全な電話番号とメール アドレスを見ることはできません。