Azure Key Vault を使用する拡張キー管理 (SQL Server)

SQL Server コネクタ for Microsoft Azure Key Vaultを使用すると、SQL Server暗号化を使用して、Azure Key Vault サービスを拡張キー管理 (EKM) プロバイダーとして利用して暗号化キーを保護できます。

このトピックの内容:

EKM の使用

organizationでは、SQL Server暗号化を使用して機密データを保護できます。 SQL Server暗号化には、Transparent Data Encryption (TDE)列レベル暗号化 (CLE)、バックアップ暗号化が含まれます。 これらのすべてのケースでは、対称なデータ暗号化キーを使用してデータが暗号化されます。 対称なデータ暗号化キーは、 SQL Serverに格納されたキーの階層で暗号化することにより、さらに保護されます。 または、EKM プロバイダー アーキテクチャを使用すると、外部暗号化プロバイダーのSQL Serverの外部に格納されている非対称キーを使用して、SQL Serverでデータ暗号化キーを保護できます。 EKM プロバイダーのアーキテクチャを使用すると、さらにセキュリティ層を追加し、組織の中でキーとデータの管理を分離できます。

SQL Server Connector for Azure Key Vaultを使用すると、EKM プロバイダーとして、スケーラブルで高パフォーマンスで高可用性のキー コンテナー サービスを暗号化キー保護に活用SQL Server。 キー コンテナー サービスは、Microsoft Azure Virtual Machines およびオンプレミス サーバーのSQL Serverインストールで使用できます。 また、資格情報コンテナー サービスでは、厳密な管理および監視下にあるハードウェア セキュリティ モジュール (HSM) を使用し、非対称暗号化キーをより高いレベルで保護するオプションも提供します。 資格情報コンテナーの詳細については、「 Azure Key Vault」を参照してください。

次の図は、Key Vault を使用した EKM のプロセス フローについてまとためものです。 図の中にプロセス手順番号が示されていますが、図の後に示す設定手順の番号と対応しているわけではありません。

Azure Key Vaultを使用して Azure Key Vault

手順 1:SQL Server で使用する Key Vault の設定

暗号化キー保護のためにSQL Server データベース エンジンで使用するキー コンテナーを設定するには、次の手順に従います。 コンテナーは、組織内で既に使用中になっていることもあります。 コンテナーが存在しない場合、暗号化キーを管理するために指定されたorganizationの Azure 管理者は、コンテナーを作成し、コンテナーに非対称キーを生成し、そのキーを使用するSQL Serverを承認できます。 Key Vault サービスについて習熟するため、「 Azure Key Vault の使用を開始する」と、PowerShell の「 Azure Key Vault のコマンドレット 」をご確認ください。

重要

