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

SQL Server の構成

適用対象:
SQL Server 2016+SSMS が必要Sysadmin 権限

概要​

このガイドでは、Transparent Data Encryption(TDE)に DuoKey EKM プロバイダーを使用するように Microsoft SQL Server を構成する方法を説明します。構成は 2 つの部分から成ります。ホスト上でのプロバイダー接続ファイルの 1 回限りのセットアップと、EKM を有効にし、プロバイダーを登録し、資格情報を作成し、マスターキーを開く SQL の手順です。

プロバイダー構成ファイル​

SQL を実行する前に、インストール時に C:\ProgramData\DKE\EKM\ に配置した config.toml を完成させます。このファイルには、プロバイダーが DuoKey プラットフォームに到達するために使用する接続設定が格納されています。

C:\ProgramData\DKE\EKM\config.tomlTOML
# DuoKey endpoint
server_url = "https://<cockpit-host>"

# Tenant and application identifiers from your SQL EKM App
tenant_id = "<tenant-id>"
app_id    = "<app-id>"

# Agent key used by the provider to authenticate (single value)
agent_key = "<agent-key>"

# Optional: mutual TLS
# client_cert_path = "C:\\ProgramData\\DKE\\EKM\\client.pem"
# client_key_path  = "C:\\ProgramData\\DKE\\EKM\\client.key"
キーストアの永続化

config.toml と並んで、プロバイダーは同じフォルダーに keystore.json を維持します。これは SQL の非対称キーを DuoKey のキーにマッピングし、TDE で保護されたデータベースが SQL Server サービスの再起動後に自動的に再度開かれるようにします。データベースが暗号化されている間は削除しないでください。

前提条件

  • DuoKey プラットフォームで SQL EKM アプリが作成されていること
  • EKM プロバイダーライブラリと config.toml がホストに配置されていること
  • SQL EKM アプリのエージェントキー
  • SQL Server Management Studio(SSMS)がインストールされていること
  • SQL Server の Sysadmin 権限

構成手順​

1

EKM プロバイダーサポートを有効にする

まず、SQL Server で Extensible Key Management を有効にします。SSMS を開いて次を実行します。

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

-- Enable EKM provider
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GO
ヒント

この手順は SQL Server インスタンスごとに 1 回だけ必要です。

2

暗号プロバイダーを作成する

配置したフォルダーから DuoKey EKM プロバイダーライブラリを登録します。

プロバイダーを作成するSQL
CREATE CRYPTOGRAPHIC PROVIDER DkeEkm
FROM FILE = 'C:\Program Files\DKE\EKM\dke_ekm_provider.dll';
GO
署名が必要です

ライブラリは、このマシンで信頼されているチェーンでコード署名されている必要があります。署名が信頼されていない場合、このコマンドは失敗し、SQL Server はプロバイダーを読み込みません。署名の検証についてはインストールガイドを参照してください。

3

プロバイダー資格情報を作成する

プロバイダーが DuoKey に認証するために使用するエージェントキーを保持する資格情報を作成します。

資格情報を作成するSQL
CREATE CREDENTIAL DkeEkmCredential
WITH IDENTITY = 'DuoKey EKM',
SECRET = '<agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DkeEkm;
GO
パラメーター説明
IDENTITY資格情報の自由記述ラベル。プラットフォームに対して検証されることはありません。
SECRETSQL EKM アプリの唯一のエージェントキー値。
単一のシークレット値

SECRET は 1 つの値、すなわちエージェントキーです。組み合わせるべき Client ID、Client Secret、パスワードはなく、従うべき区切り文字フォーマットもありません。

4

資格情報をログインにマッピングする

暗号化されたデータベースを管理するログインに資格情報をマッピングします。

資格情報をマッピングするSQL
ALTER LOGIN [sa]
ADD CREDENTIAL DkeEkmCredential;
GO
ヒント

TDE を管理するログイン、通常は sysadmin アカウントを使用します。

TDE マスターキーを開く​

TDE マスターキーは DuoKey 内に存在します。ローカルで新しいキーを生成するのではなく、SQL Server からそのキーへの参照を開きます。

1

既存の非対称キーを開く

プロバイダーからマスターキーを開くSQL
USE master;
CREATE ASYMMETRIC KEY TDE_Master
FROM PROVIDER DkeEkm
WITH PROVIDER_KEY_NAME = 'TDE_MASTER',
CREATION_DISPOSITION = OPEN_EXISTING;
GO
パラメーター説明
PROVIDER_KEY_NAMEDuoKey プラットフォーム内のキーの名前。
CREATION_DISPOSITIONOPEN_EXISTING は DuoKey に既にプロビジョニングされているキーを参照します。
作成ではなく開く

CREATION_DISPOSITION = OPEN_EXISTING を使用し、WITH ALGORITHM は指定しないでください。マスターキーは DuoKey にプロビジョニングされており、SQL Server はそのハンドルを開くだけです。

2

非対称キーからログインを作成する

マスターキーに裏付けられたログインを作成し、プロバイダー資格情報をマッピングします。これは、TDE がキーに到達するために使用するエンジンログインです。

エンジンログインを作成し資格情報をマッピングするSQL
USE master;
CREATE LOGIN TDE_Master_Login
FROM ASYMMETRIC KEY TDE_Master;
GO

ALTER LOGIN TDE_Master_Login
ADD CREDENTIAL DkeEkmCredential;
GO

検証​

次のクエリで構成を検証します。

暗号プロバイダーを検証するSQL
SELECT
  name,
  guid,
  is_enabled
FROM sys.cryptographic_providers;
GO
資格情報を検証するSQL
SELECT
  name,
  credential_identity
FROM sys.credentials
WHERE name = 'DkeEkmCredential';
GO
マスターキーがプロバイダーにバインドされていることを検証するSQL
USE master;
SELECT
  ak.name AS KeyName,
  ak.algorithm_desc,
  cp.name AS ProviderName,
  cp.is_enabled
FROM sys.asymmetric_keys ak
INNER JOIN sys.cryptographic_providers cp
  ON ak.cryptographic_provider_guid = cp.guid
WHERE ak.name = 'TDE_Master';
GO
ヒント

結合がプロバイダーの有効な行を返す場合、SQL Server は DuoKey を通じてマスターキーを正常に開いており、データベースで TDE を有効にする準備が整っています。

ベストプラクティス​

セキュリティ

  • EKM 資格情報へのアクセスを sysadmin に限定する
  • config.toml を厳格なフォルダー ACL で保護する
  • SQL Server の監査を有効にする
  • 定期的なエージェントキーローテーションを計画する

パフォーマンス

  • DuoKey への安定したネットワークを確保する
  • キー操作のレイテンシを監視する
  • ホストのクロックを同期させておく

メンテナンス

  • すべての構成を文書化する
  • 災害復旧を定期的にテストする
  • データベースが暗号化されている間は keystore.json を保持する

トラブルシューティング​

次のステップ​