Blog Post

SQL Server Support Blog
2 MIN READ

Azure KeyVault を用いて AG 環境の暗号化を実施する

moematsuo's avatar
moematsuo
Icon for Microsoft rankMicrosoft
Nov 28, 2022

こんにちは、 SQL Server サポートです。

 

今回は、 Always On 可用性グループを構成するデータベースを Azure Key Vault を利用し TDE 暗号化する手順についてご紹介します。

手順の大まかな流れとしては以下の公開情報の手順を、プライマリ、セカンダリ両方で実施し、同じ非対称キーを用いてTDE暗号化する流れとなります。

 

Azure Key Vault を使用した SQL Server TDE 拡張キー管理を設定する

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/encryption/setup-steps-for-extensible-key-management-using-the-azure-key-vault?view=sql-server-ver16&tabs=portal

 

Azure Portal での手順

Azure Portal にて、「Azure Key Vault を使用した SQL Server TDE 拡張キー管理を設定する」の手順1-3を完了します。

手順 1:Azure AD サービス プリンシパルを設定する

   -> 手順内で取得するクライアント ID 、シークレットはのちの手順で使用するため、必ずメモをしてください。

手順 2:Key Vault を作成します

手順 3:SQL Server コネクタをインストールする

  -> プライマリ、セカンダリ両方に同じバージョンの SQL Server Connector をインストールします。

 

各VM上での手順

1.プライマリサーバーで EKM プロバイダーを有効化します。

 1-1. SQL Server Management Studio でプライマリサーバーに接続します。

 1-2. 次の 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;

 

 

 

 

 1-3. 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';
GO

 

 

 

 

2.キー コンテナーを使用する SQL Server ログイン用の SQL Server 資格情報を設定します。

 

 

 

USE master;
CREATE CREDENTIAL sysadmin_ekm_cred
    WITH IDENTITY = 'ContosoEKMKeyVault',                            -- for public Azure
    -- WITH IDENTITY = 'ContosoEKMKeyVault.vault.usgovcloudapi.net', -- for Azure Government
    -- WITH IDENTITY = 'ContosoEKMKeyVault.vault.azure.cn',          -- for Azure China 21Vianet
    -- WITH IDENTITY = 'ContosoEKMKeyVault.vault.microsoftazure.de', -- for Azure Germany
           --<----Application (Client) ID ---><--Azure AD app (Client) ID secret-->
    SECRET = '9A57CBC54C4C40E2B517EA677E0EFA0008:k?[:XEZFxcwIPvVVZhTjHWXm7w1?m'
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;

 

 

 

クエリ内各項目は、以下の通りに編集してください。

  •  IDENTITY 引数 (ContosoEKMKeyVault) :Azure Key Vault を参照するようにします。
  •  SECRET 引数:最初の部分を、Azure Active Directory のクライアント ID に置き換えます。アプリ (クライアント) ID のハイフンは必ず削除してください。
    2 番目の部分を、クライアント シークレットに置き換えます。完成した SECRET 引数は、ハイフンを含まないアルファベットと数字から成る長い文字列になります。

3. SQL Server インスタンスで Azure Key Vault キーを開きます。

 

 

 

CREATE ASYMMETRIC KEY EKMSampleASYKey
FROM PROVIDER [AzureKeyVault_EKM]
WITH PROVIDER_KEY_NAME = 'ContosoRSAKey0',
CREATION_DISPOSITION = OPEN_EXISTING;

 

 

 

 EKMSampleASYKey の部分は、実際に SQL Server でキーに割り当てる名前に置き換えます。

 ContosoRSAKey0 の部分は、Azure Key Vault 内の実際のキー名に置き換えます。

 

4.前の手順で作成した SQL Server の非対称キーを使用して、新しいログインを作成します。

 

 

 

--Create a Login that will associate the asymmetric key to this login
CREATE LOGIN TDE_Login
FROM ASYMMETRIC KEY EKMSampleASYKey;

 

 

 

 

5.SQL Server の非対称キーから新しいログインを作成します。 手順2. から資格情報マッピングを削除して、資格情報を新しいログインにマップできるようにします。

 

 

 

--Now drop the credential mapping from the original association
ALTER LOGIN [<domain>\<login>]
DROP CREDENTIAL sysadmin_ekm_cred;

 

 

 

 

6.新しいログインを変更して、EKM 資格情報を新しいログインにマップします。

 

 

 

--Now add the credential mapping to the new Login
ALTER LOGIN TDE_Login
ADD CREDENTIAL sysadmin_ekm_cred;

 

 

 

 

7.セカンダリサーバーでも同様に、上記手順の 1-6 まで実施します。

8.Always On 可用性グループを構築します。(すでに構成済みの場合は次の手順へ)

9.プライマリサーバーにてデータベース暗号化キーを作成します。

 

 

 

USE <DB Name>;
--Create an ENCRYPTION KEY using the ASYMMETRIC KEY (EKMSampleASYKey)
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY EKMSampleASYKey;

 

 

 

 

10.プライマリサーバーにてデータベースを暗号化します。

 

 

 

--Enable TDE by setting ENCRYPTION ON
ALTER DATABASE <DB名>
SET ENCRYPTION ON;

 

 

 

 

11.プライマリサーバーにて以下クエリを実行し、暗号化されていることを確認します。

encryption_state = 3 暗号化済み

 

 

 

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;

 

 

 

12. セカンダリサーバーでも同様に手順 11. を実行し、暗号化できていることを確認します。

 

参考)

今回ご紹介した手順は、以下の公開情報を元に作成しました。

●Azure Key Vault を使用した SQL Server TDE 拡張キー管理を設定する

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/encryption/setup-steps-for-extensible-key-management-using-the-azure-key-vault?view=sql-server-ver16&tabs=portal

●Key Vault 統合を有効にして構成する

https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/azure-key-vault-integration-configure?view=azuresql#enable-and-configure-key-vault-integration

●sys.dm_database_encryption_keys (Transact-SQL)

https://learn.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-database-encryption-keys-transact-sql?view=sql-server-ver16

Updated Sep 16, 2024
Version 4.0
No CommentsBe the first to comment