Amazon EC2でEBSボリュームを暗号化する – cryptsetup –

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

暗号化されたボリューム

EC2を利用する際にデフォルトで指定されるドライブはEBSなんですが、 このボリューム(ドライブ/ディスク)を暗号化したいというニーズもあるかと思います。 これを実現するのがcryptsetupです。暗号化されたボリュームは、 マウントする度に複合化のためのパスワードを要求します。 あるインスタンスから切り離された時点ではパスワードを知っていない限り使う事ができなくなります。 何かの認証に対応するために記憶デバイスを暗号化する必要があることもあると思うのですが、 cryptsetupを使う事によって対応することができそうですね。

cryptsetupを使う

cryptsetupを使ってボリュームを暗号化してみましょう。準備として、ManagementConsoleの EBS画面から新規にボリュームを作成してインスタンスにアタッチします。 今回は、/dev/sdfという名前でアタッチしました。次にcryptsetupを使います。 Amazon Linuxには最初から入っていますので直ぐに使う事ができます。 modprobeは動作中のカーネルにモジュールをインストールします。 既にインストールされているものもあると思いますが一応コマンドを列挙します。

$ sudo yum install -y cryptsetup
$ sudo modprobe sha256
$ sudo modprobe dm_crypt
$ sudo modprobe dm_mod
$ sudo modprobe aes

ボリュームを暗号化します。暗号化方式、ハッシュ方式、ボリュームを指定し、パスワードを設定します。

$ sudo cryptsetup luksFormat -c aes -h sha256 /dev/sdf

暗号化されたボリュームをマッピングします。先ほど設定されたパスワードを聞かれます。

$ sudo cryptsetup luksOpen /dev/sdf encrypted_disk

あとは普通にファイルシステムを作成してマウントすれば使えるようになります。

$ sudo mkfs.ext4 /dev/mapper/encrypted_disk
$ sudo mkdir /myencryptdisk
$ sudo mount -t ext4 /dev/mapper/encrypted_disk /myencryptdisk

暗号化されたボリュームを他のEC2インスタンスで使う

一通りの使い方は分かりましたので、実際に他のEC2インスタンスで使ってみましょう。 まずは、マウントから外します。

$ sudo umount /dev/mapper/encrypted_disk

ManagementConsoleのEBS画面からボリュームをデタッチします。 そして、他のEC2インスタンスにアタッチします。 今回は、/dev/sdfという名前でアタッチしました。 既にボリュームは暗号化されていますので、 cryptsetupで利用開始(オープン)します。パスワードを忘れずに。

$ sudo cryptsetup luksOpen /dev/sdf encrypted_disk

マウントすれば使えるようになります。

$ sudo mkdir /myencryptdisk
$ sudo mount -t ext4 /dev/mapper/encrypted_disk /myencryptdisk

まとめ

cryptsetupを使う事によって、EBSボリュームの暗号化、フォーマット/オープン、 アタッチ/デタッチ、マウント/アンマウントを簡単に行う事が出来ました。 様々な認証/適合マークを受けている企業において、サーバの設定や運用ルールの徹底は必須です。 Amazon EC2でも問題なくよくあるツールで設定できることが分かりました。 今日から君にも適合マーク!

参考資料

How to Encrypt an EBS Volume (Disk) on Amazon EC2