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
ボリュームの名前。 The -y
フラグを使用すると、パスフレーズを作成するように求められたときに、パスフレーズを2回入力する必要があります。 The -v
flagは、コマンドが成功したことを確認するために、人間が読める形式の出力を追加します。
出力では、ボリューム上のデータの上書きを確認するように求められます。 タイプ 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
指図。 デバイスごとに最大8つのパスフレーズを追加することもできます。 cryptsetup luksAddKey
.
この時点で、ディスクが作成され、暗号化されます。 次に、それを復号化し、ラベルにマップして、参照しやすくします。 ここでは、ラベルを付けています 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
ボリューム上にXFSファイルシステムを作成するためのユーティリティ( m a k e f ile s ystem) 。
- 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
ファイルの最後に次の行を追加して、起動時にボリュームをマップします。
. . .
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
ファイルの最後に次の行を追加して、起動時にディスクを自動的にマウントします。
. . .
/dev/mapper/secure-volume /mnt/secure xfs defaults,nofail 0 0
の行の最初の3つの引数 /etc/fstab
いつも device_path mount_point file_system_type
. ここでは、手順2と同じデバイスパスとマウントポイントがあり、XFSファイルシステムを指定します。 あなたはで他のフィールドについて読むことができます fstab
のマニュアルページ(man fstab
).
ファイルを保存して閉じます。 これで、暗号化されたファイルシステムは、Dropletの起動時に自動的にマウントされるように設定されています。 Dropletを再起動することでこれをテストできますが、実行中のサービスには注意してください。
結論
デフォルトでは、DigitalOceanボリュームは、ドロップレットに接続されていない場合に暗号化されます。 このチュートリアルでは、ボリューム上の暗号化されたディスクにファイルシステムを配置することにより、セキュリティの層を追加しました。 暗号化されたディスクを作成し、それにパスフレーズを追加して、手動または自動でマウントして、ドロップレット内で使用できます。
DigitalOceanブロックストレージボリュームの詳細については、DigitalOceanブロックストレージ入門シリーズをご覧ください。