Azure Key Vault (SQL Server) を使用する拡張キー管理
Microsoft Azure Key Vault 用の SQL Server コネクタにより、SQL Server 暗号化は Azure Key Vault サービスを 拡張キー管理 (EKM) プロバイダーとして利用して、その暗号化キーを保護します。
このトピックの内容:
EKM の使用
手順 1 :SQL Server で使用するための Key Vault の設定
手順 2 :SQL Server コネクタのインストール
手順 3 :Key Vault 用に EKM プロバイダーを使用するための SQL Server の構成
例 A:Key Vault からの非対称キーを使用する、透過的なデータ暗号化
例 B:Key Vault からの非対称キーを使用する、バックアップの暗号化
例 C:Key Vault からの非対称キーを使用する、列レベルの暗号化
EKM の使用
組織では SQL Server 暗号化を使用して、機密データを保護できます。 SQL Server 暗号化には、透過的なデータ暗号化 (TDE)、列レベルの暗号化 (CLE)、および Backup Encryption が含まれています。 これらのすべての場合、対称データ暗号化キーを使用してデータが暗号化されます。 対称データ暗号化キーは、SQL Server に格納されているキーの階層を使って暗号化することにより、さらに保護されます。 あるいは、EKM プロバイダーのアーキテクチャにより、SQL Server がデータ暗号化キーを保護することもできます。その場合、SQL Server の外部 (外部暗号化サービス プロバイダー) に格納されている非対称キーを使用します。 EKM プロバイダーのアーキテクチャを使用して、追加のセキュリティ層を追加することにより、組織はキーとデータの管理を分離することができます。
Azure Key Vault 用の SQL Server コネクタにより、SQL Server は、拡張性が高く、高パフォーマンスで高可用性のキー資格情報コンテナー サービスを、EKM プロバイダーとして暗号化キーの保護のために利用します。 キー資格情報コンテナー サービスは、Microsoft Azure Virtual Machines 上またはオンプレミス サーバー用に、SQL Server インストールと共に使用できます。 さらにキー資格情報コンテナー サービスは、非対称暗号化キーの保護のレベルを高めるために、綿密に制御され監視されたハードウェア セキュリティ モジュール (HSM) を使用するというオプションも提供しています。 キー資格情報コンテナーの詳細については、「Azure Key Vault とは」を参照してください。
このページのトップへ
次の図は、キー資格情報コンテナーを使用する EKM のプロセス フローを要約しています。 なお、イメージ内のプロセスの手順番号は、イメージの次にあるセットアップの手順番号に一致するものではありません。
手順 1 :SQL Server で使用するための Key Vault の設定
暗号化キーの保護のために SQL Server データベース エンジン と一緒に使用するキー資格情報コンテナーを設定するには、次の手順を使用してください。 資格情報コンテナーは、組織のために既に使用されている場合があります。 資格情報コンテナーが存在しない場合は、暗号化キーを管理するように指定された組織内の Azure 管理者が、資格情報コンテナーを作成し、そのコンテナー内に非対称キーを生成し、そのキーを使用するよう SQL Server を承認することができます。 キー資格情報コンテナー サービスに精通するため、「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 の概要」の「キーやシークレットを Key Vault に追加する」セクションを参照してください。
重要 ユーザーには、少なくとも、キー資格情報コンテナーに対する wrapKey 操作と unwrapKey 操作が必要です。
SQL Server に使用する Azure Active Directory のサービス プリンシパルを取得します。 Microsoft クラウド サービスのサインアップ時、組織は Azure Active Directory を取得します。 SQL Server がキー資格情報コンテナーにアクセスするときに (Azure Active Directory に対して自身を認証するために) 使用するサービス プリンシパルを Azure Active Directory 内に作成します。
暗号化を使用するように SQL Server を構成するときに、SQL Server 管理者が資格情報コンテナーにアクセスするためには、1 つのサービス プリンシパルが必要になります。
SQL Server データベース エンジン が SQL Server 暗号化で使用されるキーをラップ解除するために資格情報コンテナーにアクセスするには、もう 1 つのサービス プリンシパルが必要です。
アプリケーションを登録し、サービス プリンシパルを生成する方法の詳細については、「Azure Key Vault の概要」の「Azure Active Directory にアプリケーションを登録する」セクションを参照してください。 登録プロセスは、各 Azure Active Directory のサービス プリンシパルごとに、アプリケーション ID (クライアント IDとも呼ばれる) および認証キー (シークレットとも呼ばれる) を返します。 なお、CREATE CREDENTIAL ステートメントで使用するときは、ハイフンはクライアント ID から削除する必要があります。 以下のスクリプトで使用するため、これらを記録します。
sysadmin ログインのサービス プリンシパル:CLIENTID_sysadmin_login と SECRET_sysadmin_login
SQL Server データベース エンジン のサービス プリンシパル:CLIENTID_DBEngine と SECRET_DBEngine。
キー資格情報コンテナーにアクセスするために、サービス プリンシパルのアクセス許可を付与します。 CLIENTID_sysadmin_login と CLIENTID_DBEngine サービス プリンシパルの両方で、キー資格情報コンテナーでの get、list、 wrapKey および unwrapKey のアクセス許可が必要です。 SQL Server を介してキーを作成する予定の場合には、キー資格情報コンテナーでの create アクセス許可を付与する必要もあります。
資格情報コンテナーへのアクセス許可の付与の詳細については、「Azure Key Vault の概要」の「キーまたはシークレットを使用してアプリケーションを承認する」セクションを参照してください。
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 の構成
権限
このプロセス全体を完了するには、CONTROL SERVER 権限、または sysadmin 固定サーバー ロールのメンバーシップが必要です。 特定のアクションには、次のアクセス許可が必要です。
暗号化サービス プロバイダーを作成するには、CONTROL SERVER 権限、または sysadmin 固定サーバー ロールのメンバーシップが必要です。
構成オプションを変更して RECONFIGURE ステートメントを実行するには、ALTER SETTINGS サーバーレベル権限が与えられている必要があります。 ALTER SETTINGS 権限は、sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。
資格情報を作成するには ALTER ANY CREDENTIAL 権限が必要です。
ログインに資格情報を追加するには、ALTER ANY LOGIN 権限が必要です。
非対称キーを作成するには CREATE ASYMMETRIC KEY 権限が必要です。
[Top]
暗号化サービス プロバイダーを使用するように 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 引数には、 <クライアント 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) を参照してください。
手順 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';
詳細については、以下を参照してください。
[Top]
使用例
例 A:Key Vault からの非対称キーを使用する、透過的なデータ暗号化
上記の手順を完了した後に、資格情報とログインを作成し、キー資格情報コンテナー内の非対称キーで保護されているデータベース暗号化キーを作成します。 データベース暗号化キーを使用して、TDE でデータベースを暗号化します。
データベースの暗号化には、データベースに対する CONTROL 権限が必要です。
EKM とキー資格情報コンテナーを使用して TDE を有効にするには
データベースの読み込み中にキー資格情報 コンテナー EKM にアクセスするときに使用する、データベース エンジン 用の SQL Server 資格情報を作成します。
重要 CREATE CREDENTIAL の IDENTITY 引数では、キー資格情報コンテナー名が必要です。 CREATE CREDENTIAL の SECRET 引数には、 <クライアント 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 ;
TDE 用の データベース エンジン によって使用される SQL Server ログインを作成し、資格情報をそれに追加します。 この例では、キー資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。これは、上記の手順 3、セクション 3の説明に従って、マスター データベース用に前もってインポートまたは作成されたものです。
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 は、キー資格情報コンテナー内の非対称キーによって保護されます。
この例では、キー資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。これは、上記の手順 3、セクション 3の説明に従って、前もってインポートまたは作成されたものです。
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 からの非対称キーを使用する、バックアップの暗号化
暗号化されたバックアップは、 以降でサポートされています。 次の例では、キー資格情報コンテナー内の非対称キーで保護されている、バックアップ暗号化されたデータ暗号化キーを作成し、復元します。
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 からの非対称キーを使用する、列レベルの暗号化
次の例では、キー資格情報コンテナー内の非対称キーで保護されている対称キーを作成します。 対称キーは、データベース内のデータの暗号化に使用されます。
この例では、キー資格情報コンテナーに格納されている CONTOSO_KEY 非対称キーを使用します。これは、上記の手順 3、セクション 3の説明に従って、前もってインポートまたは作成されたものです。 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)