次の方法で共有


チュートリアル: VBS エンクレーブが設定された Always Encrypted を Azure SQL Database で使い始める

適用対象: Azure SQL Database

このチュートリアルでは、仮想化ベースのセキュリティ (VBS) エンクレーブを使って、Azure SQL Database でセキュリティで保護されたエンクレーブが設定された Always Encrypted を使い始める方法について説明します。 次のことを示します。

  • VBS エンクレーブが設定された Always Encrypted をテストおよび評価するための環境を作成する方法。
  • SQL Server Management Studio (SSMS) を使用して、データのインプレース暗号化を行い、暗号化された列に対して高度な機密クエリを実行する方法。

前提条件

ツールの要件

このチュートリアルでは、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 に設定する必要があります。

  1. Azure portal を開き、セキュリティで保護されたエンクレーブを有効にするデータベースを見つけます。

  2. [セキュリティ] 設定で、[データ暗号化] を選択します。

  3. [データ暗号化] メニューの [Always Encrypted] タブを選択します。

  4. [セキュリティで保護されたエンクレーブを有効にする][オン] に設定します。 既に ON に設定されている場合は、次の手順に進みます。

    Azure portal で既存のデータベースでセキュリティで保護されたエンクレーブを有効にするスクリーンショット。

  5. [保存] を選択して、Always Encryptedの構成を保存します。

手順 3: データベースを設定する

この手順では、テーブルを作成し、後で暗号化してクエリを実行するデータを設定します。

  1. SSMS を開き、データベース接続で Always Encrypted を有効にせずに、作成した Azure SQL 論理サーバーの ContosoHR データベースに接続します。

    1. [サーバーに接続] ダイアログで、サーバーの完全修飾名 (例: myserver135.database.windows.net) を指定し、サーバーの作成時に指定した管理者のユーザー名とパスワードを入力します。

    2. [オプション >>] を選択し、[接続プロパティ] タブを選択します。(既定の master データベースではなく) 必ず ContosoHR データベースを選択します。

    3. [Always Encrypted] タブを選択します。

    4. [Always Encrypted を有効にする (列の暗号化)] チェック ボックスがオンになっていないことを確認します。

      Always Encrypted を有効にせずに SSMS を使ってサーバーに接続した場合のスクリーンショット。

    5. [接続] を選択します。

  2. 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
    
  3. いくつかの従業員レコードを 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:エンクレーブ対応キーをプロビジョニングする

この手順では、エンクレーブ計算を可能にする列マスター キーと列暗号化キーを作成します。

  1. 前の手順の SSMS インスタンスを使用し、オブジェクト エクスプローラーでデータベースを展開して、 [セキュリティ]>[Always Encrypted キー] に移動します。

  2. エンクレーブ対応の列マスター キーをプロビジョニングします。

    1. [Always Encrypted キー] を右クリックし、 [新しい列マスター キー...] を選択します。
    2. 新しい列のマスター キーの名前を入力します: CMK1
    3. [エンクレーブ計算を許可する] が選択されていることを確認します。 (セキュリティで保護されたエンクレーブがデータベースに対して有効になっている場合は、既定でこれが選択されます。データベースでは DC シリーズのハードウェア構成が使用されるため、有効にする必要があります。)
    4. [Azure Key Vault] (推奨) または [Windows 証明書ストア] ([現在のユーザー] または [ローカル マシン]) を選択します。
      • Azure Key Vault を選択した場合は、Azure にサインインし、使用するキー コンテナーを含む Azure サブスクリプションを選択し、キー コンテナーを選択します。 [キーの生成] を選択して、新しいキーを作成します。
      • Windows 証明書ストアを選択した場合は、[証明書の生成] ボタンを選択して新しい証明書を作成します。 新しい列マスター キーを作成するときに SSMS で [エンクレーブ計算を許可する] をオンにしたスクリーンショット。
    5. [OK] を選択します。
  3. 新しいエンクレーブ対応の列暗号化キーを作成します。

    1. [Always Encrypted キー] を右クリックし、 [新しい列の暗号化キー] を選択します。
    2. 新しい列暗号化キーの名前「CEK1」を入力します。
    3. [列マスター キー] ドロップダウンで、前の手順で作成した列マスター キーを選択します。
    4. [OK] を選択します。

手順 5:一部の列のインプレース暗号化を行う

この手順では、サーバー側エンクレーブ内の SSN および Salary 列に格納されたデータを暗号化し、そのデータに対して SELECT クエリをテストします。

  1. 新しい SSMS インスタンスを開き、データベース接続で Always Encrypted を有効にしてデータベースに接続します。

    1. SSMS の新しいインスタンスを開始します。

    2. [サーバーに接続] ダイアログで、サーバーの完全修飾名 (例: myserver135.database.windows.net) を指定し、サーバーの作成時に指定した管理者のユーザー名とパスワードを入力します。

    3. [オプション >>] を選択し、[接続プロパティ] タブを選択します。(既定の master データベースではなく) 必ず ContosoHR データベースを選択します。

    4. [Always Encrypted] タブを選択します。

    5. [Always Encrypted を有効にする (列の暗号化)] チェック ボックスをオンにします。

    6. [Enable secure enclaves] (セキュリティで保護されたエンクレーブを有効にする) を選択します。

    7. [プロトコル][なし] に設定します。 次のスクリーンショットを参照してください。

      構成証明プロトコルが [なし] に設定されている、SSMS の [サーバーに接続] ダイアログの [Always Encrypted] タブのスクリーンショット。

    8. [接続] を選択します。

    9. Always Encrypted クエリのパラメーター化を有効にするよう求められたら、 [有効] を選択します。

  2. 同じ 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 ステートメントは、上記のスクリプトでのデータベース用のクエリ プラン キャッシュをクリアします。 テーブルを変更したら、テーブルにアクセスするすべてのバッチおよびストアド プロシージャのプランをクリアして、パラメーター暗号化情報を更新する必要があります。

  3. SSN 列と Salary 列が暗号化されたことを確認するには、データベース接続の Always Encrypted が有効になっていない SSMS インスタンスで新しいクエリ ウィンドウを開き、下のステートメントを実行します。 クエリ ウィンドウで、SSN 列と Salary 列に暗号化された値が返される必要があります。 Always Encrypted が有効な SSMS インスタンスを使用して同じクエリを実行した場合は、復号化されたデータが表示されます。

    SELECT * FROM [HR].[Employees];
    

手順 6:暗号化された列に対して高度なクエリを実行する

暗号化された列に対して高度なクエリを実行できます。 いくつかのクエリ処理は、サーバー側エンクレーブ内で実行されます。

  1. Always Encrypted が有効になっている SSMS インスタンスで、Always Encrypted のパラメーター化も有効になっていることを確認します。

    1. SSMS のメイン メニューから [ツール] を選択します。
    2. [オプション...] を選択します。
    3. [クエリ実行]>[SQL Server]>[詳細] の順に移動します。
    4. [Always Encrypted のパラメーター化を有効にする] がオンであることを確認します。
    5. [OK] を選択します。
  2. 新しいクエリ ウィンドウを開き、下のクエリを貼り付けて実行します。 クエリでは、指定した検索条件を満たすプレーンテキスト値と行が返されます。

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Always Encrypted が有効になっていない SSMS インスタンスで同じクエリをもう一度試します。 エラーが発生します。

次の手順

このチュートリアルを完了すると、次のいずれかのチュートリアルに進むことができます。

関連項目