はじめに

こんにちは。あやかです。

今回は、Synology NASでKMIP(Key Management Interoperability Protocol)を使って、ボリューム暗号化のキーを安全に管理する環境を構築した話です。 技術的な興味もありましたが、何より暗号化キーをもっと安全に保管したいと思ったのがきっかけでした。

KMIPとは - 暗号化キー管理の課題

KMIPは、暗号化キーを集中管理するための業界標準プロトコルです。

Synology NASでボリューム全体を暗号化する場合、暗号化キーをどこに保管するかが問題になります。 デフォルトでは、暗号化キーはNAS本体に保存されますが、これだとNAS自体が盗まれた場合にリスクがあります。

KMIPを使うと、暗号化キーを別のサーバー(今回はもう1台のNAS)で管理できるようになります。 これにより、物理的に分離された場所にキーを保管できるため、セキュリティが向上します。

導入のメリット

  • キーの集中管理: 複数のNASの暗号化キーを1カ所で管理できる
  • 物理的な分離: NAS本体とキーを別々に保管できる
  • 標準プロトコル: 業界標準なので、将来的に他の機器との連携も可能

導入のデメリット

  • 構築の手間: 証明書の作成やサーバー設定が必要
  • 可用性の問題: KMIPサーバーが停止すると、暗号化ボリュームにアクセスできなくなる
  • 管理の複雑さ: 証明書の有効期限管理などが必要

今回は、2台のNASを相互にKMIPサーバー兼クライアントとして動作させることで、可用性の問題も緩和しています。

環境情報

今回使用した環境は以下の通りです。

  • NAS1: Synology DS923+ (192.168.5.128)

    • DSM 7.3.2-86009
    • 役割: KMIPサーバー兼クライアント
  • NAS2: Synology DS224+ (192.168.13.249)

    • DSM 7.3.2-86009
    • 役割: KMIPサーバー兼クライアント

両方のNASが、お互いのKMIPサーバーに接続する相互接続の構成です。

自己署名証明書を選んだ理由

今回、商用CAではなく、自己署名証明書を使用しました。 理由は以下の3つです。

1. IPアドレス指定での接続

NAS同士の接続はIPアドレスで行うため、CNにIPアドレスを含む証明書が必要でした。 商用CAでIPアドレス入りの証明書を発行するのは手間がかかるため、自己署名を選択しました。

2. 長期間有効な証明書

証明書の更新作業を頻繁にやりたくなかったので、10年間有効な証明書にしました。 商用CAだと、ここまで長期の証明書は発行できないことが多いです。

3. コスト

家庭内での利用なので、コストをかける必要がありませんでした。

Root CA(認証局)の作成

まず、自分専用のRoot CA(認証局)を作成します。 DS923+のSSHにログインして作業を進めました。

作業用ディレクトリの作成

admin@DS923:~$ mkdir kmip-certs
admin@DS923:~$ cd kmip-certs/

Root CA用の秘密鍵を生成

admin@DS923:~/kmip-certs$ openssl genrsa -out rootCA.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...........................++++
................................................++++
e is 65537 (0x010001)

Root CA証明書の作成

admin@DS923:~/kmip-certs$ openssl req -x509 -new -nodes -key rootCA.key \
  -sha256 -days 3650 -out rootCA.crt \
  -subj "/C=JP/ST=<都道府県名>/O=Home-CA/CN=Home Root CA"
Can't load /var/services/homes/admin/.rnd into RNG
140253802579776:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/var/services/homes/admin/.rnd

エラーメッセージが出ていますが、これは乱数生成用のファイルが見つからないという警告です。 証明書自体は正常に作成されているため、実害はありません。

作成されたファイルの確認

admin@DS923:~/kmip-certs$ ls -la
total 8
drwxrwxrwx+ 1 admin users   40 Jan  6 14:20 .
drwxrwxrwx+ 1 admin users   28 Jan  6 14:20 ..
-rwxrwxrwx+ 1 admin users 1935 Jan  6 14:20 rootCA.crt
-rwxrwxrwx+ 1 admin users 3243 Jan  6 14:19 rootCA.key

これで、自分専用のRoot CAが完成しました。

サーバー証明書の発行

次に、各NAS用のサーバー証明書を発行します。

各NAS用の秘密鍵を生成

admin@DS923:~/kmip-certs$ openssl genrsa -out kmip-server1.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...........................++++
.......................................++++
e is 65537 (0x010001)

