EC2でデフォルトユーザを消したり、visudoを使わずに編集ミスした場合、sudoが使えなくなります。つまり、インスタンスのシャットダウンすら出来なくなります。
または、authorized_keysを間違えて消した場合などは、SSHの代替手段がないのでログインすらできなくなります。
そんな時でも、ルートデバイスがEBSなら、ディスクを他のインスタンスに付け替えられるので簡単に復旧できます。以下の例はubuntuですが、他のディストリビューションでも同じことが出来ます。
手順
問題が起きたインスタンスをAWSコンソールから停止
ログインできないので、コンソールから止めるしか無いです。
EBSのデタッチ
アタッチしているインスタンスが停止すると、デタッチできるようになります。
新規インスタンスの作成
一時的な救出用のインスタンスを作ります。
EBSアタッチして、マウントする
先程作った救出用インスタンスにデタッチしたEBSをアタッチして、適当なディレクトリにマウントすると、間違えて操作したインスタンスのルートディレクトリが操作できます。(ここはrootで作業)
root@ip-10-0-0-44:/home/ubuntu# mkdir hoge
root@ip-10-0-0-44:/home/ubuntu# mount /dev/xvdf1 hoge
root@ip-10-0-0-44:/home/ubuntu# ls hoge/
bin dev home initrd.img.old lib64 media opt root sbin srv tmp var vmlinuz.old
boot etc initrd.img lib lost+found mnt proc run snap sys usr vmlinuz
sudoersをいい感じに編集して、シャットダウン
アンマウントするか、綺麗にインスタンスを落とします。
nano hoge/etc/sudoers.d/90-cloud-init-users
umount hoge
halt
EBSをルート用にアタッチ
元のインスタンスにEBSを戻します。基本的には先程と逆の操作ですが、適当な名前でアタッチすると起動できないので、予約済みのデバイス名を参考に戻します。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names
ubuntuでは/dev/sda1です。アタッチせずに起動するとエラーで教えてくれるようなので、それを参考にしても良いかも。
起動すると、なおっていますね。
juntaki@ec2 ~> sudo su
root@ec2:/home/juntaki#
まとめ
これで、EC2で設定ミスをしても戻せます。