はじめに
こんにちは。あやかです。
今回は、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での証明書インポート
- DSMにログイン
- 「コントロールパネル」→「セキュリティ」→「証明書」を開く
- 「追加」をクリック
- 「新しい証明書を追加」を選択
- 「既存の証明書をインポート」を選択
- 以下のファイルを指定
- 秘密鍵:
kmip-server1.key(またはkmip-server2.key) - 証明書:
kmip-server1.crt(またはkmip-server2.crt) - 中間証明書: 空欄のまま
- 秘密鍵:
- 「OK」をクリック
KMIPサーバーの有効化
各NASでKMIPサーバーを有効化します。
DS923+での設定
- DSMにログイン
- 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
- 「リモートキーサーバーとして設定」にチェック
- 「設定」をクリック
- 「クライアント接続の管理」→「管理」をクリック
- 「追加」をクリック
- 以下の項目を設定
- クライアント証明書: DS224+のクライアント証明書を選択
- 証明機関: ルート証明書を選択
- 「追加」をクリック
- 「保存」をクリック
- 「適用」をクリック
DS224+での設定
DS224+でも同様の手順でKMIPサーバーを有効化します。
- DSMにログイン
- 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
- 「リモートキーサーバーとして設定」にチェック
- 「設定」をクリック
- 「クライアント接続の管理」→「管理」をクリック
- 「追加」をクリック
- 以下の項目を設定
- クライアント証明書: DS923+のクライアント証明書を選択
- 証明機関: ルート証明書を選択
- 「追加」をクリック
- 「保存」をクリック
- 「適用」をクリック
これで、両方のNASがKMIPサーバーとして動作するようになりました。
相互接続の設定
次に、各NASから相手のKMIPサーバーに接続する設定を行います。
DS923+からDS224+への接続
- DS923+のDSMにログイン
- 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
- 「リモートの重要なクライアントとして設定」にチェックを入れる
- 「編集」をクリック
- 以下の項目を入力
- ホスト名: 192.168.13.249
- ポート: 5696
- 証明機関: ルート証明書を選択
- 「次へ」をクリック
- 「信頼する」をクリック
DS224+からDS923+への接続
DS224+でも同様の手順で、DS923+のKMIPサーバーに接続します。
- DS224+のDSMにログイン
- 「コントロールパネル」→「セキュリティ」→「KMIP」を開く
- 「リモートの重要なクライアントとして設定」にチェックを入れる
- 「編集」をクリック
- 以下の項目を入力
- ホスト名: 192.168.5.128
- ポート: 5696
- 証明機関: ルート証明書を選択
- 「次へ」をクリック
- 「信頼する」をクリック
接続確認
接続が成功すると、ステータスが「Success」と表示されます。
もし接続に失敗する場合は、以下を確認してください。
- ファイアウォールでポート5696が開いているか
- 証明書が正しくインポートされているか
- IPアドレスが正しいか
ボリューム暗号化での利用
KMIPの設定が完了したら、実際にボリューム暗号化で使用します。
ボリュームの暗号化
- 「ストレージマネージャ」を開く
- 「ストレージプール」→「グローバル設定」を選択
- 保管室の場所が「ローカル」になっていることを確認
- 「リセット」をクリック
- 保管室パスワードに暗号化保管室のパスワードを入力
- 「KMIPサーバ」を選択して「リセット」をクリック
- ログインしているDSMアカウントのパスワードを入力して「送信」をクリック
- 保管室の場所が「KMIPサーバ」になっていること、ホスト名に相手NASのホスト名が表示されていることを確認
- 「保存」をクリック
動作確認
ボリュームが正常に作成されると、暗号化キーは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を相互接続することで、セキュリティと可用性の両方を確保できたので、家庭内の検証環境としては十分な構成になったと思います。
ただし、証明書の管理やバックアップは引き続き注意が必要なので、定期的に確認していきたいと思います。