Azure SQL Databaseの暗号化を行うには

1.概要

Azure SQL Databaseとは

「Azure SQL Database」とは、利用者の介入なしでDBのアップグレードや修正プログラムの適用、バックアップ、監視などといった処理を実行してくれるフルマネージドのPaaSデータベースエンジンになります。
常に安定した可用性を維持するために、「Azure SQL Database」では、最新のバージョンとなる「SQL Serverデータベースエンジン」とパッチが適用されたOSにて実行が成されます。ついては当エンジンに組まれたPaaS機能を通して、利用者はドメイン固有のデータベースの管理、最適化されたアクティビティに励むことが出来ます。
また使用することで、Azureが提供しているアプリケーション、ソリューションにあてがえる高可用性かつ高いパフォーマンス性を秘めたデータストレージ層の作成ができます。さらに、「SQL Database」を利用すると、JSON、グラフ、空間、XMLなどのリレーショナルデータ/非リレーショナル構造の両処理の実行ができます。

2.暗号化を施す

1.2種類の暗号化テクノロジ

「Azure SQL Database」と「SQL Server」の2つはAlways Encrypted透過的なデータ暗号化(TDE)と呼ばれる2つの暗号化テクノロジに対応しており、外部からの不正アクセスから大切なデータを守るだけでなく、相互補完の役割に担っています。以下はそれぞれの概要を踏まえて特長や利点についてです。

2.透過的なデータ暗号化(TDE)

「透過的なデータ暗号化(TDE)」は、表や表領域に格納するデータを外部からの不正アクセスから守るために、暗号化して保存を行います。保存時に「暗号化」されたデータへのアクセスが認可されているユーザー、またはアプリケーション起動時には、自動的に復号されます。これは「透過的」という言葉は「存在を意識せずとも扱える」という意味を持っていることからきています。つまり、ユーザー自身が手動で暗号/復号という切り替えを実行する必要がなくとも、データが扱えるということになります。
また通常、データの暗号化を行う際は、アプリケーション側で行う必要性があります。しかし、「TDE」にて保存されたデータは、アプリケーションによる暗号化を問わずして、TDEによって自動的に暗号化が実行されます。つまりは、TDEからデータの出し入れを行う時点で、暗号化/復号が行われるため、どのアプリケーションを使用してそこから暗号化を行う手間そのものが省けます。
またひとえに「TDE」は、「Azure SQL Database」と「SQL Server」はもちろんのこと「Azure Synapse Analytics (SQL Data Warehouse) 」にて使用することが可能であり、データ類は自動的に暗号化され、コンプライアンス順守の名の基に保証されます。

3.TDEによる暗号化される仕組み

「TDE」はAES暗号化アルゴリズムに準じてデータベース全体の暗号化を行います。その際、アプリケーションからの暗号化を行う作業の手間を省くことができ、入出力されるデータ等は、リアルタイムに近い形で暗号化/復号を行います。
データベースがメモリによって読み込まれたとき、sysadmin、db_ownerロールを所有するSQL Server管理者、もしくはクラウドサイドの「Azure SQL Database」管理者がデータへアクセスすることが可能となります、しかし、管理者でもアクセスしてはならない機密データがデータベース中に存在する場合は、TDEと後述する「Always Encrypted」による暗号化を併用することで、限られたアカウントのみにしか復号できなくなります。
またTDEで使用されるキーは、サービス管理キーユーザー管理キーの2種類の暗号化キーを用いています。前者の「サービス管理キー」は、サーバー中の「マスターデータベース」に帆残がされている「証明書」がTDEのプロテクターの役割を果たしています。後者の「ユーザー管理キー」は、「EKMモジュール」および「Azure Key Vault」という機密情報をAzure上で安全に保管および利用できるようにする金庫のような役割を果たしているサービスによって保護が成されている非対称キーが、TDEプロテクターとなっています。
Azure SQLDatabaseにおいて、TDEとBring Your Own Key(BYOK)の2つを併用して使用している場合に限り、TDEプロテクターは常時キーコンテナー中に存在します。しかし、データの暗号化/復号、データベース暗号キーの暗号化/復号を実行する毎に、Azure SQLDatabaseがキーコンテナーにアクセスする必要性がでてきます。

4.Always Encrypted

「Always Encrypted」は、「Azure SQL Database」と「SQL Server」に格納された機密データの保護を目的に設計された機能です。当機能を使用することによって、クライアントサイドは、データベースエンジンとなる「Azure SQL Database」と「SQL Server」を開示せずともアプリケーション内のデータを自由に暗号化することが可能となります。結果として、データの所有権及び閲覧権ができるユーザーとできないユーザーの2パターンに分離することが可能となります。機密データへの閲覧/所有といった権限は、データベースの管理者・オペレーター、もしくは他のユーザーよりも高い権限を保有しているアカウントであったとしても、データへのアクセス権限が許可されていない限り、暗号化されたデータへのアクセスそのものができません
またデータベースエンジンを開示せずともクライアントサイドで、暗号化の処理が実行できるのは、「列暗号化キー」「列マスターキー」と呼ばれる2種類のキーによって行えるからです。
まず「列暗号化キー」とは、データベース中の機密データの暗号化処理を行うときに使用します。使用されると、データはプレーンテキストで保存されることはなく、暗号化された状態で保存・格納されます。
一方で「列マスターキー」は、「列暗号化キー」の暗号化処理を実行する際に使用します。いうなれば、クライアントサイドによって常に制御された「キー暗号化キー」であり、Azure Key VaultやWindows証明書ストアなどの「外部のキーストア」に保存されています。つまりは、このキーにアクセスできるのは、クライアントアプリケーションのみとなり、データベースへのアクセスは不可能となります。
またTDEとは異なり、アプリケーションに対する完全な「透過」を行うことはできません。ただし、クライアントドライバーではデータの暗号化/復号を「透過的」に行うことが、要件や制限によってアプリケーションの仕様そのものを変更する手間が生じます。

3.まとめ

「Azure SQL Database」と「SQL Server」は2つの暗号化テクノロジに対応している上で大切な機密データの保護を任せています。しかし、ここで認識してほしいことは「暗号化」をしているからとはいえど「セキュリティが万全」という「イコールの関係」ではないという事です。データベースのセキュリティ強化にはアカウントの「認証」と「アクセス制御」といった要件も重要となってきます。これらの要件を複雑に組み合わせることで、多層的セキュリティの構築を実現することができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です