admin@DS923:~/kmip-certs$ openssl genrsa -out kmip-server2.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...........................................................................++++
................................................................................................................................................................++++
e is 65537 (0x010001)

CSR(証明書署名要求)の作成

CNにはそれぞれのNASのIPアドレスを指定します。

admin@DS923:~/kmip-certs$ openssl req -new -key kmip-server1.key -out kmip-server1.csr \
  -subj "/C=JP/ST=<都道府県名>/O=Home/CN=192.168.5.128"

admin@DS923:~/kmip-certs$ openssl req -new -key kmip-server2.key -out kmip-server2.csr \
  -subj "/C=JP/ST=<都道府県名>/O=Home/CN=192.168.13.249"

SAN(Subject Alternative Name)設定ファイルの作成

IPアドレスでの接続を可能にするため、SANにIPアドレスを含めます。

DS923+用(192.168.5.128)

admin@DS923:~/kmip-certs$ cat > san1.cnf <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.5.128
EOF

DS224+用(192.168.13.249)

admin@DS923:~/kmip-certs$ cat > san2.cnf <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.13.249
EOF

証明書の署名

Root CAを使って、各NAS用の証明書に署名します。

admin@DS923:~/kmip-certs$ openssl x509 -req -in kmip-server1.csr \
  -CA rootCA.crt -CAkey rootCA.key -CAcreateserial \
  -out kmip-server1.crt -days 3650 -sha256 \
  -extfile san1.cnf -extensions v3_req
Signature ok
subject=C = JP, ST = <都道府県名>, O = Home, CN = 192.168.5.128
Getting CA Private Key

admin@DS923:~/kmip-certs$ openssl x509 -req -in kmip-server2.csr \
  -CA rootCA.crt -CAkey rootCA.key -CAcreateserial \
  -out kmip-server2.crt -days 3650 -sha256 \
  -extfile san2.cnf -extensions v3_req
Signature ok
subject=C = JP, ST = <都道府県名>, O = Home, CN = 192.168.13.249
Getting CA Private Key

これで、10年間有効なサーバー証明書が完成しました。

DSMへの証明書登録

作成した証明書を、各NASのDSMに登録します。

証明書ファイルの準備

各NASには、以下のファイルが必要です。

  • DS923+用:

    • rootCA.crt (Root CA証明書)
    • kmip-server1.crt (サーバー証明書)
    • kmip-server1.key (秘密鍵)
  • DS224+用:

    • rootCA.crt (Root CA証明書)
    • kmip-server2.crt (サーバー証明書)
    • kmip-server2.key (秘密鍵)

DSMでの証明書インポート

  1. DSMにログイン
  2. 「コントロールパネル」→「セキュリティ」→「証明書」を開く
  3. 「追加」をクリック
  4. 「新しい証明書を追加」を選択
  5. 「既存の証明書をインポート」を選択
  6. 以下のファイルを指定
    • 秘密鍵: kmip-server1.key (または kmip-server2.key)
    • 証明書: kmip-server1.crt (または kmip-server2.crt)
    • 中間証明書: 空欄のまま
  7. 「OK」をクリック
証明書インポート画面
証明書インポート画面

KMIPサーバーの有効化

各NASでKMIPサーバーを有効化します。

DS923+での設定

  1. DSMにログイン
  2. 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
  3. 「リモートキーサーバーとして設定」にチェック
  4. 「設定」をクリック
  5. 「クライアント接続の管理」→「管理」をクリック
  6. 「追加」をクリック
  7. 以下の項目を設定
    • クライアント証明書: DS224+のクライアント証明書を選択
    • 証明機関: ルート証明書を選択
  8. 「追加」をクリック
  9. 「保存」をクリック
  10. 「適用」をクリック
KMIPサーバー有効化画面(DS923+)
KMIPサーバー有効化画面(DS923+)

DS224+での設定

DS224+でも同様の手順でKMIPサーバーを有効化します。

  1. DSMにログイン
  2. 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
  3. 「リモートキーサーバーとして設定」にチェック
  4. 「設定」をクリック
  5. 「クライアント接続の管理」→「管理」をクリック
  6. 「追加」をクリック
  7. 以下の項目を設定
    • クライアント証明書: DS923+のクライアント証明書を選択
    • 証明機関: ルート証明書を選択
  8. 「追加」をクリック
  9. 「保存」をクリック
  10. 「適用」をクリック

