Microsoft Azure Key Vault 用 SQL Server コネクタを使用すると、SQL Server 暗号化で Azure Key Vault サービスを 拡張キー管理 (EKM) プロバイダーとして利用し、その暗号化キーを保護できます。
このトピックに含まれる内容:
EKM の使用
組織は、SQL Server 暗号化を使用して機密データを保護できます。 SQL Server 暗号化には、 Transparent Data Encryption (TDE)、 列レベル暗号化 (CLE)、 バックアップ暗号化が含まれます。 いずれの場合も、データは対称データ暗号化キーを使用して暗号化されます。 対称データ暗号化キーは、SQL Server に格納されているキーの階層を使用して暗号化することで、さらに保護されます。 または、EKM プロバイダー アーキテクチャを使用すると、SQL Server は外部暗号化プロバイダーの SQL Server の外部に格納されている非対称キーを使用して、データ暗号化キーを保護できます。 EKM プロバイダー アーキテクチャを使用すると、セキュリティレイヤーが追加され、組織はキーとデータの管理を分離できます。
Sql Server Connector for Azure Key Vault を使用すると、SQL Server は EKM プロバイダーとして、スケーラブルで高パフォーマンスで高可用性のキー コンテナー サービスを暗号化キー保護に活用できます。 キー コンテナー サービスは、Microsoft Azure Virtual Machines およびオンプレミス サーバーの SQL Server インストールで使用できます。 また、Key Vault サービスには、非対称暗号化キーに対するより高いレベルの保護のために、厳密に制御および監視されているハードウェア セキュリティ モジュール (HSM) を使用するオプションも用意されています。 キー コンテナーの詳細については、「 Azure Key Vault」を参照してください。
次の図は、キー ボールトを使用した EKM のプロセス フローをまとめたものです。 イメージ内のプロセス ステップ番号は、イメージに続くセットアップ ステップ番号と一致するものではありません。
手順 1: SQL Server で使用する Key Vault を設定する
暗号化キー保護のために SQL Server データベース エンジンで使用するキー コンテナーを設定するには、次の手順に従います。 コンテナーは既に組織で使用されている可能性があります。 コンテナーが存在しない場合、暗号化キーを管理するように指定されている組織内の Azure 管理者は、コンテナーを作成し、コンテナーに非対称キーを生成し、そのキーを使用する SQL Server を承認できます。 Key Vault サービスについて理解するには、「 Azure Key Vault の概要」と PowerShell Azure Key Vault コマンドレット リファレンスを参照してください。
重要
複数の Azure サブスクリプションがある場合は、SQL Server を含むサブスクリプションを使用する必要があります。
コンテナーを作成します。「Azure Key Vault の使用を開始する」の「キー コンテナーの作成」セクションの手順を使用して、コンテナーを作成します。 保管庫の名前を記録します。 このトピックでは、キー コンテナー名として ContosoKeyVault を使用します。
コンテナーに非対称キーを生成します 。キー コンテナー内の非対称キーは、SQL Server 暗号化キーを保護するために使用されます。 非対称キーの公開部分のみがコンテナーから離れ、プライベート部分はコンテナーによってエクスポートされることはありません。 非対称キーを使用するすべての暗号化操作は、Azure Key Vault に委任され、キー コンテナーのセキュリティによって保護されます。
非対称キーを生成してコンテナーに格納するには、いくつかの方法があります。 外部からキーを生成し、そのキーを .pfx ファイルとしてコンテナーにインポートできます。 または、キー コンテナー API を使用して、コンテナー内に直接キーを作成します。
SQL Server コネクタでは、非対称キーが 2048 ビット RSA である必要があり、キー名には文字 "a-z"、"A-Z"、"0-9"、および "-" のみを使用できます。 このドキュメントでは、非対称キーの名前を ContosoMasterKey と呼びます。 これを、キーに使用する一意の名前に置き換えます。
重要
管理者がキー エスクロー システムでキーをエスクローできるため、運用シナリオでは非対称キーのインポートを強くお勧めします。 非対称キーがコンテナーに作成されている場合、秘密キーがコンテナーから離れることがないため、エスクローできません。 重要なデータを保護するために使用されるキーはエスクローする必要があります。 非対称キーが失われると、永続的に回復不能なデータが生成されます。
重要
キー保管庫は、同じ名前のキーの複数バージョンをサポートしています。 SQL Server コネクタで使用するキーは、バージョン管理またはロールしないでください。 管理者が SQL Server 暗号化に使用するキーをロールする場合は、別の名前の新しいキーをコンテナーに作成し、DEK の暗号化に使用する必要があります。
キー コンテナーにキーをインポートする方法、またはキー コンテナーにキーを作成する方法 (運用環境では推奨されません) の詳細については、「Azure Key Vault の概要」の「キー コンテナーへのキーまたはシークレットの追加」セクションを参照してください。
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_DBEngineとSECRET_DBEngine。
キー ボールトにアクセスするためのサービス プリンシパルにアクセス許可を付与します:CLIENTID_sysadmin_login プリンシパルと CLIENTID_DBEngineService プリンシパル の両方に、キー ボールトでの get、list、wrapKey、unwrapKey のアクセス許可が必要です。 SQL Server を使用してキーを作成する場合は、キー コンテナーで 作成 アクセス許可を付与する必要もあります。
重要
ユーザーには、少なくともキー ボールトの wrapKey 操作と unwrapKey 操作が必要です。
コンテナーへのアクセス許可の付与の詳細については、「Azure Key Vault の概要」の「キーまたはシークレットを使用するアプリケーションの承認」セクションを参照してください。
Azure Key Vault のドキュメントへのリンク
PowerShell の Azure Key Vault コマンドレット のリファレンス
手順 2: SQL Server コネクタをインストールする
SQL Server コネクタは、SQL Server コンピューターの管理者によってダウンロードおよびインストールされます。 SQL Server コネクタは、 Microsoft ダウンロード センターからダウンロードできます。 Microsoft Azure Key Vault 用の SQL Server コネクタを検索し、詳細、システム要件、インストール手順を確認し、コネクタをダウンロードして実行を使用してインストールを開始することを選択します。 ライセンスを確認し、ライセンスに同意して続行します。
既定では、コネクタは C:\Program Files\SQL Server Connector 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: Key Vault の EKM プロバイダーを使用するように SQL Server を構成する
権限
このプロセス全体を完了するには、 sysadmin 固定サーバー ロールの CONTROL SERVER 権限またはメンバーシップが必要です。 特定のアクションには、次のアクセス許可が必要です。
暗号化プロバイダーを作成するには、 sysadmin 固定サーバー ロールの CONTROL SERVER アクセス許可またはメンバーシップが必要です。
構成オプションを変更して RECONFIGURE ステートメントを実行するには、ALTER SETTINGS サーバー レベルのアクセス許可が付与されている必要があります。 ALTER SETTINGS 権限は、 sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。
資格情報を作成するには、ALTER ANY CREDENTIAL 権限が必要です。
ログインに資格情報を追加するには、ALTER ANY LOGIN 権限が必要です。
非対称キーを作成するには、CREATE ASYMMETRIC KEY アクセス許可が必要です。
暗号化プロバイダーを使用するように SQL Server を構成するには
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
SQL Server 暗号化シナリオを設定および管理するために、SQL Server 管理者ログインがキー ボールトを使用できるように、SQL Server 資格情報を設定します。
重要
CREATE CREDENTIAL
の IDENTITY 引数には、キー コンテナー名が必要です。CREATE CREDENTIAL
の SECRET 引数では、<Client ID> (ハイフンなし) と <Secret>をスペースなしで一緒に渡す必要があります。次の例では、 クライアント ID (
00001111-aaaa-2222-bbbb-3333cccc4444
) がハイフンを取り除き、文字列00001111AAAA2222BBBB3333CCCC4444
として入力され、 シークレット は文字列 SECRET_sysadmin_loginで表されます。USE master; CREATE CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_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)」を参照してください。手順 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。 は、キー コンテナー内の get、 list、 wrapKey、 unwrapKey のアクセス許可を確認する必要があります。
詳細については以下をご覧ください:
例示
例 A: Key Vault の非対称キーを使用した透過的なデータ暗号化
上記の手順を完了したら、資格情報とログインを作成し、キー コンテナー内の非対称キーによって保護されたデータベース暗号化キーを作成します。 データベース暗号化キーを使用して、TDE を使用してデータベースを暗号化します。
データベースを暗号化するには、データベースに対する CONTROL 権限が必要です。
EKM と Key Vault を使用して TDE を有効にするには
データベースの読み込み中にキー コンテナー EKM にアクセスするときに使用するデータベース エンジンの SQL Server 資格情報を作成します。
重要
CREATE CREDENTIAL
の IDENTITY 引数には、キー コンテナー名が必要です。CREATE CREDENTIAL
の SECRET 引数では、<Client ID> (ハイフンなし) と <Secret>をスペースなしで一緒に渡す必要があります。次の例では、 クライアント ID (
00001111-aaaa-2222-bbbb-3333cccc4444
) がハイフンを取り除き、文字列00001111AAAA2222BBBB3333CCCC4444
として入力され、 シークレット は文字列 SECRET_DBEngineで表されます。USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_DBEngine' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
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
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