はじめに
SQL EKM のはじめに
DuoKey EKM で最初のデータベースを暗号化するクイックスタートガイド
概要
DuoKey SQL EKM は、Microsoft SQL Server の Transparent Data Encryption(TDE)向けに外部キー管理を提供します。このガイドでは、最初のデータベースを暗号化するための基本的な手順を順を追って説明します。
前提条件
- Microsoft SQL Server 2016 以降(Windows 上の Enterprise または Developer エディション)
- Windows Server 2012 R2 以降(または開発用の Windows 10/11)
- SQL Server マシンの管理者権限
- SQL Server Management Studio(SSMS)がインストールされていること
- DuoKey クラウドプラットフォームへのアクセス
- DuoKey プラットフォームへのネットワーク接続(HTTPS ポート 443)
- EKM プロバイダー DLL が Authenticode 署名されており、その署名チェーンがマシン上で信頼されていること
- プロバイダーの config.toml が C:\ProgramData\DKE\EKM\config.toml に存在すること
クイックスタート手順
DuoKey プラットフォームで SQL EKM アプリを作成する
DuoKey プラットフォームで SQL EKM アプリケーションを作成します。
- DuoKey クラウドプラットフォームにログインします
- Apps セクションに移動します
- 「Create New APP」 をクリックします
- 「DuoKey for SQL」 を選択し、「Install Now」 をクリックします
- 必要な詳細を入力し、ロールを割り当てます
- キー用のボールトを選択します
- セットアップファイルをダウンロードします
- セットアップファイルとともに提供される 登録済みエージェントキー を控えておきます
セットアップファイルとその登録済みエージェントキーは安全に保管してください。エージェントキーは、SQL Server が DuoKey に認証するために使用する唯一の値です。
SQL Server に EKM プロバイダーをインストールする
DuoKey EKM プロバイダーを SQL Server に配置します。プロバイダーは単一の Authenticode 署名済み DLL dke_ekm_provider.dll であり、DuoKey アプリのセットアップファイルによって提供されます。
- DuoKey アプリのセットアップファイルを実行してプロバイダーを配置します
dke_ekm_provider.dllを SQL Server サービスが読み取れるフォルダー、たとえばC:\Program Files\DKE\EKM(C:\Windows\System32ではなく)に配置します- プロバイダーの
config.tomlがC:\ProgramData\DKE\EKM\config.tomlに存在することを確認します - DLL がコード署名されており、その署名チェーンがマシン上で信頼されていることを確認します
SQL Server は署名されていない EKM DLL の読み込みを拒否します。プロバイダーを登録する前に、DLL は Authenticode 署名されており、その署名チェーンが SQL Server マシン上で信頼されている必要があります。
プロバイダーは単一の DLL です。個別に導入するヘルパーライブラリはなく、構成するレジストリキーもありません。すべての接続設定は、セットアップファイルが提供する config.toml に格納されます。
SQL Server を構成する
DuoKey EKM プロバイダーを使用するように SQL Server を構成します。
-- Enable advanced options
sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
-- Enable EKM provider
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GOCREATE CRYPTOGRAPHIC PROVIDER DuoKeyProvider
FROM FILE = 'C:\Program Files\DKE\EKM\dke_ekm_provider.dll';
GO-- Create provider credential (SECRET is the enrolled agent key from the setup file)
CREATE CREDENTIAL DuoKeyCredential
WITH IDENTITY = 'dke-ekm-service',
SECRET = '<agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO
-- Map credential to login
ALTER LOGIN [sa]
ADD CREDENTIAL DuoKeyCredential;
GOSECRET は、セットアップファイルに含まれる唯一の登録済みエージェントキーです。<agent-key> をその値に置き換えてください。IDENTITY は単なるラベルであり、任意の名前を選択できます。
-- Open the pre-provisioned RSA-2048 master key that lives in the DuoKey vault.
-- PROVIDER_KEY_NAME must match the master key name provisioned for your app.
USE master;
CREATE ASYMMETRIC KEY SQL_EKM_Key
FROM PROVIDER DuoKeyProvider
WITH PROVIDER_KEY_NAME = 'TDE_MASTER',
CREATION_DISPOSITION = OPEN_EXISTING;
GORSA-2048 マスターキーは DuoKey ボールト内に事前プロビジョニングされており、ボールトから外部に出ることはありません。既存のキーを参照するには CREATION_DISPOSITION = OPEN_EXISTING を使用してください。新しいキーを作成しないでください。
-- Create a login mapped to the asymmetric key (used by TDE)
CREATE LOGIN SQL_EKM_Login
FROM ASYMMETRIC KEY SQL_EKM_Key;
GO
-- Create the TDE credential (SECRET is again the enrolled agent key)
CREATE CREDENTIAL SQL_EKM_TdeCred
WITH IDENTITY = 'dke-ekm-tde',
SECRET = '<agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GO
-- Map the TDE credential to the key login
ALTER LOGIN SQL_EKM_Login
ADD CREDENTIAL SQL_EKM_TdeCred;
GO最初のデータベースを暗号化する
-- Create a test database
CREATE DATABASE TestDB;
GO
USE TestDB;
CREATE TABLE Employees (
ID INT PRIMARY KEY,
Name VARCHAR(100),
SSN VARCHAR(11)
);
GO-- Create Database Encryption Key
USE TestDB;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
GO
-- Enable encryption
ALTER DATABASE TestDB
SET ENCRYPTION ON;
GOSELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
CASE encryption_state
WHEN 3 THEN 'Encrypted'
WHEN 2 THEN 'Encryption in progress'
ELSE 'Other'
END AS Status,
percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'TestDB';
GOテストと検証
-- Insert test data
USE TestDB;
INSERT INTO Employees (ID, Name, SSN)
VALUES (1, 'John Doe', '123-45-6789');
GO
-- Query data (works transparently)
SELECT * FROM Employees;
GO
-- Final verification
SELECT
d.name AS DatabaseName,
d.is_encrypted,
dek.encryption_state
FROM sys.databases d
LEFT JOIN sys.dm_database_encryption_keys dek
ON d.database_id = dek.database_id
WHERE d.name = 'TestDB';
GOencryption_state = 3 になると、データベースは完全に暗号化され、DuoKey によって保護されています。
トラブルシューティングクイックリファレンス
よくある問題と解決策
| 問題 | クイック修正 |
|---|---|
| EKM が有効になっていない | sp_configure 'EKM provider enabled', 1; RECONFIGURE; |
| キーを開けない | PROVIDER_KEY_NAME がプロビジョニング済みのマスターと一致していることを確認し、CREATION_DISPOSITION = OPEN_EXISTING を使用してください |
| プロバイダーの読み込みに失敗する | DLL が署名され信頼されていること、および FROM FILE のパスが SQL Server サービスから読み取り可能であることを確認してください |
| DLL が見つからない | dke_ekm_provider.dll がインストールフォルダー、たとえば C:\Program Files\DKE\EKM にあることを確認してください |
| 接続エラー | DuoKey へのネットワーク接続(ポート 443)と、C:\ProgramData\DKE\EKM の config.toml を確認してください |
| 資格情報エラー | SECRET がセットアップファイルの登録済みエージェントキーであることを確認してください |
次のステップ
バックアップと復元
暗号化されたデータベースをバックアップし、他のサーバーに復元する
キーローテーション
セキュリティ強化のために暗号化キーをローテーションする
アンインストール
EKM プロバイダーを適切に削除する