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

提供:Dev Guides
移動先:案内検索

序章

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ブロックストレージ入門シリーズをご覧ください。