Always Encrypted のキー管理の概要

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Always Encrypted は、2 種類の暗号化キーを使用します。1 つはデータを暗号化するキーと、もう 1 つはデータを暗号化するキーを暗号化するキーです。 列暗号化キーはデータを暗号化し、列マスター キーは列暗号化キーを暗号化します。 この記事では、これらの暗号化キーを管理するための詳細な概要を提供します。

Always Encrypted鍵と鍵の管理について説明する際には、実際の暗号化キーと、鍵を記述するメタデー タオブジェクトの違いを理解することが重要である。 実際の暗号化キーを指す 列暗号化キー列マスター キー という用語と、データベース内の Always Encrypted キーの 説明 を指す 列暗号化キーのメタデータ列マスター キーのメタデータ という用語を使用します。

  • 列暗号化キー は、データを暗号化するために使用される内容暗号化キーです。 名前が示すように、列暗号化キーはデータベースの列内のデータを暗号化するために使用します。 1つまたは複数の列を同じ列暗号化キーで暗号化することも、アプリケーションの要件に応じて複数の列暗号化キーを使用することもできます。 列暗号化キーは自体が暗号化され、列暗号化キーの暗号化された値だけが (列暗号化キーのメタデータの一部として) データベースに格納されます。 列暗号化キーのメタデータは、 sys.column_encryption_keys (TRANSACT-SQL)sys.column_encryption_key_values (TRANSACT-SQL) カタログ ビューに格納されます。 AES-256 アルゴリズムで使用される列暗号化キーは 256 ビット長です。

  • "列マスター キー" は、列暗号化キーの暗号化に使用される保護キーです。 列マスター キーは、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュールなどの信頼できるキー ストアに格納する必要があります。 データベースには、列マスター キーに関するメタデータ (キー ストアの種類と場所) のみが含まれます。 列マスター キーのメタデータは、 sys.column_master_keys (TRANSACT-SQL) カタログ ビューに格納されています。

データベース・システムのキー・メタデータには、プレーンテキストのカラム・マスター・キーやプレーンテキストのカラム暗号化キーは含まれていないことに注意することが重要だ。 データベースには、列マスター キーの種類と場所に関する情報と、列暗号化キーの暗号化された値のみが含まれます。 これは、プレーンテキストのキーはデータベース システムに決して公開されないので、データベース システムが侵害された場合でも、Always Encrypted を使用して保護されているデータの安全性が保証されることを意味します。 データベース システムが平文キーにアクセスできないようにするには、データベースをホストしているマシンとは別のマシンでキー管理ツールを実行してください。詳細については、以下のキー管理のセキュリティに関する考慮事項のセクションを確認してください。

データベースには暗号化されたデータ(Always Encrypted で保護されたカラム)のみが格納されており、平文の鍵にはアクセスできないため、データを復号化することはできません。 つまり、Always Encrypted 列に対してクエリを実行しても、暗号化された値が返されるだけなので、保護されたデータを暗号化または復号化する必要があるクライアント アプリケーションは、列マスター キーと関連する列暗号化キーにアクセスできる必要があります。 詳しくは、「Always Encrypted を使用したアプリケーションの開発」をご覧ください。

キー管理タスク

キー管理のプロセスは、次の高度なタスクに分類できます:

  • キーのプロビジョニング - 信頼できるキー ストア (たとえば、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュール) に物理キーを作成し、列マスター キーで列暗号化キーを暗号化し、両方の種類のメタデータをデータベースに作成します。

  • キーの交換 -既存のキーを定期的に新しいキーに交換します。 キーが侵害された場合や、暗号化キーを定期的に交換することを定めた組織のポリシーまたはコンプライアンス規定に準拠するために、キーを交換する必要があります。

キー管理の役割

Always Encrypted キーを管理するユーザーには、セキュリティ管理者とデータベース管理者 (DBA) の 2 つの異なる役割があります:

  • セキュリティ管理者 – 列暗号化キーと列マスター キーを生成し、列マスター キーを含むキー ストアを管理します。 これらのタスクを実行するために、セキュリティ管理者は鍵と鍵ストアにアクセスできる必要があるが、 データベースにアクセスする必要はない。
  • DBA - データベース内のキーに関するメタデータを管理します。 キー管理タスクを実行するために、DBAはデータベース内のキー・メタデータを管理できる必要があるが、キーやカラムマスター キーを保持するキー格納にアクセスする必要はない。

