DigitalOceanブロックストレージボリュームで暗号化されたファイルシステムを作成する方法

前書き

DigitalOcean Volumesは、スケーラブルなSSDベースのブロックストレージデバイスです。 ボリュームを使用すると、ドロップレットのサイズを変更することなく、インフラストラクチャのストレージ容量を作成および拡張できます。

ボリュームは保管時に暗号化されます。つまり、ボリューム上のデータはストレージクラスターの外部では読み取りできません。 ボリュームをドロップレットにアタッチすると、ドロップレットには復号化されたブロックストレージデバイスが表示され、すべてのデータは分離されたネットワークを介して送信されます。

セキュリティを強化するために、ボリュームのhttps://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md[LUKS encrypted disk]にファイルシステムを作成することもできます。 つまり、データを読み取るには、Dropletのオペレーティングシステムでディスクを復号化する必要があります。

このチュートリアルでは、次の方法について説明します。

  • ファイルシステムを含むボリューム上にパスフレーズで保護された暗号化ディスクを作成します。

  • 暗号化されたファイルシステムを手動でマウントして使用し、完了したらアンマウントして再ロックします。

  • Dropletの起動時にファイルシステムを自動的にマウントします。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Volume attachmentへのhttps://www.digitalocean。 com / community / tutorials / how-to-create-your-first-digitalocean-droplet [Droplet]。

手順1-暗号化されたディスクの作成

`+ cryptsetup `は、他の暗号化形式に加えてLUKSボリュームを管理するために使用されるユーティリティです。 まず、 ` cryptsetup +`を使用して、ボリューム上の暗号化されたディスクを初期化します。

sudo cryptsetup -y -v luksFormat /dev/disk/by-id/scsi-0DO_Volume_

必ず `+`をhttps://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#working-with-volumesに置き換えてください-on-digitalocean [ボリュームの名前]。 ` -y `フラグでは、パスフレーズの作成を求められたときにパスフレーズを2回入力する必要があります。 ` -v +`フラグは、コマンドの成功を検証するために、人間が読める出力を追加します。

出力では、ボリューム上のデータの上書きを確認するように求められます。 すべて大文字で「+ YES」と入力し、「+ ENTER」を押して続行します。

OutputWARNING!
========
This will overwrite data on /dev/disk/by-id/scsi-0DO_Volume_ irrevocably.

Are you sure? (Type uppercase yes):

次に、暗号化されたディスクのパスフレーズを作成するように求められます。 一意の強力なパスフレーズを入力し、もう一度入力して確認します。 このパスフレーズは*回復不能*なので、安全な場所に記録しておいてください。

Output. . .
Enter passphrase:
Verify passphrase:
Command successful.

必要に応じて、 `+ cryptsetup luksChangeKey `コマンドを使用して、将来このパスフレーズを変更できます。 ` cryptsetup luksAddKey +`を使用して、デバイスごとに最大8個のパスフレーズを追加することもできます。

この時点で、ディスクが作成され暗号化されます。 次に、復号化してhttps://www.digitalocean.com/community/tutorials/an-introduction-to-storage-terminology-and-concepts-in-linux#how-linux-manages-storage-devicesにマッピングします[ラベル]参照が簡単になります。 ここでは、「+ secure-volume +」というラベルを付けていますが、好きなラベルを付けることができます。

sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0DO_Volume_

パスフレーズの入力を求められます。 入力すると、ボリュームは `+ / dev / mapper / secure-volume +`にマッピングされます。

すべてが機能していることを確認するには、暗号化されたディスクの詳細を確認します。

cryptsetup status

ボリュームラベルとタイプを示すこのような出力が表示されます。

Output/dev/mapper/ is active.
 type:    LUKS1
 cipher:  aes-xts-plain64
 keysize: 256 bits
 device:  /dev/sda
 offset:  4096 sectors
 size:    209711104 sectors
 mode:    read/write

この時点で、パスフレーズで保護された暗号化ディスクが作成されました。 次の手順では、そのディスク上にファイルシステムを作成し、オペレーティングシステムがそれを使用してファイルを保存できるようにします。

