メインコンテンツまでスキップ

はじめに

適用対象:
SQL Server 2016+Windows Server 2012 R2+Windows のみEnterprise / Developer

概要​

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 に存在すること

クイックスタート手順​

1

DuoKey プラットフォームで SQL EKM アプリを作成する

DuoKey プラットフォームで SQL EKM アプリケーションを作成します。

  1. DuoKey クラウドプラットフォームにログインします
  2. Apps セクションに移動します
  3. 「Create New APP」 をクリックします
  4. 「DuoKey for SQL」 を選択し、「Install Now」 をクリックします
  5. 必要な詳細を入力し、ロールを割り当てます
  6. キー用のボールトを選択します
  7. セットアップファイルをダウンロードします
  8. セットアップファイルとともに提供される 登録済みエージェントキー を控えておきます
ヒント

セットアップファイルとその登録済みエージェントキーは安全に保管してください。エージェントキーは、SQL Server が DuoKey に認証するために使用する唯一の値です。

2

SQL Server に EKM プロバイダーをインストールする

DuoKey EKM プロバイダーを SQL Server に配置します。プロバイダーは単一の Authenticode 署名済み DLL dke_ekm_provider.dll であり、DuoKey アプリのセットアップファイルによって提供されます。

  1. DuoKey アプリのセットアップファイルを実行してプロバイダーを配置します
  2. dke_ekm_provider.dll を SQL Server サービスが読み取れるフォルダー、たとえば C:\Program Files\DKE\EKM(C:\Windows\System32 ではなく)に配置します
  3. プロバイダーの config.toml が C:\ProgramData\DKE\EKM\config.toml に存在することを確認します
  4. DLL がコード署名されており、その署名チェーンがマシン上で信頼されていることを確認します
重要

SQL Server は署名されていない EKM DLL の読み込みを拒否します。プロバイダーを登録する前に、DLL は Authenticode 署名されており、その署名チェーンが SQL Server マシン上で信頼されている必要があります。

注記

プロバイダーは単一の DLL です。個別に導入するヘルパーライブラリはなく、構成するレジストリキーもありません。すべての接続設定は、セットアップファイルが提供する config.toml に格納されます。

3

SQL Server を構成する

DuoKey EKM プロバイダーを使用するように SQL Server を構成します。

EKM を有効にするSQL
-- Enable advanced options
sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO

-- Enable EKM provider
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GO
暗号プロバイダーを登録するSQL
CREATE CRYPTOGRAPHIC PROVIDER DuoKeyProvider
FROM FILE = 'C:\Program Files\DKE\EKM\dke_ekm_provider.dll';
GO
プロバイダー資格情報を作成するSQL
-- 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;
GO
重要

SECRET は、セットアップファイルに含まれる唯一の登録済みエージェントキーです。<agent-key> をその値に置き換えてください。IDENTITY は単なるラベルであり、任意の名前を選択できます。

ボールトのマスターキーを開くSQL
-- 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;
GO
注記

RSA-2048 マスターキーは DuoKey ボールト内に事前プロビジョニングされており、ボールトから外部に出ることはありません。既存のキーを参照するには CREATION_DISPOSITION = OPEN_EXISTING を使用してください。新しいキーを作成しないでください。

キーからログインと TDE 資格情報を作成するSQL
-- 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
4

最初のデータベースを暗号化する

テストデータベースを作成するSQL
-- Create a test database
CREATE DATABASE TestDB;
GO

USE TestDB;
CREATE TABLE Employees (
  ID INT PRIMARY KEY,
  Name VARCHAR(100),
  SSN VARCHAR(11)
);
GO
TDE 暗号化を有効にするSQL
-- 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;
GO
暗号化ステータスを確認するSQL
SELECT
  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
5

テストと検証

データ操作をテストするSQL
-- 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';
GO
ヒント

encryption_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 がセットアップファイルの登録済みエージェントキーであることを確認してください

次のステップ​

まとめ​

達成した内容

SQL EKM アプリを作成DuoKey プラットフォームで
EKM プロバイダーをインストールSQL Server に
SQL Server を構成外部キー管理向けに
データベースを暗号化DuoKey を使用した TDE で