Go to main content
Oracle® Solaris 11.3 での ZFS ファイルシステムの管理

印刷ビューの終了

更新: 2016 年 11 月
 
 

ZFS ファイルシステムの暗号化

暗号化とは機密保護のためにデータをエンコードするプロセスで、エンコードされたデータにデータ所有者がアクセスするには鍵が必要になります。ZFS 暗号化を使用する利点は次のとおりです。

  • ZFS 暗号化は ZFS コマンドセットと統合されています。ほかの ZFS 操作と同様に、鍵の変更や再入力などの暗号化操作は、オンラインで実行されます。

  • 既存のストレージプールがアップグレードされていれば、それを使用できます。特定のファイルシステムの暗号化には柔軟性があります。

  • データは、CCM および GCM 操作モードで、鍵の長さが 128、192、および 256 の AES (Advanced Encryption Standard) を使用して暗号化されます。

  • ZFS 暗号化は、Oracle Solaris 暗号化フレームワークを使用します。このため自動的に、暗号化アルゴリズムのすべての使用可能なハードウェアアクセラレーションまたは最適化されたソフトウェア実装にアクセスできます。

  • 現時点では、単独のファイルシステムであっても、ZFS ルートファイルシステムまたはその他の OS コンポーネント (/var ディレクトリなど) を暗号化することはできません。

  • ZFS 暗号化は子孫のファイルシステムに継承できます。

  • 一般ユーザーは、createmountkeysourcechecksumencryption アクセス権が割り当てられている場合に、暗号化されたファイルを作成して鍵の操作を管理できます。

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 – セキュアなサーバー上の鍵またはパスフレーズファイルの場所。この方法を使用して鍵情報を平文で転送することは推奨されていません。URL に GET を付けると、keysource プロパティーの形式部分でリクエストされた内容に従って、鍵の値またはパスフレーズのみが返されます。

      keysourcehttps:// ロケータを使用する場合は、ZFS サーバーが提示する証明書が libcurl および OpenSSL で信頼されているものである必要があります。独自のトラストアンカーまたは自己署名付き証明書を、/etc/openssl/certs にある証明書ストアに追加します。PEM 形式の証明書を /etc/certs/CA ディレクトリに配置し、次のコマンドを実行します。

      # svcadm refresh ca-certificates

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

  • 複製された暗号化ファイルシステムストリームは、暗号化されたファイルシステムで受信でき、データは暗号化されたままです。詳細については、使用例 36を参照してください。

暗号化された ZFS ファイルシステムの鍵を変更する

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  Wed Jul 25 16:54 2012  local

暗号化したファイルシステムの creation プロパティーと rekeydate プロパティーの値が同じであれば、zfs key –K 操作でファイルシステムの鍵が再入力されていることは決してありません。

ZFS 暗号化鍵の管理

ZFS 暗号化鍵は、集中管理の場所が必要な場合、ローカルシステムとリモートのどちらかで、ユーザーのニーズに応じて、さまざまな方法で管理できます。

  • ローカル – 上記の例は、ラッピング鍵がパスフレーズプロンプトまたはローカルシステム上のファイルに格納されている未処理の鍵のどちらにもなり得ることを示しています。

  • リモート – 鍵情報をリモートで格納するには、Oracle Key Manager のような集中管理された鍵管理システムを使用するか、http または https URI での単純な GET リクエストをサポートする Web サービスを使用します。PKCS#11 トークンを使用すれば、Oracle Solaris システムで Oracle Key Manager の鍵情報にアクセスできます。

ZFS 暗号化鍵の管理の詳細は、次を参照してください http://www.oracle.com/technetwork/articles/servers-storage-admin/manage-zfs-encryption-1715034.html

Oracle Key Manager を使用した鍵情報の管理については、次を参照してください。

http://docs.oracle.com/cd/E24472_02/

ZFS 鍵操作アクセス権を委任する

鍵操作を委任するための次のアクセス権に関する説明を確認してください。

  • zfs key –l コマンドと zfs key –u コマンドを使用してファイルシステム鍵をロードまたはアンロードする場合、key アクセス権が必要になります。多くの場合、mount アクセス権も必要になります。

  • zfs key –c コマンドと zfs key –K コマンドを使用してファイルシステム鍵を変更する場合、keychange アクセス権が必要になります。

鍵の使用 (ロードまたはアンロード) と鍵の変更に、別々のアクセス権を委任することを検討してください。これにより 2 人鍵操作モデルを使用できます。たとえば、どのユーザーが鍵を使用でき、どのユーザーが鍵を変更できるかを決めます。または、鍵の変更には両方のユーザーが同席する必要があります。このモデルを使用すると、キーエスクローシステムを構築することもできます。

暗号化した ZFS ファイルシステムをマウントする

暗号化した 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 ファイルシステムをアップグレードする

Oracle Solaris 11 システムを 11.1 にアップグレードする前に、暗号化されたファイルシステムがマウントされていることを確認してください。暗号化されたファイルシステムをマウントして、入力を要求されたらパスフレーズを指定します。

# zfs mount -a
Enter passphrase for 'pond/amy': xxxxxxxx
Enter passphrase for 'pond/rory': xxxxxxxx
# zfs mount | grep pond
pond                            /pond
pond/amy                        /pond/amy
pond/rory                       /pond/rory

その後、暗号化されたファイルシステムをアップグレードします。

# zfs upgrade -a

アンマウントされている、暗号化された ZFS ファイルシステムをアップグレードしようとすると、次のようなメッセージが表示されます。

# zfs upgrade -a
cannot set property for 'pond/amy': key not present

また、zpool status 出力には破壊されたデータが表示されることがあります。

# zpool status -v pond
.
.
.
pond/amy:<0x1>
pond/rory:<0x1>

上のエラーが発生した場合は、上述のとおりに暗号化されたファイルシステムを再マウントします。その後、プールのエラーをスクラブして、クリアします。

# zpool scrub pond
# zpool clear pond

ファイルシステムのアップグレードの詳細は、ZFS ファイルシステムをアップグレードするを参照してください。

ZFS の圧縮、複製解除、暗号化のプロパティー間の関連

ZFS の圧縮、複製解除、および暗号化のプロパティーを使用する場合は、次の考慮事項を確認してください。

  • ファイルを作成するときに、データは圧縮され、暗号化され、チェックサムが計算されます。続いて、可能な場合はデータが複製解除されます。

  • ファイルを読み取るときには、チェックサムが検証され、データが復号化されます。続いて、必要に応じてデータが解凍されます。

  • 暗号化され、クローンも作成されたファイルシステム上で dedup プロパティーが有効になっており、このクローン上では zfs key –K コマンドも zfs clone –K コマンドも使用されていない場合は、可能であれば、すべてのクローンのデータが複製解除されます。

ZFS ファイルシステムを暗号化する例

使用例 33  生の鍵を使用して 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
使用例 34  別の暗号化アルゴリズムで 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
使用例 35  暗号化した 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
使用例 36  暗号化された 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

この場合、受信した暗号化されたファイルシステムに対して、新しい鍵が自動的に生成されます。