手順2-ファイルシステムの作成とマウント

まず、Dropletで現在使用可能なディスクスペースを見てみましょう。

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 / +」はこのリストに表示されません。 アクセス可能にするには、ファイルシステムを作成してマウントする必要があります。

`+ mkfs.xfs +`ユーティリティ( m a k e f ile s ystem)を使用してhttps://en.wikipedia.org/wiki/を作成しますボリューム上のXFS [XFS]ファイルシステム。

sudo mkfs.xfs /dev/mapper/

ファイルシステムが作成されたら、https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#mounting-the-filesystems [マウント]、つまり、Dropletのオペレーティングシステムで使用できるようにします。

_mount point_を作成します。これは、ファイルシステムが接続される場所です。 マウントポイントの推奨事項は、 `+ / mnt `ディレクトリ内の空のディレクトリです。したがって、 ` / mnt / +`を使用します。

sudo mkdir /mnt/

次に、ファイルシステムをマウントします。

sudo mount /dev/mapper/ /mnt/

正常に機能することを確認するには、Dropletの使用可能なディスク領域をもう一度確認します。

df -h

「+ / dev / mapper / +」が一覧表示されます。

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

これは、暗号化されたファイルシステムが接続され、使用できることを意味します。

ボリューム上のデータにアクセスする必要がなくなったら、ファイルシステムをアンマウントし、暗号化されたディスクをロックできます。

sudo umount /mnt/
sudo cryptsetup luksClose

+ df -h +`を使用して、ファイルシステムが使用できなくなったことを確認できます。 ボリューム上のデータに再びアクセスできるようにするには、ディスクを開く手順( `+ cryptsetup luksOpen …​ +)を実行して、マウントポイントを作成し、ファイルシステムをマウントします。

ボリュームを使用するたびにこの手動プロセスを実行しないようにするには、代わりに、Dropletの起動時にファイルシステムが自動的にマウントされるように構成できます。

手順3-ブート時にファイルシステムを自動的にマウントする

暗号化されたディスクには、最大8つのパスフレーズを含めることができます。 この最後の手順では、キーを作成してパスフレーズとして追加し、そのキーを使用して、Dropletの起動時に復号化およびマウントされるようにボリュームを構成します。

`+ / root / .secure_key +`にキーファイルを作成します。 このコマンドは、ランダムな内容の4 KBファイルを作成します。

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_ /root/.secure-key

パスフレーズの入力を求められます。 暗号化ディスクを最初に作成したときに設定したものを入力できます。

`+ / etc / crypttab `は、システムの起動時に設定する暗号化されたディスクを定義する設定ファイルです。 このファイルを「 nano +」またはお好みのテキストエディターで開きます。

sudo nano /etc/crypttab

ファイルの最後に次の行を追加して、起動時にボリュームをマッピングします。

/ etc / crypttab

. . .
/dev/disk/by-id/scsi-0DO_Volume_ /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/ /mnt/ xfs  defaults,nofail 0 0

+ / etc / fstab +`の行の最初の3つの引数は、常に `+ device_path mount_point file_system_type +`です。 ここでは、ステップ2と同じデバイスパスとマウントポイントがあり、XFSファイルシステムを指定しています。 `+ fstab +`のmanページ( `+ man fstab +)の他のフィールドについて読むことができます。

ファイルを保存して閉じます。 暗号化されたファイルシステムは、Dropletの起動時に自動的にマウントされるように設定されました。 ドロップレットを再起動することでこれをテストできますが、実行中のサービスには注意してください。

結論

デフォルトでは、DigitalOceanボリュームは、ドロップレットに接続されていないときに暗号化されます。 このチュートリアルでは、ボリューム上の暗号化されたディスクにファイルシステムを配置して、セキュリティのレイヤーを追加しました。 暗号化されたディスクを作成し、パスフレーズを追加し、ドロップレット内で使用するために手動または自動でマウントできます。

DigitalOceanブロックストレージボリュームの詳細については、https://www.digitalocean.com/community/tutorial_series/getting-started-with-digitalocean-block-storage [DigitalOceanブロックストレージ入門]シリーズをご覧ください。

Related