上記の役割を考慮すると、Always Encrypted のキー管理タスクを実行するには、 役割の分離を使用する場合と 役割の分離を使用しない場合の 2 つの異なる方法があります。 組織のニーズに応じて、要件に最適なキー管理プロセスを選択できます。

役割の分離を使用したキー管理

役割の分離を使用して Always Encrypted キーを管理する場合、組織内の別々の人がセキュリティ管理者の役割と DBA の役割を担当します。 役割の分離を使用したキー管理プロセスには、キーまたは実際のキーを保持するキー ストアへのアクセス権はありません。また、セキュリティ管理者には機密データを含むデータベースへのアクセス権はありません。 組織内のDBAが機密データにアクセスできないようにすることが目的なら、ロールを分離してキーを管理することを推奨します。

注: セキュリティ管理者はプレーンテキストのキーを生成して使用するため、データベース システムをホストしているのと同じコンピューター上、または DBA やその他の敵対する可能性のある人物がアクセスできるコンピューター上でタスクを決して実行しないようにする必要があります。

役割の分離を使用しないキー管理

Always Encrypted鍵を役割分担せずに管理する場合、一人の担当者がセキュリティ管理者と DBA の両方の役割を担うことになるため、その担当者は鍵/鍵ストアと鍵メタデータの両方にアクセスし、管理する必要がある。 DevOps モデルを使用している組織、またはデータベースがクラウドでホストされていて、(オンプレミスの DBA ではなく) クラウドの管理者の機密データへのアクセスを制限することが主な目的の場合は、役割の分離を使用せずにキーを管理することをお勧めします。

Always Encrypted キーを管理するためのツール

Always Encrypted キーは、 SQL Server Management Studio (SSMS)PowerShellを使用して管理できます:

キー管理でのセキュリティに関する考慮事項

Always Encrypted の主な目的は、データベース システムまたはそのホスティング環境が侵害された場合でも、データベースに格納されている機密データの安全を保証することです。 Always Encrypted が機密データの漏えい防止に役立つ、セキュリティ攻撃の例を次に示します:

  • 高い特権を持つ悪意のあるデータベース ユーザー (DBA など)が、機密性の高いデータ列に対してクエリを実行する。
  • SQL Server インスタンスをホストするコンピューターの悪意のある管理者が、SQL Server プロセスのメモリ、または SQL Server プロセスのダンプ ファイルをスキャンする。
  • 悪意のあるデータ センター オペレーターが、顧客データベースにクエリを実行する、SQL Server のダンプ ファイルを調べる、またはクラウド内の顧客データをホストするコンピューターのメモリを調べる。
  • データベースをホストしているコンピューター上でマルウェアが実行されている。

Always Encrypted がこのような攻撃を確実に防ぐためには、鍵管理プロセスにおいて、カラムマスター キー、カラム暗号化キー、およびカラムマスター キーを含むキー格納への資格証明情報が、潜在的な攻撃者に決して公開されないようにする必要がある。 従うべきいくつかのガイドラインを以下に示します:

  • 列マスター キーまたは暗号化キーをデータベースをホストするコンピューター上で生成しないでください。 代わりに、別のコンピューター (キー管理専用またはキーへのアクセスを必要とするアプリケーションをホストしているコンピューターのいずれか) でキーを生成します。 つまり、攻撃者がプロビジョニングや Always Encrypted キーの維持に使用しているコンピューターにアクセスすると、ツールのメモリにキーが短時間表示されるだけでも、攻撃者がキーを取得できる可能性があるため、キーを生成するために使用したツールをデータベースをホストしているコンピューター上で決して実行しないでください
  • 鍵管理プロセスでカラムマスター キーやカラム暗号化キーが不用意に漏れないようにするためには、鍵管理プロセスを定義し実装する前に、潜在的な敵対者やセキュリティ上の脅威を特定することが重要である。 たとえば、DBAが機密データにアクセスできないようにすることが目的なら、DBAが鍵の生成を担当することはできません。 しかし、DBAは、メタデータにプレーンテキストの鍵が含まれていないため、データベースの鍵メタデータを管理することができます

次の手順