★AWS 備忘録シリーズ
共通ミドルウェアやアプリケーションを Amazon EC2 へ事前インストールを行い、 Amazon Machine Image(AMI)を取得するという営みをしていると思います。
その際、鍵を埋め込んで EC2 インスタンスの起動をしていると、以前の鍵の情報が残り続けることはご存知でしょうか。
特に、本番や開発といった環境ごとや EC2 に割り当てている機能ごとに鍵を分けている場合に直面しやすい問題です。
※本稿では AWS 提供の AMI に何がしかの設定を入れて、いろんな機能を設定するためのもとになる AMI をベース AMI と呼称します
鍵が複数埋め込まれる流れ
- ベース AMI を作成する担当者は定期的に AWS 提供の AMI に AMI 作成担当者用の鍵を使って EC2 を起動(1本目の鍵が埋め込まれる)
- その EC2 インスタンスに必要なミドルウェアなどをインストール
- AMI を取得
- 3で取得した AMI をインフラ構築担当者に伝達
- インフラ構築担当者はその AMI の ID と 開発のインフラ構築担当者用の鍵を使って、開発環境でシステム構築を実施(2本目の鍵が埋め込まれる)
- 5で作った EC2 インスタンスから AMI を取得
- 本番環境の AWS アカウントに対して、6で取得した AMI をコピー
- 7でコピーした AMI で本番のインフラ構築担当者用の鍵を使ってシステム構築を実施(3本目の鍵が埋め込まれる)
と、このようによくある構築の流れになっていますが、このステップ8までに3本の鍵が登場し、どの鍵でもログインが行える状況になっています。
とくに、本番環境の EC2 インスタンスに対して開発環境の鍵でアクセス可能な状態はあまりよろしくない状態といえます。
この問題を対処するために、格納先を確認して、不要な鍵情報は削除します。
鍵のありか
結論から言ってしまうと、AWS ドキュメント「共有 Linux AMI のガイドライン」記載のパブリックキー認証情報のインストールの注記にある通り、authroized_keys というファイルで管理されています。
sh-4.2$ sudo find / -name authorized_keys
/home/ec2-user/.ssh/authorized_keys
/root/.ssh/authorized_keys
sh-4.2$
この環境では2か所で管理されていることがわかります。
このファイルを開くとこれまでに埋め込んだことがある鍵の情報が記録されています。
sh-4.2$ sudo cat /home/ec2-user/.ssh/authorized_keys
ssh-rsa ****************** <key-name1>
ssh-rsa ****************** <key-name2>
ssh-rsa ****************** <key-name3>
sh-4.2$
そのほかにも鍵情報はあるのか
また、前述の AWS ドキュメント共有 Linux AMI のガイドライン記載の「SSH ホストキーペアの削除」にも対応します。
パブリック AMI から派生した AMI を共有する場合は、/etc/ssh にある既存の SSH ホストキーペアを削除します。これにより、他のユーザーがお客様の AMI を使用してインスタンスを起動したときに、SSH は、新しい固有の SSH キーペアを生成するように強制されるため、セキュリティが強化され、「中間者」攻撃の可能性を減らします。
システムにある次のすべてのキーファイルを削除します。
(中略)
次のコマンドを使用して、これらのファイルをすべて確実に削除できます。
[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
鍵情報の削除の仕方
パターンはいろいろとありますが、取得した AMI から EC2 を起動する際に以下のコマンドをユーザーデータ内で実行するのをお勧めします。
こうすることにより、起動時に指定した鍵以外を常に削除可能です。
※ AMI の取得がコード化されているとかなら取得時に該当ファイルをクリアするのでも構いません。
shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
sed -i -e '$!d' /home/ec2-user/.ssh/authorized_keys
sed -i -e '$!d' /root/.ssh/authorized_keys
※authorized_keys が上記二つ以外にもある場合は、そこも対処する
※ユーザーデータの場合管理者権限で動作するため、sudo は不要。
まとめ
鍵にアクセスできる人だけが EC2 インスタンスにアクセスできるのは便利です。
しかし、このように複数可能されてしまうということを知らないと知らず知らずのうちに
トラブルの元を作り出していることもあるのでご注意ください。