「Azure SQL Database」を中心に据え、データを多層的に保護する手法を検討する
あらゆる観点から考える「データセキュリティ」のベストプラクティス
2021年08月30日 08時00分更新
データへのアクセス管理を厳密に
ネットワークやストレージ上のファイルなどの物理的な保護に加えて、データセキュリティ上の重要な意味を持つ作業がデータに対するアクセス管理である。アカウントやグループごとに、それぞれの業務の必然性に基づきデータアクセスの正当性を評価して、データベースへの認証の可否やデータベース内のさまざまなオブジェクトへのアクセス範囲を決定する。さらに、それらは定期的に見直す必要がある。
●データベースへの認証
Azure SQL Databaseでは、次に示す2つの認証方式がサポートされている。SQL認証よりもセキュアな、認証サービスの利点を生かせるAzure Active Directory認証の利用が推奨される。
-SQL認証
オンプレミスのSQL Serverでも提供されている認証方式で、ユーザ名とパスワードを利用して認証を行う。
-Azure Active Directory認証
「Azure Active Directory」で管理するIDを使用した認証方式で、Azure SQL DatabaseやほかのMicrosoftサービスのIDが一元管理できる利点がある。これによって、複数サービスがそれぞれ個別にパスワードローテーション管理などをしなくて済むようになり、パスワード自体をサービス内に保持することも不要になる。さらに電話、テキストメッセージ、スマートカードなどを利用した多要素認証もサポートされる。
●データベースオブジェクトへのアクセス承認
テーブルやビューといったデータベース内のオブジェクトごとにアクセス承認を行うという考え方は、基本的にオンプレミスのSQL Serverと同じである。Azure SQL Databaseではさまざまなアクセス承認方法が可能だが、メンテナンス性などを考慮すると、下記の方法がベストプラクティスと言って差し支えないだろう。
1. 論理的な用途ごとにグループ化したデータベースオブジェクト群をそれぞれ固有のスキーマに所属させる
例:
・人事スキーマ
・営業管理スキーマ
2. 1.のスキーマごとに必要なアクセス権を保持したカスタムデータベースロール群を作成する
例:
・人事スキーマ内のテーブルに参照権限をもつカスタムデータベースロール
・人事スキーマ内のテーブルにデータの追加/更新/削除権限をもつカスタムデータベースロール
3. 必要に応じて2.のデータベースロールにユーザを追加/削除する
★データへのアクセス管理を厳密にするためのベストプラクティス
●アカウント認証方式はAzure Active Directory認証が推奨
●データベースオブジェクトへのアクセス承認方式はオンプレミスと同等
データ堅牢化をサポートする機能を活用
データベースへのアクセスを保護するための基本的な要件は、上述した3つの手段で実現することが可能だ。しかし、より厳密な制御が必要な場合に備えて、いくつかの機能が提供されている。本項ではそれらを紹介しよう。
なおオンプレミスのSQL Serverでは、同等の機能はSQL Server 2016以降(一部はSQL Server 2019以降)といった比較的新しいバージョンでのみ使用することができる。一方でAzure SQL Databaseにおいては、いずれの機能も実装済みだ。さらに、今後追加されるさまざまなセキュリティ関連機能も、まずはAzure SQL Databaseで実装される可能性が高い。最新のセキュアなデータベース環境を求めるのであれば、Azureの利用が適していると言える。
●セキュリティで保護されたエンクレーブを使用する ― Always Encrypted
「Always Encrypted」は、データの暗号化と復号をクライアント側で実行し、データの機密性を高めることを可能にする機能である。ネットワーク転送中やデータベース内で保存中のデータが暗号化されていることから、正当な権限を持たないクライアントからはデータを参照することができない。
従来のアクセス権管理手法では、データベース所有者がデータベース内にあるすべてのデータにアクセスすることが可能だった。しかしながら機密性の高いデータは、データベース所有者であってもアクセス制限を行わざるを得ない場合がある。そのような際に有効な機能といえるが、現時点ではいくつかの制限事項が存在するため、利用時には注意が必要だ。
●動的データマスキング
機密性の高いデータ(例:クレジットカード番号、電話番号など)を、マスクを施したデータとして返す機能である。ショッピングサイトなどで、クレジットカード番号の一部が「*(アスタリスク)」に置き換わって表示されるのを見たことがあると思うが、この機能をデータベース側に実装したのが「動的データマスキング」である。明示的に参照許可が与えられたユーザでなければ、たとえデータベース管理者であってもマスクされたデータにしかアクセスできない。
●行レベルセキュリティ
オブジェクトに対するアクセス権の管理によって、テーブル(およびビュー)ごとにアクセス権を付与することができる。また、そのテーブル内のいずれの列に対してアクセスを許可するのかも管理することが可能だ。
さらに厳密なデータアクセス管理を行う場合には、テーブル内の個々の行に対してもアクセス可否を設定する必要がある(例えば、売上テーブルのうち自部署のデータにのみアクセスを許可する、など)。そのような要求を満たすために行レベルセキュリティが用意されている。
★データ堅牢化をサポートする機能を活用するためのベストプラクティス
●Azureには常に最新のセキュリティ機能が実装されるため、最新情報を入手して有効な機能を取り入れる
この連載の記事
-
第6回
TECH
Azureの利用コストを最適化するためのベストプラクティス -
第5回
TECH
Azureにおける「IDとアクセス管理」のベストプラクティス -
第3回
TECH
“ポストクラウド時代”の効率的なインフラ管理方法とは -
第2回
TECH
「失敗あるある」から考える、Azure移行のベストプラクティス -
第1回
TECH
Azureで実現する高可用性の“勘どころ”と構築のポイント - この連載の一覧へ