DigitalOceanブロックストレージボリュームに暗号化ファイルシステムを作成する方法
序章
DigitalOcean Volumes は、スケーラブルなSSDベースのブロックストレージデバイスです。 ボリュームを使用すると、ドロップレットのサイズを変更することなく、インフラストラクチャのストレージ容量を作成および拡張できます。
ボリュームは保存時に暗号化されます。つまり、ボリューム上のデータは、ストレージクラスターの外部では読み取ることができません。 ボリュームをドロップレットに接続すると、ドロップレットに復号化されたブロックストレージデバイスが表示され、すべてのデータが分離されたネットワークを介して送信されます。
セキュリティを強化するために、ボリューム上のLUKS暗号化ディスクにファイルシステムを作成することもできます。 これは、データを読み取るために、Dropletのオペレーティングシステムによってディスクを復号化する必要があることを意味します。
このチュートリアルでは、次の方法について説明します。
- ファイルシステムを含むボリューム上にパスフレーズで保護された暗号化ディスクを作成します。
- 暗号化されたファイルシステムを手動でマウントして使用し、完了したらマウントを解除して再ロックします。
- ドロップレットの起動時にファイルシステムを自動的にマウントします。
前提条件
このチュートリアルに従うには、次のものが必要です。
警告:このプロセスは、ボリューム上のすべてのデータを破壊します。 既存のボリュームを再フォーマットする前に、必ず新しいボリュームから開始するか、データをバックアップしてください。
ステップ1—暗号化されたディスクを作成する
cryptsetup
は、他の暗号化された形式に加えて、LUKSボリュームを管理するために使用されるユーティリティです。 まず、cryptsetup
を使用して、ボリューム上の暗号化されたディスクを初期化します。
sudo cryptsetup -y -v luksFormat /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01
必ずvolume-lon1-01
をボリュームの名前に置き換えてください。 -y
フラグでは、パスフレーズを作成するように求められたときに、パスフレーズを2回入力する必要があります。 -v
フラグは、コマンドが成功したことを確認するために、人間が読める形式の出力を追加します。
出力では、ボリューム上のデータの上書きを確認するように求められます。 すべて大文字でYES
と入力し、ENTER
を押して続行します。
OutputWARNING! ======== This will overwrite data on /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 irrevocably. Are you sure? (Type uppercase yes): YES
次に、出力により、暗号化されたディスクのパスフレーズを作成するように求められます。 ユニークで強力なパスフレーズを入力し、もう一度入力して確認します。 このパスフレーズは回復できませんので、安全な場所に記録しておいてください。
Output. . . Enter passphrase: Verify passphrase: Command successful.
必要に応じて、将来、cryptsetup luksChangeKey
コマンドを使用してこのパスフレーズを変更できます。 cryptsetup luksAddKey
を使用すると、デバイスごとに最大8つのパスフレーズを追加することもできます。
この時点で、ディスクが作成され、暗号化されます。 次に、それを復号化し、ラベルにマップして、参照しやすくします。 ここでは、secure-volume
というラベルを付けていますが、好きなラベルを付けることができます。
sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 secure-volume
パスフレーズの入力を求められます。 入力すると、ボリュームが/dev/mapper/secure-volume
にマップされます。
すべてが機能することを確認するには、暗号化されたディスクの詳細を確認します。
cryptsetup status secure-volume
ボリュームのラベルとタイプを示すこのような出力が表示されます。
Output/dev/mapper/secure-volume is active. type: LUKS1 cipher: aes-xts-plain64 keysize: 256 bits device: /dev/sda offset: 4096 sectors size: 209711104 sectors mode: read/write
この時点で、パスフレーズで保護された暗号化されたディスクがあります。 次のステップは、そのディスク上にファイルシステムを作成して、オペレーティングシステムがそれを使用してファイルを保存できるようにすることです。
ステップ2—ファイルシステムの作成とマウント
まず、ドロップレットで現在使用可能なディスク容量を見てみましょう。
df -h
ドロップレットの構成に応じて、次のような出力が表示されます。
OutputFilesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 396M 5.6M 390M 2% /run /dev/vda1 78G 877M 77G 2% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.4M 101M 4% /boot/efi tmpfs 396M 0 396M 0% /run/user/1000
現在、ボリュームはまだドロップレットにアクセスできないため、/dev/mapper/secure-volume
はこのリストに表示されません。 アクセス可能にするには、ファイルシステムを作成してマウントする必要があります。
mkfs.xfs
ユーティリティ( m a k e f ile s システム)を使用してXFSを作成しますボリューム上のファイルシステム。
sudo mkfs.xfs /dev/mapper/secure-volume
ファイルシステムが作成されたら、それをマウントできます。これは、Dropletのオペレーティングシステムでファイルシステムを利用できるようにすることを意味します。
マウントポイントを作成します。これは、ファイルシステムが接続される場所です。 マウントポイントの推奨事項は、/mnt
ディレクトリ内の空のディレクトリであるため、/mnt/secure
を使用します。
sudo mkdir /mnt/secure
次に、ファイルシステムをマウントします。
sudo mount /dev/mapper/secure-volume /mnt/secure
それが機能したことを確認するには、ドロップレットの使用可能なディスク容量をもう一度確認してください。
df -h
/dev/mapper/secure-volume
が一覧表示されます。
OutputFilesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 396M 5.6M 390M 2% /run /dev/vda1 78G 877M 77G 2% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.4M 101M 4% /boot/efi tmpfs 396M 0 396M 0% /run/user/1000 /dev/mapper/secure-volume 100G 33M 100G 1% /mnt/secure
これは、暗号化されたファイルシステムが接続され、使用できることを意味します。
ボリューム上のデータにアクセスする必要がなくなったら、ファイルシステムをアンマウントして、暗号化されたディスクをロックできます。
sudo umount /mnt/secure sudo cryptsetup luksClose secure-volume
df -h
を使用して、ファイルシステムが使用できなくなったことを確認できます。 ボリューム上のデータに再度アクセスできるようにするには、ディスクを開き(cryptsetup luksOpen ...
)、マウントポイントを作成し、ファイルシステムをマウントする手順を実行します。
ボリュームを使用するたびにこの手動プロセスを実行しないようにするために、代わりに、Dropletの起動時に自動的にマウントされるようにファイルシステムを構成できます。
ステップ3—起動時にファイルシステムを自動的にマウントする
暗号化されたディスクには、最大8つのパスフレーズを含めることができます。 この最後のステップでは、キーを作成してパスフレーズとして追加し、そのキーを使用して、ドロップレットの起動時に復号化およびマウントされるようにボリュームを構成します。
/root/.secure_key
にキーファイルを作成します。 このコマンドは、ランダムな内容の4KBファイルを作成します。
sudo dd if=/dev/urandom of=/root/.secure-key bs=1024 count=4
このキーファイルの権限を調整して、rootユーザーのみが読み取れるようにします。
sudo chmod 0400 /root/.secure-key
次に、暗号化されたディスクのパスフレーズとしてキーを追加します。
cryptsetup luksAddKey /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 /root/.secure-key
パスフレーズの入力を求められます。 暗号化されたディスクを最初に作成したときに設定したものを入力できます。
/etc/crypttab
は、システムの起動時にセットアップする暗号化されたディスクを定義する構成ファイルです。 このファイルをnano
またはお気に入りのテキストエディタで開きます。
sudo nano /etc/crypttab
ファイルの最後に次の行を追加して、起動時にボリュームをマップします。
/ etc / crypttab
. . . secure-volume /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 /root/.secure-key luks
/etc/crypttab
の行の形式はdevice_name device_path key_path options
です。 ここで、デバイス名はsecure-volume
(または代わりに選択した名前)、パスは/dev/disk/by-id/...
、キーファイルは/root/.secure_key
で作成したもの、およびオプションです。 luks
暗号化を指定します。
ファイルを保存して閉じます。
/etc/fstab
は、マウントを自動化するための設定ファイルです。 このファイルを開いて編集します。
sudo nano /etc/fstab
ファイルの最後に次の行を追加して、起動時にディスクを自動的にマウントします。
/ etc / fstab
. . . /dev/mapper/secure-volume /mnt/secure xfs defaults,nofail 0 0
/etc/fstab
の行の最初の3つの引数は常にdevice_path mount_point file_system_type
です。 ここでは、手順2と同じデバイスパスとマウントポイントがあり、XFSファイルシステムを指定します。 他のフィールドについては、fstab
のマニュアルページ(man fstab
)で読むことができます。
ファイルを保存して閉じます。 これで、暗号化されたファイルシステムは、Dropletの起動時に自動的にマウントされるように設定されています。 Dropletを再起動することでこれをテストできますが、実行中のサービスには注意してください。
結論
デフォルトでは、DigitalOceanボリュームは、ドロップレットに接続されていない場合に暗号化されます。 このチュートリアルでは、ボリューム上の暗号化されたディスクにファイルシステムを配置することにより、セキュリティの層を追加しました。 暗号化されたディスクを作成し、それにパスフレーズを追加して、手動または自動でマウントして、ドロップレット内で使用できます。
DigitalOceanブロックストレージボリュームの詳細については、DigitalOceanブロックストレージ入門シリーズをご覧ください。