ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris の管理: ZFS ファイルシステム Oracle Solaris 11 Information Library (日本語) |
1. Oracle Solaris ZFS ファイルシステム (概要)
3. Oracle Solaris ZFS ファイルシステムと従来のファイルシステムの相違点
4. Oracle Solaris ZFS ストレージプールの管理
6. Oracle Solaris ZFS ファイルシステムの管理
スクリプトで使用できるように ZFS プロパティーのクエリー検索を行う
ZFS ファイルシステムでユーザーおよびグループの割り当て制限を設定する
7. Oracle Solaris ZFS のスナップショットとクローンの操作
8. ACL および属性を使用した Oracle Solaris ZFS ファイルの保護
10. Oracle Solaris ZFS の高度なトピック
11. Oracle Solaris ZFS のトラブルシューティングとプールの回復
13. 推奨の Oracle Solaris ZFS プラクティス
暗号化とは機密保護のためにデータをエンコードするプロセスで、エンコードされたデータにデータ所有者がアクセスするには鍵が必要になります。ZFS 暗号化を使用する利点は次のとおりです。
ZFS 暗号化は ZFS コマンドセットと統合されています。ほかの ZFS 操作と同様に、鍵の変更や再入力などの暗号化操作は、オンラインで実行されます。
既存のストレージプールがアップグレードされていれば、それを使用できます。特定のファイルシステムの暗号化には柔軟性があります。
ZFS 暗号化は子孫のファイルシステムに継承できます。鍵の管理は、ZFS 委任管理を通じて委任できます。
データは、CCM および GCM 操作モードで、鍵の長さが 128、192、および 256 の AES (Advanced Encryption Standard) を使用して暗号化されます。
ZFS 暗号化は、Oracle Solaris 暗号化フレームワークを使用します。このため自動的に、暗号化アルゴリズムのすべての使用可能なハードウェアアクセラレーションまたは最適化されたソフトウェア実装にアクセスできます。
暗号化ポリシーは ZFS ファイルシステムの作成時に設定できますが、ポリシーの変更はできません。たとえば、tank/home/darren ファイルシステムは、暗号化プロパティーを有効にして作成されています。デフォルトの暗号化ポリシーでは、最低 8 文字の長さが必要なパスフレーズの入力が求められます。
# zfs create -o encryption=on tank/home/darren Enter passphrase for 'tank/home/darren': xxxxxxx Enter again: xxxxxxxx
ファイルシステムの暗号化が有効になっていることを確認します。例:
# zfs get encryption tank/home/darren NAME PROPERTY VALUE SOURCE tank/home/darren encryption on local
ファイルシステムの暗号化の値が on になっている場合、デフォルトの暗号化アルゴリズムは aes-128-ccm です。
ラッピング鍵は、実際のデータ暗号化鍵を暗号化するために使用されます。ラッピング鍵は、上記の例のように、暗号化したファイルシステムの作成時に、zfs コマンドからカーネルに渡されます。ラッピング鍵は、ファイルにあるか (生または 16 進数形式)、パスフレーズから派生します。
ラッピング鍵の形式と場所は、keysource プロパティーで次のように指定されます。
keysource=format,location
形式は次のいずれかになります。
raw – 生の鍵バイト
hex – 16 進数の鍵文字列
passphrase – 鍵を生成する文字列
場所は次のいずれかになります。
prompt – ファイルシステムの作成またはマウント時に鍵の入力が要求される
,file:///filename – ファイルシステム内の鍵ファイルの場所
pkcs11 – PKCS#11 トークンでの鍵の場所を記述した URI
https://location – 安全なサーバー上の鍵ファイルの場所
keysource 形式が passphrase の場合、ラッピング鍵はパスフレーズから派生します。それ以外の場合、keysource プロパティー値は、生のバイトまたは 16 進数形式で、実際のラッピング鍵を示します。パスフレーズがファイルに格納されているか、入力が要求される生のバイトストリームに格納されているか (これはおそらくスクリプト処理にのみ適しています) を指定できます。
ファイルシステムの keysource プロパティー値が passphrase を指定している場合、ラッピング鍵は、PKCS#5 PBKD2 と、ファイルシステムごとにランダムに生成されたソルトを使用して、パスフレーズから派生します。したがって、子孫のファイルシステムで使用された場合、同じパスフレーズでも異なるラッピング鍵が生成されます。
ファイルシステムの暗号化ポリシーは、子孫のファイルシステムによって継承され、削除することはできません。例:
# zfs snapshot tank/home/darren@now # zfs clone tank/home/darren@now tank/home/darren-new Enter passphrase for 'tank/home/darren-new': xxxxxxx Enter again: xxxxxxxx # zfs set encryption=off tank/home/darren-new cannot set property for 'tank/home/darren-new': 'encryption' is readonly
暗号化された、または暗号化されていない ZFS ファイルシステムをコピーまたは移行する必要がある場合、次の点を考慮してください。
現在、暗号化されていないデータセットストリームを送信することはできず、受信側のプールのデータセットで暗号化を有効にしている場合でも、これを暗号化されたストリームとして受信することもできません。
次のコマンドを使用して、暗号化されていないデータを、暗号化を有効にしているプール/ファイルシステムに移行できます。
cp -r
find | cpio
tar
rsync
複製された暗号化ファイルシステムストリームは、暗号化されたファイルシステムで受信でき、データは暗号化されたままです。詳細は、例 6-4 を参照してください。
zfs key -c コマンドを使用して、暗号化されたファイルシステムのラッピング鍵を変更できます。ブート時にファイルシステムの鍵 (zfs key -l) を明示的に読み込むか、ファイルシステム (zfs mount filesystem) をマウントすることによって、既存のラッピング鍵を最初に読み込んでいる必要があります。例:
# zfs key -c tank/home/darren Enter new passphrase for 'tank/home/darren': xxxxxxxx Enter again: xxxxxxxx
次の例では、ラッピング鍵が変更され、ラッピング鍵がファイルから取得されることを指定するように keysource プロパティー値が変更されます。
# zfs key -c -o keysource=raw,file:///media/stick/key tank/home/darren
暗号化されたファイルシステムのデータ暗号化鍵は、zfs key -K コマンドを使用して変更できますが、新しい暗号化鍵は新しく書き込むデータにのみ使用されます。この機能は、データ暗号化鍵の制限時間に関する NIST 800-57 ガイドラインを遵守するために使用できます。例:
# zfs key -K tank/home/darren
上記の例では、データ暗号化鍵は表示されず、ユーザーが直接管理することもできません。さらに、鍵変更操作を実行するには keychange の委任が必要です。
次の暗号化アルゴリズムを使用できます。
aes-128-ccm、aes-192-ccm、 aes-256-ccm
aes-128-gcm、aes-192-gcm、 aes-256-gcm
ZFS keysource プロパティーは、ファイルシステムのデータ暗号化鍵をラップする鍵の形式と場所を指定します。例:
# zfs get keysource tank/home/darren NAME PROPERTY VALUE SOURCE tank/home/darren keysource passphrase,prompt local
ZFS rekeydate プロパティーは、前回の zfs key -K 操作の日付を特定します。例:
# zfs get rekeydate tank/home/darren NAME PROPERTY VALUE SOURCE tank/home/darren rekeydate Tue Oct 12 15:36 2010 local
暗号化したファイルシステムの creation プロパティーと rekeydate プロパティーの値が同じであれば、zfs key -K 操作でファイルシステムの鍵が再入力されていることは決してありません。
鍵操作を委任するための次のアクセス権に関する説明を確認してください。
zfs key -l コマンドと zfs key -u コマンドを使用してファイルシステム鍵をロードまたはアンロードする場合、key アクセス権が必要になります。多くの場合、マウントアクセス権も必要になります。
zfs key -c コマンドと zfs key -K コマンドを使用してファイルシステム鍵を変更する場合、keychange アクセス権が必要になります。
鍵の使用 (ロードまたはアンロード) と鍵の変更に、別々のアクセス権を委任することを検討してください。これにより 2 人鍵操作モデルを使用できます。たとえば、どのユーザーが鍵を使用でき、どのユーザーが鍵を変更できるかを決めます。または、鍵の変更には両方のユーザーが同席する必要があります。このモデルを使用すると、キーエスクローシステムを構築することもできます。
暗号化した ZFS ファイルシステムをマウントしようとする場合には、次の考慮事項を確認してください。
暗号化したファイルシステム鍵がブート中に使用できない場合、ファイルシステムは自動的にはマウントされません。たとえば、暗号化ポリシーが passphrase,prompt に設定されているファイルシステムは、ブートプロセスを中断してパスフレーズの入力を要求できないため、ブート中にマウントされません。
暗号化ポリシーが passphrase,prompt に設定されているファイルシステムをブート時にマウントする場合は、zfs mount コマンドで明示的にマウントしてパスフレーズを指定するか、zfs key -l コマンドを使用して、システムのブート後に鍵の入力を要求する必要があります。
例:
# zfs mount -a Enter passphrase for 'tank/home/darren': xxxxxxxx Enter passphrase for 'tank/home/ws': xxxxxxxx Enter passphrase for 'tank/home/mark': xxxxxxxx
暗号化したファイルシステムの keysource プロパティーが別のファイルシステム内のファイルを指している場合、特にファイルがリムーバブルメディアにある場合には、ファイルシステムのマウント順序が、暗号化されたファイルシステムがブート時にマウントされるかどうかに影響を与える可能性があります。
ZFS の圧縮、重複除去、および暗号化のプロパティーを使用する場合は、次の考慮事項を確認してください。
ファイルを作成するときに、データは圧縮され、暗号化され、チェックサムが計算されます。続いて、可能な場合はデータが複製されます。
ファイルを読み取るときには、チェックサムが検証され、データが復号化されます。続いて、必要に応じてデータが解凍されます。
暗号化され、クローンも作成されたファイルシステム上で dedup プロパティーが有効になっており、このクローン上では zfs key -K コマンドも zfs clone -K コマンドも使用されていない場合は、可能であれば、すべてのクローンのデータが重複除去されます。
例 6-1 生の鍵を使用して ZFS ファイルシステムを暗号化する
次の例では、pktool コマンドを使用して aes-256-ccm 暗号化鍵が生成され、/cindykey.file のファイルに書き込まれます。
# pktool genkey keystore=file outkey=/cindykey.file keytype=aes keylen=256
続いて、tank/home/cindy ファイルシステムが作成されるときに、/cindykey.file が指定されます。
# zfs create -o encryption=aes-256-ccm -o keysource=raw,file:///cindykey.file tank/home/cindy
例 6-2 別の暗号化アルゴリズムで ZFS ファイルシステムを暗号化する
ZFS ストレージプールを作成し、そのストレージプール内のすべてのファイルシステムに暗号化アルゴリズムを継承させることができます。この例では、users プールが作成され、users/home ファイルシステムが作成され、パスフレーズを使用して暗号化されます。デフォルトの暗号化アルゴリズムは aes-128-ccm です。
続いて、users/home/mark ファイルシステムが作成され、aes-256-ccm 暗号化アルゴリズムを使用して暗号化されます。
# zpool create -O encryption=on users mirror c0t1d0 c1t1d0 mirror c2t1d0 c3t1d0 Enter passphrase for 'users': xxxxxxxx Enter again: xxxxxxxx # zfs create users/home # zfs get encryption users/home NAME PROPERTY VALUE SOURCE users/home encryption on inherited from users # zfs create -o encryption=aes-256-ccm users/home/mark # zfs get encryption users/home/mark NAME PROPERTY VALUE SOURCE users/home/mark encryption aes-256-ccm local
例 6-3 暗号化した ZFS ファイルシステムのクローンを作成する
クローンファイルシステムが、元のスナップショットと同じファイルシステムの keysource プロパティーを継承する場合、新しい keysource は不要であり、keysource=passphrase,prompt の場合でも新しいパスフレーズの入力を要求されることはありません。クローンには同じ keysource が使用されます。例:
デフォルトでは、暗号化されたファイルシステムの子孫のクローンを作成するときに、鍵の入力を要求されません。
# zfs create -o encryption=on tank/ws Enter passphrase for 'tank/ws': xxxxxxxx Enter again: xxxxxxxx # zfs create tank/ws/fs1 # zfs snapshot tank/ws/fs1@snap1 # zfs clone tank/ws/fs1@snap1 tank/ws/fs1clone
クローンファイルシステムの新しい鍵を作成する場合、zfs clone -K コマンドを使用します。
子孫の暗号化されたファイルシステムではなく、暗号化されたファイルシステムのクローンを作成する場合は、新しい鍵を入力するように要求されます。例:
# zfs create -o encryption=on tank/ws Enter passphrase for 'tank/ws': xxxxxxxx Enter again: xxxxxxxx # zfs snapshot tank/ws@1 # zfs clone tank/ws@1 tank/ws1clone Enter passphrase for 'tank/ws1clone': xxxxxxxx Enter again: xxxxxxxx
例 6-4 暗号化された ZFS ファイルシステムを送受信する
次の例では、tank/home/darren@snap1 スナップショットが、暗号化された /tank/home/darren ファイルシステムから作成されます。続いて、暗号化プロパティーを有効にしてスナップショットが bpool/snaps に送信されます。このため、結果として受信されたデータは暗号化されています。ただし、送信プロセス中、tank/home/darren@snap1 ストリームは暗号化されていません。
# zfs get encryption tank/home/darren NAME PROPERTY VALUE SOURCE tank/home/darren encryption on local # zfs snapshot tank/home/darren@snap1 # zfs get encryption bpool/snaps NAME PROPERTY VALUE SOURCE bpool/snaps encryption on inherited from bpool # zfs send tank/home/darren@snap1 | zfs receive bpool/snaps/darren1012 # zfs get encryption bpool/snaps/darren1012 NAME PROPERTY VALUE SOURCE bpool/snaps/darren1012 encryption on inherited from bpool
この場合、受信した暗号化されたファイルシステムに対して、新しい鍵が自動的に生成されます。