これで、両方のNASがKMIPサーバーとして動作するようになりました。

相互接続の設定

次に、各NASから相手のKMIPサーバーに接続する設定を行います。

DS923+からDS224+への接続

  1. DS923+のDSMにログイン
  2. 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
  3. 「リモートの重要なクライアントとして設定」にチェックを入れる
  4. 「編集」をクリック
  5. 以下の項目を入力
    • ホスト名: 192.168.13.249
    • ポート: 5696
    • 証明機関: ルート証明書を選択
  6. 「次へ」をクリック
  7. 「信頼する」をクリック
KMIP接続設定画面(DS923+)
KMIP接続設定画面(DS923+)

DS224+からDS923+への接続

DS224+でも同様の手順で、DS923+のKMIPサーバーに接続します。

  1. DS224+のDSMにログイン
  2. 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
  3. 「リモートの重要なクライアントとして設定」にチェックを入れる
  4. 「編集」をクリック
  5. 以下の項目を入力
    • ホスト名: 192.168.5.128
    • ポート: 5696
    • 証明機関: ルート証明書を選択
  6. 「次へ」をクリック
  7. 「信頼する」をクリック

接続確認

接続が成功すると、ステータスが「Success」と表示されます。

KMIP接続状態の確認
KMIP接続状態の確認

もし接続に失敗する場合は、以下を確認してください。

  • ファイアウォールでポート5696が開いているか
  • 証明書が正しくインポートされているか
  • IPアドレスが正しいか

ボリューム暗号化での利用

KMIPの設定が完了したら、実際にボリューム暗号化で使用します。

ボリュームの暗号化

  1. 「ストレージマネージャ」を開く
  2. 「ストレージプール」→「グローバル設定」を選択
  3. 保管室の場所が「ローカル」になっていることを確認
  4. 「リセット」をクリック
  5. 保管室パスワードに暗号化保管室のパスワードを入力
  6. 「KMIPサーバ」を選択して「リセット」をクリック
  7. ログインしているDSMアカウントのパスワードを入力して「送信」をクリック
  8. 保管室の場所が「KMIPサーバ」になっていること、ホスト名に相手NASのホスト名が表示されていることを確認
  9. 「保存」をクリック
ボリューム暗号化設定画面
ボリューム暗号化設定画面

動作確認

ボリュームが正常に作成されると、暗号化キーはKMIPサーバーで管理されるようになります。 NAS本体には暗号化キーが保存されないため、万が一NASが盗まれても、データの安全性が保たれます。

セキュリティ上の注意点

KMIP環境を運用する上で、いくつか注意しておきたいポイントがあります。

Root CA秘密鍵の管理

Root CAの秘密鍵(rootCA.key)は、非常に重要なファイルです。 これが漏洩すると、偽の証明書を作成される可能性があります。

  • 保管場所: オフラインのUSBメモリなど、安全な場所に保管
  • バックアップ: 複数の場所に分散して保管
  • アクセス制限: 必要なとき以外はアクセスできないようにする

証明書の有効期限

今回は10年間有効な証明書を作成しましたが、有効期限が切れる前に更新が必要です。 カレンダーなどに更新予定日をメモしておくことをおすすめします。

有効期限が切れると、KMIP接続ができなくなり、暗号化ボリュームにアクセスできなくなる可能性があります。

バックアップの重要性

KMIPサーバーが故障すると、暗号化キーにアクセスできなくなります。 今回は2台構成にすることで冗長化していますが、それでも以下のバックアップは必須です。

  • 証明書と秘密鍵のバックアップ: 定期的にオフラインに保存
  • DSM設定のバックアップ: 復旧時に設定を再現できるように
  • データのバックアップ: 暗号化されていないバックアップも別途保管

KMIPサーバーの可用性

KMIPサーバーが停止すると、暗号化ボリュームにアクセスできなくなります。 再起動時には、KMIPサーバーが先に起動している必要があるため、起動順序にも注意が必要です。

おわりに

Synology NASでKMIPを使ったボリューム暗号化キーの管理環境を構築しました。

自己署名証明書の作成からKMIPサーバーの設定まで、一通りの手順を紹介しましたが、実際にやってみると意外とシンプルに構築できました。

2台のNASを相互接続することで、セキュリティと可用性の両方を確保できたので、家庭内の検証環境としては十分な構成になったと思います。

ただし、証明書の管理やバックアップは引き続き注意が必要なので、定期的に確認していきたいと思います。