適用対象:SQL Server
Azure Key Vaultで保護された非対称鍵を使用する一般的なSQL Server暗号化活動は、以下の3つの分野に分類されます。
- Azure Key Vaultの非対称鍵を使った透過的なデータ暗号化(TDE)。
- キーボールトの非対称鍵を使ってバックアップを暗号化する方法。
- キーボールトから非対称鍵を使用することでカラムレベルの暗号化を行います。
この記事の手順に従う前に、SQL Server の Azure Key Vault を使用した Transparent Data Encryption の設定のステップ 1 から 4 を完了してください。
注
バージョン1.0.0.440以前は新しい版に置き換えられており、本番環境ではサポートされていません。 バージョン1.0.1.0以降にアップグレードしてください。 Microsoft ダウンロード センターから最新バージョンをダウンロードし、SQL Server Connectorのメンテナンスとトラブルシューティングの「SQL Server Connectorのアップグレード」セクションの指示に従ってください。
注
Microsoft Entra ID は以前に Azure Active Directory(Azure AD)として知られていました。
Azure Key Vaultの非対称鍵を用いた透過的なデータ暗号化
SQL Server 向けに Azure Key Vault を使用して Transparent Data Encryption を設定するのステップ 1 から 4 を完了した後、Azure Key Vault のキーを使って、TDE でデータベース暗号化キーを暗号化します。 PowerShell を使用したキーのローテーションの詳細については、PowerShell を使用した透過的データ暗号化 (TDE) プロテクターのローテーション参照してください。
重要
ロールオーバー後に以前のバージョンのキーは削除しないでください。 鍵がロールオーバーされる際、古いデータベースバックアップ、バックアップされたログファイル、トランザクションログファイルなど、一部のデータは以前の鍵で暗号化されたままです。
認証情報とログイン情報を作成し、データベース内のデータとログを暗号化するデータベース暗号化キーを作成する必要があります。 データベースを暗号化するには、データベースに対するCONTROL権限が必要です。 以下の図は、Azure Key Vaultを使用した際の暗号化キーの階層を示しています。
データベース エンジンが TDE に使用する SQL Server の資格情報を作成する
データベース エンジンは、データベースロード中にMicrosoft Entraアプリケーション認証情報を使ってキーボールトにアクセスします。 付与するキー ボールトのアクセス許可を制限するには、データベース エンジン 用に、手順 1: 認証モデルを設定するで説明されているように、別のクライアント IDとシークレットを作成します。
次の Transact-SQL スクリプトを以下のように変更します。
IDENTITY引数 (ContosoDevKeyVault) を編集し、Azure Key Vault を参照するようにします。-
グローバル Azure を使用している場合は、
IDENTITY引数を「手順 2: キー コンテナーを作成する」のお使いの Azure Key Vault の名前に置き換えます。 -
プライベート Azure クラウド (Azure Government、21Vianet が運用する Azure、Azure Germany など) を使用している場合は、
IDENTITYで返される Vault URI で 引数を置き換えてください。 キー コンテナー URI にhttps://は含めないでください。
-
グローバル Azure を使用している場合は、
SECRET引数の最初の部分を、ステップ 1: 認証モデルを設定する の Microsoft Entra アプリケーション Client ID に置き換えます。 この例のクライアント ID はEF5C8E094D2A4A769998D93440D8115Dです。重要
クライアント IDのハイフンは削除してください。
SECRET引数の 2 番目の部分を、手順 1 で取得した クライアント シークレット で完成させます。 この例では、 クライアントシークレット はReplaceWithAADClientSecretです。SECRETの引数の最後の文字列は、ハイフンのない長い文字と数字の列です。
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;データベース エンジンが TDE に使用する SQL Server ログインを作成する
SQL Server ログインを作成し、手順 1. で作成した資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。
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データベース暗号化鍵(DEK)を作成する
DEKはデータベースインスタンス内のデータやログファイルを暗号化し、その後Azure Key Vaultの非対称キーによって暗号化されます。 SQL Serverがサポートする任意のアルゴリズムやキー長を使ってDEKを作成できます。
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GOTDEをオンにしてください
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GOManagement Studioを使って、オブジェクト エクスプローラーでデータベースに接続してTDEが有効かどうか確認してください。 データベースを右クリックし、タスクにカーソルを合わせて、データベースの暗号化の管理を選択します。
[データベース暗号化の管理] ダイアログ ボックスで、TDE が有効になっていることを確認し、DEK の暗号化に使用されている非対称キーを確認します。
代わりに、次の Transact-SQL スクリプトを実行してもかまいません。 暗号化の状態が "3" である場合、データベースが暗号化済みであることを示します。
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;注
いずれかのデータベースで TDE が有効になっている場合は常に、
tempdbデータベースが自動的に暗号化されます。
キーボールトからの非対称鍵を用いたバックアップの暗号化
暗号化されたバックアップは、SQL Server 2014 (12.x) 以降でサポートされています。 以下の例では、鍵保管庫内の非対称鍵によって保護されたデータ暗号化キーで暗号化されたバックアップを作成し、復元します。
データベース エンジンは、データベースロード中にMicrosoft Entraアプリケーション認証情報を使ってキーボールトにアクセスします。 付与するキー コンテナーのアクセス許可を制限するには、手順 1: 認証モデルの設定の説明に従って、データベースエンジン用に別のクライアント ID とシークレットを作成してください。
バックアップ暗号化用にデータベース エンジン用のSQL Server資格情報を作成します
次の Transact-SQL スクリプトを以下のように変更します。
IDENTITY引数 (ContosoDevKeyVault) を編集し、Azure Key Vault を参照するようにします。-
グローバル Azure を使用している場合は、
IDENTITY引数を「手順 2: キー コンテナーを作成する」のお使いの Azure Key Vault の名前に置き換えます。 - たとえば Azure Government、21Vianet が運営する Microsoft Azure、Azure Germany などのプライベート Azure クラウドをご利用の場合は、
IDENTITYの引数を、PowerShell を使用してキー コンテナーとキーを作成するで返される Vault URI に置き換えてください。 キー コンテナー URI にhttps://は含めないでください。
-
グローバル Azure を使用している場合は、
SECRET引数の最初の部分を、ステップ 1: 認証モデルを設定する の Microsoft Entra アプリケーション クライアント ID に置き換えます。 この例のクライアント ID はEF5C8E094D2A4A769998D93440D8115Dです。重要
クライアント IDのハイフンは削除してください。
ステップ1の
SECRETを使用して、引数の2番目の部分を入力します。 この例では、 クライアントシークレット はReplace-With-AAD-Client-Secretです。SECRETの引数の最終的な文字列は、ハイフンのない長い文字と数字の列です。USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
バックアップ暗号化のためにデータベース エンジン用のSQL Serverログインを作成する
データベース エンジンが暗号化バックアップに使用する SQL Server ログインを作成し、手順 1 の資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。
重要
すでにTDE(前例)や列レベルの暗号化(次の例)で同じ非対称鍵を使っている場合は、バックアップに同じ非対称鍵を使うことはできません。
この例では、
masterで説明されているように、データベース用に以前にインポートまたは作成した、キー ボールトに保存されたCONTOSO_KEY_BACKUP非対称キーを使用します。USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GOデータベースをバックアップしてください
Key Vault に保存されている非対称鍵を使用した暗号化を指定して、データベースをバックアップします。
以下の例では、データベースがすでにTDEで暗号化されており、非対称鍵
CONTOSO_KEY_BACKUPがTDE非対称鍵と異なる場合、バックアップはTDE非対称鍵とCONTOSO_KEY_BACKUPの両方で暗号化されます。 ターゲットとなるSQL Serverインスタンスはバックアップを復号するために両方の鍵を必要とします。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_BACKUP]); GOデータベースの復元
TDEで暗号化されたデータベースバックアップを復元するには、ターゲットSQL Serverインスタンスがまず暗号化に使用された非対称キーボールトキーのコピーを持っている必要があります。 コピーを提出する方法:
TDEで使用された元の非対称鍵がキー ボールトに存在しない場合は、キー ボールト キーのバックアップを復元するか、ローカルHSMからキーを再インポートしてください。 キーの指紋をデータベース バックアップに記録された指紋と一致させるには、キーは元々使用していた同じ Key Vault キー名を使用する必要があります。
ターゲットSQL Serverインスタンスに対してステップ1と2を適用します。
ターゲットとなるSQL Serverインスタンスがバックアップの暗号化に使われた非対称鍵にアクセスできるようになったら、サーバー上でデータベースを復元してください。
復元のサンプル コードは次のとおりです。
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GOバックアップ オプションの詳細については、「 BACKUP (Transact-SQL)」を参照してください。
キーボールトからの非対称鍵を用いたカラムレベルの暗号化
次の例では、資格情報コンテナー内の非対称キーによって保護された対称キーを作成します。 対称鍵はデータベース内のデータを暗号化します。
重要
バックアップ暗号化に同じ非対称鍵を使っている場合は、同じ非対称鍵をカラムレベルの暗号化に使うことはできません。
この例では、Key Vault に保存されている CONTOSO_KEY_COLUMNS 非対称キーを使用します。この鍵は、ステップ 2: Key Vault の作成で説明されているように、事前にインポートするか、作成しておくことができます。 この非対称キーを ContosoDatabase データベースで使用するには、CREATE ASYMMETRIC KEY 文を再度実行して ContosoDatabase データベースにキーへの参照を与える必要があります。
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
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_COLUMNS;
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_COLUMNS;
--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;