複数の Azure サブスクリプションがある場合は、SQL Serverを含むサブスクリプションを使用する必要があります。

  1. コンテナーを作成する:Azure Key Vault の使用を開始する 」の「 Key Vault の作成」セクションにある指示に従って資格情報コンテナーを作成します。 コンテナーの名前を記録しておきます。 このトピックでは、" ContosoKeyVault " という資格情報コンテナー名を使用します。

  2. コンテナーに非対称キーを生成します。キー コンテナー内の非対称キーは、SQL Server暗号化キーを保護するために使用されます。 資格情報コンテナーから出て行くのは非対称キーの公開部分だけで、秘密の部分がコンテナーからエクスポートされることはありません。 非対称キーを使用するすべての暗号化操作は、Azure Key Vault に委任され、資格情報コンテナーのセキュリティで保護されます。

    非対称キーを生成して資格情報コンテナーに格納する方法がいくつかあります。 外部からキーを生成し、キーを .pfx ファイルとして資格情報コンテナーにインポートします。 または、Key Vault の API を使用してキーを直接資格情報コンテナーに作成します。

    SQL Server コネクタでは、非対称キーが 2048 ビット RSA である必要があり、キー名は文字 "a-z"、"A-Z"、"0-9"、および "-" のみを使用できます。 このドキュメントでは、非対称キーの名前を ContosoMasterKeyとします。 これは、キーに実際に使用する一意の名前で置き換えてください。

    重要

    実稼働のシナリオでは、非対称キーをインポートする方法を強くお勧めします。管理者は、キーをキー エスクロー システムに預託できるからです。 資格情報コンテナー内で非対称キーを作成する方法の場合、秘密キーは資格情報コンテナーの外に出ることがないため、エスクローに預託することができません。 重要なデータの保護に使用するキーはエスクローに預託してください。 非対称キーを紛失すると、データが永久的に復元不能になります。

    重要

    資格情報コンテナーでは、同じ名前を付けたキーの複数のバージョンがサポートされます。 SQL Server コネクタで使用するキーは、バージョン管理またはロール化しないでください。 管理者がSQL Server暗号化に使用するキーをロールする場合は、コンテナーに別の名前の新しいキーを作成し、DEK の暗号化に使用する必要があります。

    資格情報コンテナーにキーをインポートする方法、および資格情報コンテナー内でキーを作成する方法 (実稼働環境では推奨されません) の詳細については、「 Azure Key Vault の使用を開始する」の「キーまたは秘密キーを資格情報コンテナーに追加する」セクションをご覧ください。

  3. SQL Server で使用する Azure Active Directory のサービス プリンシパルを取得する: Microsoft クラウド サービスにサインアップする時点で、組織は Azure Active Directory を取得します。 キー コンテナーへのアクセス中に (Azure Active Directory に対して自身を認証するために) 使用するSQL Serverのために、Azure Active Directory にサービス プリンシパルを作成します。

    • 暗号化を使用するようにSQL Serverを構成するときに、コンテナーにアクセスするには、SQL Server管理者が 1 つのサービス プリンシパルが必要です。

    • 暗号化で使用されるキーのラップ解除のためにコンテナーにアクセスするには、SQL Server データベース エンジンで別のサービス プリンシパルSQL Server必要になります。

    アプリケーションを登録してサービス プリンシパルを生成する方法の詳細については、「 Azure Key Vault の使用を開始する 」の「 アプリケーションを Azure Active Directory に登録する」セクションをご覧ください。 この登録プロセスからは、Azure Active Directory の サービス プリンシパル ごとに、 アプリケーション ID( クライアント ID とも呼ばれる) および 認証キー( シークレットとも呼ばれる) が返されます。 ステートメントで使用する CREATE CREDENTIAL 場合は、ハイフンを CLIENT ID から削除する必要があります。 以下のスクリプトで使用するために、これらの情報を記録しておきます。

    • sysadmin のログイン用の サービス プリンシパル : CLIENTID_sysadmin_login および SECRET_sysadmin_login

    • SQL Server データベース エンジンのサービス プリンシパル: CLIENTID_DBEngineSECRET_DBEngine

  4. Key Vault にアクセスする権限をサービス プリンシパルに付与する: の両方の の両方のサービス プリンシパル は、資格情報コンテナーでの get, list, wrapKey, の両方の unwrapKey 権限を必要とします。 SQL Serverを使用してキーを作成する場合は、キー コンテナーに作成アクセス許可を付与する必要もあります。

    重要

    ユーザーは、この資格情報コンテナーに対しては、少なくとも wrapKey および unwrapKey 操作が必要です。

    資格情報コンテナーに権限を付与する操作の詳細については、「 Azure Key Vault の使用を開始する」の「キーまたはシークレットを使用できるようにアプリケーションを承認する」セクションご覧ください。

    Azure Key Vault のドキュメントへのリンク

手順 2:SQL Server コネクタのインストール

SQL Server コネクタは、SQL Server コンピューターの管理者によってダウンロードされてインストールされます。 SQL Server コネクタは、Microsoft ダウンロード センターからダウンロードできます。 " SQL Server Connector for Microsoft Azure Key Vault" を検索して、詳細やシステム要件、インストール方法を確認し、コネクタのダウンロードを選択し、 [実行]を使用してインストールを開始します。 ライセンスを確認し、ライセンスに同意して続行します。

既定では、コネクタは C:\Program Files\SQL Server コネクタ for Microsoft Azure Key Vault にインストールされます。 この場所は、セットアップ中に変更することができます。 (変更した場合は、以下のスクリプトを調整してください。)

インストールを完了すると、以下のものがコンピューターにインストールされています。

  • Microsoft.AzureKeyVaultService.EKM.dll: これは、CREATE CRYPTOGRAPHIC PROVIDER ステートメントを使用してSQL Serverに登録する必要がある暗号化 EKM プロバイダー DLL です。

  • Azure Key Vault SQL Server コネクタ:これは、暗号化 EKM プロバイダーが資格情報コンテナーと通信できるようにする Windows サービスです。

SQL Server コネクタのインストールでは、必要に応じて、SQL Server の暗号化で使用するサンプル スクリプトをダウンロードすることもできます。

手順 3:EKM プロバイダーを Key Vault に使用する SQL Server の構成

アクセス許可

このプロセス全体を完了するには、CONTROL SERVER 権限、または sysadmin 固定サーバー ロールのメンバーシップが必要です。 特定のアクションで必要な権限は次のとおりです。

  • 暗号化サービス プロバイダーを作成するには、CONTROL SERVER 権限、または sysadmin 固定サーバー ロールのメンバーシップが必要です。

  • 構成オプションを変更して RECONFIGURE ステートメントを実行するには、ALTER SETTINGS サーバーレベル権限が与えられている必要があります。 ALTER SETTINGS 権限は、 sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。

  • 資格情報を作成するには、ALTER ANY CREDENTIAL 権限が必要です。

  • ログインに資格情報を追加するには、ALTER ANY LOGIN 権限が必要です。

  • 非対称キーを作成するには、CREATE ASYMMETRIC KEY 権限が必要です。

