適用対象:SQL Server
この記事では、SQL Server Connector for Azure Key Vaultをインストールして構成した後、Azure Key Vaultのキーを使用してTransparent Data Encryption (TDE) を構成します。
Prerequisites
SQL Server インスタンスでAzure Key Vaultの使用を開始する前に、次の前提条件を満たしていることを確認してください。
Azure のサブスクリプションに登録している必要があります。
Azure PowerShell バージョン 5.2.0 以降をインストールしておくこと。
Microsoft Entra のテナントを作成する。
Azure Key Vaultを使用して拡張キー管理 (EKM) ストレージの原則を確認します。 「Azure Key Vaultを使用した拡張キー管理 (SQL Server)」を参照してください。
SQL Server コンピューターでレジストリを変更できます。
実行中の SQL Server のバージョンに応じた Visual Studio C++ 再頒布可能パッケージのバージョンをインストールしておくこと。
SQL Server のバージョン Visual Studio C++ 再頒布可能パッケージのバージョン 2008、2008 R2、2012、2014 Visual Studio 2013 の Visual C++ 再頒布可能パッケージ 2016, 2017, 2019, 2022, 2025 Visual Studio 2015 の Visual C++ 再頒布可能パッケージ Azure Key Vault 用 SQL Server コネクタをファイアウォールの内側にある Azure Key Vault に対して、またはプロキシ サーバー経由で使用する予定がある場合は、ファイアウォールの内側にある Azure Key Vault へのアクセスを参照してください。
Note
SQL Server 2022 (16.x) CU 12 以降のバージョンでは、SQL Server on Linuxでは、Azure Key Vaultを使用した TDE 拡張キー管理がサポートされています。 このガイドの手順 3 と手順 4 は、SQL Server on Linux では必要ありません。
クイックフロー
- 「手順 1: 認証モデルを設定する」で認証モデルを選択します。
- 「手順 2: Key Vaultを作成する」で Key Vault とキーを作成します。
- 「手順 3: SQL Server コネクタをインストールする」でコネクタをインストールします。
- 「手順 4: EKM プロバイダーをサポートするためのレジストリ キーを追加する」でレジストリの前提条件を構成します。
- 手順 5: SQL Serverの構成でSQL Serverを構成し、暗号化を検証します。
手順 1: 認証モデルを設定する
Important
続行する前に、認証モデルを選択します。
- オンプレミスSQL Serverの [サービス プリンシパル] タブを使用します。
- マネージド ID がサポートされている Azure VM 上の SQL Server または Azure Arc によって有効化された SQL Server では、[マネージド ID] タブを使用します。
認証モデルのサポート マトリックス:
| 認証モデル | SQL Server のバージョン | SQL Serverの実行場所 | サポートされている |
|---|---|---|---|
| サービス プリンシパル | この記事の対象となるサポートされているバージョン | オンプレミス、Azure VM、Azure Arc 対応 SQL Server | はい |
| マネージド ID | SQL Server 2022 CU17 以降 | AZURE VM | はい |
| マネージド ID | SQL Server 2025 以降 | Azure Arc によって有効化された SQL Server | はい |
| マネージド ID | Any | On-premises | いいえ |
SQL Server インスタンスのアクセス許可を Azure Key Vault に付与するためには、Microsoft Entra ID にサービス プリンシパル アカウントが必要です。
Azure ポータルにサインインし、次のいずれかの手順を実行します。
[Microsoft Entra ID] ボタンを選択します。
[その他のサービス] を選択してから、[すべてのサービス] ウィンドウに [Microsoft Entra ID] と入力します。
次の手順を実行して、アプリケーションをMicrosoft Entra IDに登録します。 詳しい段階的な手順については、Azure Key Vault のブログ投稿である、「Azure Key Vault - 段階的な説明」の「アプリケーションの ID を取得する」セクションを参照してください。
[Microsoft Entra ID] リソースの [管理] セクションで、[アプリの登録] を選択します。
アプリの登録 ページで、新しい登録 を選択します。
[アプリケーションの登録] ペインで、アプリのユーザー向け表示名を入力してから、[登録] を選択します。
左側のウィンドウで、 証明書とシークレット>クライアント シークレット>新しいクライアント シークレットの順に選択します。
[クライアント シークレットの追加] で、説明と適切な有効期限を入力してから、[追加] を選択します。 24 か月を超える有効期限を選択することはできません。 詳細については、「クライアント シークレットの追加」を参照してください。
[証明書とシークレット] ウィンドウの [値] で、クライアント シークレットの値の横にある [コピー] ボタンを選択して、それを使用してSQL Serverに非対称キーを作成します。
左側のウィンドウで [概要] を選択し、[アプリケーション (クライアント) ID] ボックスで値をコピーし、それを使用してSQL Serverに非対称キーを作成します。
手順 2: キー ボールトを作成する
キー ボールトの作成方法を選択します。
Note
Azure Key Vault と Azure Key Vault Managed HSM のみがサポートされています。 Azure Cloud HSM はサポートされていません。
Azure portal を使用してキー ボルトを作成する
Azure ポータルを使用してキー コンテナーを作成するには、「クイック スタート: Azure ポータルを使用してキー コンテナーを作成する」を参照してください。
Azure ロールベースのアクセス制御
Azureロールベースのアクセス制御 (RBAC) を使用して、Azure Key Vaultへのアクセスを管理します。 従来のアクセス ポリシーは使用しないでください。 レガシ アクセス ポリシーには既知のセキュリティ脆弱性があり、Privileged Identity Management (PIM) のサポートがないため、重要なデータやワークロードには使用しないでください。 Azure Key Vault RBAC アクセス許可の詳細については、「キー コンテナー データ プレーン操作用の Azure 組み込みロール」を参照してください。
作成したキー コンテナー リソースに移動し、[アクセス制御 (IAM)] 設定を選択します。
[追加>][ロール割り当ての追加] の順に選択します。
EKM アプリケーションまたはマネージド ID では、ラップ操作とラップ解除操作を実行するために、Key Vault Crypto Service Encryption ユーザー ロールが必要です。 [キー コンテナー暗号化サービスの暗号化ユーザー] を検索してロールを選択します。 次へを選択します。
[メンバー] タブで、[メンバーの選択] オプションを選択し、手順 1 で作成したMicrosoft Entra アプリケーションまたはマネージド ID を検索します。 アプリケーションまたはマネージド ID を選択し、[選択] ボタンを 選択 します。
[確認と割り当て] を 2 回選択して、ロールの割り当てを完了します。
キーを作成する
キーを作成するユーザーには、キー コンテナー 管理者 ロールが必要です。 前の手順と同様に、キーを作成するメンバーを追加し、ロールを割り当てます。
[キー コンテナー] ウィンドウで [キー] を選択し、[生成/インポート] オプションを選択します。 この操作により、[ キーの作成 ] ウィンドウが開きます。 [生成] オプションを選択し、キーの名前を入力します。 SQL Server コネクタを使用する場合、キー名に使用できる文字は、"a ~ z"、"A ~ Z"、"0 ~ 9"、"-" に限られます。また、26 文字が長さの上限となります。
キーの種類は [RSA] を、RSA キー サイズ は [2048] を使用します。 EKM では現在、RSA キーのみがサポートされています。 アクティブ化と有効期限の日付を適宜設定し、[有効] を [はい] に設定します。
Azure Key Vault Managed HSM の構成 (省略可能)
Azure Key Vault Managed HSM (ハードウェア セキュリティ モジュール) では、最新バージョンの SQL Server コネクタとAzure SQLを使用する場合に、SQL ServerとSQL Server on Azure Virtual Machines (VM) がサポートされます。 マネージド HSM は、フルマネージド、高可用性、シングルテナント HSM サービスです。 マネージド HSM は、暗号化操作とキー ストレージ用のセキュリティで保護された基盤を提供します。 マネージド HSM は、最も厳格なセキュリティとコンプライアンスの要件を満たすように設計されています。
手順 2 では、Azure Key Vaultでキー コンテナーとキーを作成する方法を示します。 必要に応じて、Azure Key Vault Managed HSM を使用して、SQL Server コネクタのキーを格納または作成できます。 次の手順に従います。
Azure ポータル、Azure CLI、PowerShell、または ARM テンプレートを使用して、Azure Key Vault Managed HSM を作成します。
マネージド HSM のアクティブ化。 アクティブ化できるのは、作成時に割り当てられた指定された管理者だけです。 Azure ポータルで、Managed HSM リソースを選択し、[概要] メニューの [セキュリティ ドメインのダウンロード] を選択します。 いずれかのクイックスタートに従って 、Managed HSM をアクティブ化します。
Microsoft Entra サービス プリンシパルまたはマネージド ID に対して、Managed HSM にアクセスするためのアクセス許可を付与します。 マネージド HSM 管理者ロールでは、キーを作成するためのアクセス許可は付与されません。 手順 2 と同様に、EKM アプリケーションまたはマネージド ID では、ラップ操作とラップ解除操作を実行するために、Managed HSM Crypto User ロールまたは Managed HSM Crypto Service Encryption User ロールが必要です。 詳細については、「マネージド HSM のローカル RBAC 組み込みロール」を参照してください。
Azure Key Vault マネージド HSM サービス メニューの [設定] で、[キー] を選択します。 [キー] ウィンドウで、[バックアップの生成/インポート/復元] を選択してキーを作成するか、既存のキーをインポートします。
Note
アルゴリズムの RSA-HSM_2048 と RSA-HSM_3072 は、SQL Server 2022 (16.x) 累積更新プログラム 13 以降でサポートされています。
Azure Key Vault Managed HSM では、キーの自動ローテーションがサポートされます。 詳細については、「Azure Managed HSM でキーの自動ローテーションを構成する」を参照してください。
マネージド HSM はプライベート エンドポイント接続をサポートします。 詳しくは、「マネージド HSM と Azure Private Link を統合する」をご覧ください。 この構成では、Azure Key Vault Managed HSM ネットワーク設定でMicrosoft信頼されたサービス バイパス オプションを有効にする必要があります。
手順 3: SQL Server コネクタのインストール
SQL Server管理者に、Microsoft ダウンロード センターから最新バージョンの SQL Server Connector for Microsoft Azure Key Vaultをダウンロードし、インストーラーを実行させます。
デフォルトでコネクタは C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault にインストールされています。 この場所はセットアップ時に変更できます。 変更する場合は、次のセクションでスクリプトを調整します。
正常にインストールされると、コンピューターに Microsoft.AzureKeyVaultService.EKM.dll が配置されます。 このアセンブリは、暗号化 EKM プロバイダー DLL です。
CREATE CRYPTOGRAPHIC PROVIDER ステートメントを使用して、SQL Serverに登録します。
インストーラーには、SQL Server暗号化用のサンプル スクリプトも用意されています。
エラー コードの説明、構成設定、またはメンテナンス タスクについては、次を参照してください。
手順 4: EKM プロバイダーをサポートするレジストリ キーを追加する
Warning
何を行っているかを正確に把握しているSQL Server管理者のみが、レジストリを変更する必要があります。 変更が正しくないと、重大な問題が発生する可能性があります。 問題が発生した場合に復元できるように、変更を加える前にレジストリをバックアップします。
regeditを実行して、レジストリ エディターを開きます。
SQL Server Cryptographic ProviderでHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Providerレジストリ キーを作成します。SQL Server Cryptographic Providerレジストリ キーを右クリックし、[アクセス許可] を選択します。SQL Server サービスを実行しているユーザー アカウントに、 キーの
SQL Server Cryptographic Providerを付与します。
[Apply](適用) 、 [OK] の順に選択します。
レジストリ エディターを閉じて、SQL Server サービスを再起動します。
Note
フェールオーバー クラスター インスタンスで TDE と EKM またはAzure Key Vaultを使用する場合は、クラスター レジストリ チェックポイント ルーチンにも
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Providerを追加して、レジストリがノード間で同期されるようにします。これによって、フェールオーバー後のデータベースの復旧とキーのローテーションが容易になります。次の PowerShell コマンドを実行して、チェックポイント ルーチンにレジストリ キーを追加します。
Add-ClusterCheckpoint -RegistryCheckpoint "SOFTWARE\Microsoft\SQL Server Cryptographic Provider" -Resourcename "SQL Server"
手順 5: SQL Server を構成する
このセクションの各操作に最低限必要な権限レベルについては、「B. よく寄せられる質問」を参照してください。
フェーズ 1: 暗号化プロバイダーと資格情報を構成する master
認証モデルを選択し、一致する手順に従います。
sqlcmd を実行するか、SQL Server Management Studio を開きます。
次の Transact-SQL スクリプトを実行して、EKM を使用するように SQL Server を構成します。
-- Enable advanced options. USE master; GO EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO -- Enable EKM provider EXEC sp_configure 'EKM provider enabled', 1; GO RECONFIGURE;SQL Server に EKM プロバイダーとして SQL Server コネクタを登録します。
Azure Key Vault の EKM プロバイダーである SQL Server コネクタを使用して暗号化サービス プロバイダーを作成します。 この例では、プロバイダー名は
AzureKeyVault_EKMです。CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll'; GONote
ファイル パスは 256 文字以内で指定してください。
キー コンテナーを使用するために SQL Server ログイン用の SQL Server 資格情報を設定します。
キー コンテナーのキーを使用して暗号化を実行する資格情報を各ログインに追加します。 資格情報とログインの間には 1 対 1 のマッピングがあります。各ログインには一意の資格情報が必要です。
この Transact-SQL スクリプトを以下のように変更します。
IDENTITY引数 (DocsSampleEKMKeyVault) を編集し、Azure Key Vault を参照するようにします。-
グローバル Azure を使用している場合は、
IDENTITY引数を「手順 2: キー コンテナーを作成する」のお使いの Azure Key Vault の名前に置き換えます。 -
プライベート Azure クラウド (たとえば、Azure Government、21Vianet によって動作するMicrosoft Azure、Azure Germany) を使用している場合は、「
IDENTITYする」で返されるコンテナー URI で引数を置き換えます。 キー コンテナー URI にhttps://は含めないでください。
-
グローバル Azure を使用している場合は、
SECRET引数の最初の部分を、「手順 1: 認証モデルを設定する」の Microsoft Entra クライアント ID に置き換えます。 この例のクライアント ID はd956f6b9xxxxxxxです。Important
アプリ (クライアント) ID からハイフンを削除します。
手順 1 の
SECRETを使用して、引数の 2 番目の部分を完了します。 最後の文字列は、ハイフンのない長い文字と数字のシーケンスです (クライアント シークレット自体のハイフンを除きます)。
USE master; CREATE CREDENTIAL sysadmin_ekm_cred -- Set IDENTITY to the vault name (public Azure) or full vault hostname without https:// (sovereign clouds / Managed HSM) -- See https://learn.microsoft.com/azure/key-vault/general/about-keys-secrets-certificates#dns-suffixes-for-base-url WITH IDENTITY = 'DocsSampleEKMKeyVault', --<----Application (Client) ID ---><--Microsoft Entra app (Client) ID secret--> SECRET = 'd956f6b9xxxxxxxyrA8X~PldtMCvUZPxxxxxxxx' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM; -- Add the credential to the SQL Server administrator's domain login ALTER LOGIN [<domain>\<login>] ADD CREDENTIAL sysadmin_ekm_cred;変数を使用し、プログラムによってクライアント ID からハイフンを削除する例については、 CREATE CREDENTIALを参照してください。
SQL Server インスタンスでAzure Key Vault キーを開きます。
新しいキーを作成したか、「手順 2: キー コンテナーを作成する」で非対称キーをインポートしたかに関係なく、
CREATE ASYMMETRIC KEYを使用してSQL Serverでキーを開きます。Important
この手順を実行する前に、レジストリの前提条件を完了してください。
次の例では:
-
EKMSampleASYKeyを、SQL Serverで使用する名前に置き換えます。 -
ContosoRSAKey0を、Azure Key Vault または Managed HSM のキー名に置き換えます。
バージョンレス キー名を使用します (ほとんどのシナリオで推奨)。
CREATE ASYMMETRIC KEY EKMSampleASYKey FROM PROVIDER [AzureKeyVault_EKM] WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0', CREATION_DISPOSITION = OPEN_EXISTING;操作を 1 つのバージョンにピン留めする必要がある場合は、特定のキー バージョンを使用します。
CREATE ASYMMETRIC KEY EKMSampleASYKey FROM PROVIDER [AzureKeyVault_EKM] WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0/1a4d3b9b393c4678831ccc60def75379', CREATION_DISPOSITION = OPEN_EXISTING;この例では、
1a4d3b9b393c4678831ccc60def75379は、データベース操作SQL Server使用する特定のキー バージョンです。-
前の手順で作成した SQL Server の非対称キーを使用して、新しいログインを作成します。
-- Create a login that associates the asymmetric key with this login CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY EKMSampleASYKey;資格情報マッピングを元の管理者ログインから非対称キーから作成されたログインに移動します。
SQL Serverは、EKM 操作に非対称キー (
TDE_Login) から作成されたログインを使用します。 暗号化と回復の操作中にSQL ServerがAzure Key Vaultにアクセスできるようにするには、元のセットアップ ログインではなく、資格情報をTDE_Loginにマップします。-- Remove the service principal credential from the original setup login ALTER LOGIN [<domain>\<login>] DROP CREDENTIAL sysadmin_ekm_cred; -- Map the service principal credential to the login created from the asymmetric key ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
フェーズ 2: ユーザー データベースを暗号化して検証する
暗号化するユーザー データベースを構成する
Azure Key Vault キーを使用して暗号化するテスト データベースを作成します。
-- Create a test database for the TDE example. CREATE DATABASE TestTDE;サーバー非対称キー (
EKMSampleASYKey) を使用してデータベース暗号化キーを作成します。USE TestTDE; -- Create a DEK protected by the EKM asymmetric key. CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;ENCRYPTION ON設定して、データベースで TDE を有効にします。-- Enable TDE for the database. ALTER DATABASE TestTDE SET ENCRYPTION ON;
キーの使用状況と暗号化の状態を確認する
masterデータベースで、次の Transact-SQL クエリを実行して、EKM 非対称キーが存在することを確認し、その拇印をキャプチャします。SELECT name, algorithm_desc, thumbprint FROM sys.asymmetric_keys;このステートメントは、次のような出力を返します。
name algorithm_desc thumbprint EKMSampleASYKey RSA_2048 <key thumbprint>ユーザー データベース (
TestTDE) で、次の Transact-SQL クエリを実行して、TDE が有効であること、およびデータベース暗号化キーが非対称キーによって保護されていることを確認します。SELECT encryptor_type, encryption_state_desc, encryptor_thumbprint FROM sys.dm_database_encryption_keys WHERE database_id = DB_ID('TestTDE');このステートメントは、次のような出力を返します。
encryptor_type encryption_state_desc encryptor_thumbprint ASYMMETRIC KEY ENCRYPTED <key thumbprint>encryptor_thumbprintがsys.asymmetric_keysから返された拇印と一致することを確認します。 不一致は、通常、データベース暗号化キーが想定とは異なるキーによって保護されていることを示します。
クリーンアップ
構成した認証モデルに一致するクリーンアップ手順を使用します。
この手順で作成したテスト オブジェクトをクリーンアップします。
-- CLEAN UP: shared objects + service principal credential USE master; GO ALTER DATABASE [TestTDE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [TestTDE]; GO DROP LOGIN [TDE_Login]; GO DROP ASYMMETRIC KEY [EKMSampleASYKey]; DROP CRYPTOGRAPHIC PROVIDER [AzureKeyVault_EKM]; GO DROP CREDENTIAL [sysadmin_ekm_cred]; GOSQL Server Cryptographic Providerレジストリ キーを削除する必要があるかどうかを確認します。Important
EKM キーを削除した後、
SQL Server Cryptographic Providerレジストリ キーは自動的に削除されません。インスタンスで EKM が不要になった場合にのみ、このレジストリ キーを削除します。 早期に削除すると、EKM の機能と回復操作が中断される可能性があります。
レジストリ パス:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQL Server Cryptographic Provider
Azure Key Vaultを使用して TDE の非対称キーをローテーションする
認証固有のスクリプト、検証、安全性チェックなど、キーローテーションの手順に専用の運用ガイドを使用します。
Important
ローテーション後に以前のバージョンのキーは削除しないでください。 古いバックアップ、ログ ファイル、回復成果物を復元するには、以前のバージョンが必要な場合があります。