チュートリアル: VBS エンクレーブが設定された Always Encrypted を Azure SQL Database で使い始める
適用対象: Azure SQL Database
このチュートリアルでは、仮想化ベースのセキュリティ (VBS) エンクレーブを使って、Azure SQL Database でセキュリティで保護されたエンクレーブが設定された Always Encrypted を使い始める方法について説明します。 次のことを示します。
- VBS エンクレーブが設定された Always Encrypted をテストおよび評価するための環境を作成する方法。
- SQL Server Management Studio (SSMS) を使用して、データのインプレース暗号化を行い、暗号化された列に対して高度な機密クエリを実行する方法。
前提条件
- 有効な Azure サブスクリプション アカウントがない場合は、無料アカウントを作成してください。 リソースを作成できるようにするには、サブスクリプションの共同作成者ロールまたは所有者ロールのメンバーである必要があります。
- 省略可能。ただし、Always Encrypted: Azure Key Vault のキー コンテナーの列マスター キーを格納する場合に推奨されます。 キー コンテナーを作成する方法については、「クイックスタート: Azure portal を使用してキー コンテナーを作成する」を参照してください。
- キー コンテナーでアクセス ポリシーのアクセス許可モデルを使用する場合は、キー コンテナーに次のキーアクセス許可があることを確認します:
get
、list
、create
、unwrap key
、wrap key
、verify
、sign
。 「Key Vault アクセス ポリシーを割り当てる」を参照してください。 - Azure ロールベースのアクセス制御 (RBAC) アクセス許可モデルを使用している場合は、キー コンテナーの Key Vault Crypto Officer ロールのメンバーであることを確認してください。 「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください。
- キー コンテナーでアクセス ポリシーのアクセス許可モデルを使用する場合は、キー コンテナーに次のキーアクセス許可があることを確認します:
ツールの要件
このチュートリアルでは、SQL Server Management Studio (SSMS) が必要です。 PowerShell または Azure CLI を使って VBS エンクレーブを有効にできます。
最新バージョンの SQL Server Management Studio (SSMS) をダウンロードします。
ステップ 1: サーバーとデータベースを作成して構成する
このステップでは、新しい Azure SQL Database 論理サーバーと新しいデータベースを作成します。
「クイックスタート: 単一データベースを作成する - Azure SQL Database」の「単一データベースを作成する」セクションの手順のようにして、新しい Azure SQL Database 論理サーバーと新しいデータベースを作成します。
重要
(サンプル データベースではなく) ContosoHR という名前の空のデータベースを作成してください。
ステップ 2: VBS エンクレーブを有効にする
このステップでは、セキュリティで保護されたエンクレーブが設定された Always Encrypted に必要な VBS エンクレーブをデータベースで有効にします。 データベースで VBS エンクレーブを有効にするには、preferredEnclaveTypeデータベース プロパティを VBS に設定する必要があります。
Azure portal を開き、セキュリティで保護されたエンクレーブを有効にするデータベースを見つけます。
[セキュリティ] 設定で、[データ暗号化] を選択します。
[データ暗号化] メニューの [Always Encrypted] タブを選択します。
[セキュリティで保護されたエンクレーブを有効にする] を [オン] に設定します。 既に ON に設定されている場合は、次の手順に進みます。
[保存] を選択して、Always Encryptedの構成を保存します。
手順 3: データベースを設定する
この手順では、テーブルを作成し、後で暗号化してクエリを実行するデータを設定します。
SSMS を開き、データベース接続で Always Encrypted を有効にせずに、作成した Azure SQL 論理サーバーの ContosoHR データベースに接続します。
[サーバーに接続] ダイアログで、サーバーの完全修飾名 (例: myserver135.database.windows.net) を指定し、サーバーの作成時に指定した管理者のユーザー名とパスワードを入力します。
[オプション >>] を選択し、[接続プロパティ] タブを選択します。(既定の
master
データベースではなく) 必ず ContosoHR データベースを選択します。[Always Encrypted] タブを選択します。
[Always Encrypted を有効にする (列の暗号化)] チェック ボックスがオンになっていないことを確認します。
[接続] を選択します。
Employees という名前の新しいテーブルを作成します。
CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY]; GO
いくつかの従業員レコードを Employees テーブルに追加します。
INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
手順 4:エンクレーブ対応キーをプロビジョニングする
この手順では、エンクレーブ計算を可能にする列マスター キーと列暗号化キーを作成します。
前の手順の SSMS インスタンスを使用し、オブジェクト エクスプローラーでデータベースを展開して、 [セキュリティ]>[Always Encrypted キー] に移動します。
エンクレーブ対応の列マスター キーをプロビジョニングします。
- [Always Encrypted キー] を右クリックし、 [新しい列マスター キー...] を選択します。
- 新しい列のマスター キーの名前を入力します: CMK1。
- [エンクレーブ計算を許可する] が選択されていることを確認します。 (セキュリティで保護されたエンクレーブがデータベースに対して有効になっている場合は、既定でこれが選択されます。データベースでは DC シリーズのハードウェア構成が使用されるため、有効にする必要があります。)
- [Azure Key Vault] (推奨) または [Windows 証明書ストア] ([現在のユーザー] または [ローカル マシン]) を選択します。
- Azure Key Vault を選択した場合は、Azure にサインインし、使用するキー コンテナーを含む Azure サブスクリプションを選択し、キー コンテナーを選択します。 [キーの生成] を選択して、新しいキーを作成します。
- Windows 証明書ストアを選択した場合は、[証明書の生成] ボタンを選択して新しい証明書を作成します。
- [OK] を選択します。
新しいエンクレーブ対応の列暗号化キーを作成します。
- [Always Encrypted キー] を右クリックし、 [新しい列の暗号化キー] を選択します。
- 新しい列暗号化キーの名前「CEK1」を入力します。
- [列マスター キー] ドロップダウンで、前の手順で作成した列マスター キーを選択します。
- [OK] を選択します。
手順 5:一部の列のインプレース暗号化を行う
この手順では、サーバー側エンクレーブ内の SSN および Salary 列に格納されたデータを暗号化し、そのデータに対して SELECT クエリをテストします。
新しい SSMS インスタンスを開き、データベース接続で Always Encrypted を有効にしてデータベースに接続します。
SSMS の新しいインスタンスを開始します。
[サーバーに接続] ダイアログで、サーバーの完全修飾名 (例: myserver135.database.windows.net) を指定し、サーバーの作成時に指定した管理者のユーザー名とパスワードを入力します。
[オプション >>] を選択し、[接続プロパティ] タブを選択します。(既定の
master
データベースではなく) 必ず ContosoHR データベースを選択します。[Always Encrypted] タブを選択します。
[Always Encrypted を有効にする (列の暗号化)] チェック ボックスをオンにします。
[Enable secure enclaves] (セキュリティで保護されたエンクレーブを有効にする) を選択します。
[プロトコル] を [なし] に設定します。 次のスクリーンショットを参照してください。
[接続] を選択します。
Always Encrypted クエリのパラメーター化を有効にするよう求められたら、 [有効] を選択します。
同じ SSMS インスタンス (Always Encrypted が有効) を使用して、新しいクエリ ウィンドウを開き、次のステートメントを実行して SSN および Salary 列を暗号化します。
ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Note
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE ステートメントは、上記のスクリプトでのデータベース用のクエリ プラン キャッシュをクリアします。 テーブルを変更したら、テーブルにアクセスするすべてのバッチおよびストアド プロシージャのプランをクリアして、パラメーター暗号化情報を更新する必要があります。
SSN 列と Salary 列が暗号化されたことを確認するには、データベース接続の Always Encrypted が有効になっていない SSMS インスタンスで新しいクエリ ウィンドウを開き、下のステートメントを実行します。 クエリ ウィンドウで、SSN 列と Salary 列に暗号化された値が返される必要があります。 Always Encrypted が有効な SSMS インスタンスを使用して同じクエリを実行した場合は、復号化されたデータが表示されます。
SELECT * FROM [HR].[Employees];
手順 6:暗号化された列に対して高度なクエリを実行する
暗号化された列に対して高度なクエリを実行できます。 いくつかのクエリ処理は、サーバー側エンクレーブ内で実行されます。
Always Encrypted が有効になっている SSMS インスタンスで、Always Encrypted のパラメーター化も有効になっていることを確認します。
- SSMS のメイン メニューから [ツール] を選択します。
- [オプション...] を選択します。
- [クエリ実行]>[SQL Server]>[詳細] の順に移動します。
- [Always Encrypted のパラメーター化を有効にする] がオンであることを確認します。
- [OK] を選択します。
新しいクエリ ウィンドウを開き、下のクエリを貼り付けて実行します。 クエリでは、指定した検索条件を満たすプレーンテキスト値と行が返されます。
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Always Encrypted が有効になっていない SSMS インスタンスで同じクエリをもう一度試します。 エラーが発生します。
次の手順
このチュートリアルを完了すると、次のいずれかのチュートリアルに進むことができます。
- チュートリアル:セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用する .NET アプリケーションの開発」をご覧ください。
- チュートリアル:セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用する .NET Framework アプリケーションの開発
- チュートリアル:ランダム化された暗号化を使用してエンクレーブ対応の列でインデックスを作成して使用する