暗号化サービス プロバイダーを使用するように SQL Server を構成するには

  1. EKM を使用するようにデータベース エンジンを構成し、暗号化プロバイダーをSQL Serverに登録 (作成) します。

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    
  2. SQL Server暗号化シナリオを設定および管理するために、キー コンテナーを使用するSQL Server管理者ログインのSQL Server資格情報を設定します。

    重要

    CREATE CREDENTIALIDENTITY 引数には、キー コンテナー名が必要です。 の CREATE CREDENTIALSECRET 引数では、<クライアント ID> (ハイフンなし) と<シークレット>を、それらの間にスペースを入れずに渡す必要があります。

    次の例では、 クライアント ID (EF5C8E09-4D2A-4A76-9998-D93440D8115D) がハイフンを取り除かれ、文字列 EF5C8E094D2A4A769998D93440D8115D として入力され、 シークレット文字列SECRET_sysadmin_loginで表されます。

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    引数に変数を CREATE CREDENTIAL 使用し、プログラムによってクライアント ID からハイフンを削除する例については、「 CREATE CREDENTIAL (Transact-SQL)」を参照してください。

  3. 以前に手順 1 のセクション 3 で説明したように非対称キーをインポートした場合は、次の例のようにキー名を提供して、キーを開きます。

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    運用環境では推奨されませんが (キーをエクスポートできないため)、SQL Serverからコンテナーに非対称キーを直接作成できます。 事前にキーをインポートしなかった場合は、次のスクリプトを使用して、テスト用に資格情報コンテナーに非対称キーを作成します。 スクリプトを実行し、 sysadmin_ekm_cred 資格情報を使用してログインのプロビジョニングを行います。

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

ヒント

エラーを受け取ったユーザープロバイダーから公開キーをエクスポートできません。プロバイダーのエラー コード: 2053。キー コンテナーの getlistwrapKeyunwrapKey の各アクセス許可をチェックする必要があります。

詳細については、「

例 A:Key Vault からの非対称キーを使用した透過的データ暗号化

上記の手順を完了した後、資格情報とログインを作成し、資格情報コンテナー内の非対称キーで保護されたデータベース暗号化キーを作成します。 データベース暗号化キーは、データベースを TDE で暗号化するために使用します。

データベースを暗号化するには、データベースに対する CONTROL 権限が必要です。

EKM と資格情報コンテナーを使用して TDE を有効にするには
  1. データベースの読み込み中に Key Vault EKM にアクセスするためにデータベース エンジンが使用する SQL Server 資格情報を作成します。

    重要

    CREATE CREDENTIALIDENTITY 引数には、キー コンテナー名が必要です。 の CREATE CREDENTIALSECRET 引数では、<クライアント ID> (ハイフンなし) と<シークレット>を、それらの間にスペースを入れずに渡す必要があります。

    次の例で、 クライアント ID (EF5C8E09-4D2A-4A76-9998-D93440D8115D) はハイフンを削除した文字列 EF5C8E094D2A4A769998D93440D8115D として入力し、 シークレット は文字列 SECRET_DBEngineとして入力しています。

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. TDE 用データベース エンジンで使用するSQL Server ログインを作成し、そのログインに資格情報を追加します。 この例では、 手順 3 のセクション 3 の説明に従って以前にマスター データベースにインポートまたは作成した、資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. TDE に使用するデータベース暗号化キー (DEK) を作成します。 DEK は、SQL Server でサポートされている任意のアルゴリズムまたはキーの長さを使用して作成できます。 DEK は、資格情報コンテナー内の非対称キーによって保護されます。

    この例では、 手順 3 のセクション 3 の説明に従って以前にインポートまたは作成した、資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    詳細については、「

例 B:Key Vault からの非対称キーを使用したバックアップの暗号化

暗号化されたバックアップは、SQL Server 2014 以降でサポートされています。 次の例では、資格情報コンテナー内の非対称キーで保護したデータ暗号化キーによって暗号化したバックアップを作成し、復元します。

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

復元のサンプル コードです。

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

バックアップ オプションの詳細については、「 BACKUP (Transact-SQL)」を参照してください。

例 C:Key Vault からの非対称キーを使用した列レベルの暗号化

次の例では、資格情報コンテナー内の非対称キーによって保護された対称キーを作成します。 その後、その対称キーを使用してデータベース内のデータを暗号化します。

この例では、 手順 3 のセクション 3 の説明に従って以前にインポートまたは作成した、資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。 この非対称キーを ContosoDatabase データベースで使用するには、CREATE ASYMMETRIC KEY ステートメントをもう一度実行して、 ContosoDatabase データベースにキーへの参照を提供する必要があります。

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

参照

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)Extensible Key Management (EKM)Enable TDE using EKMBackup EncryptionCreate an Encrypted Backup