【小ネタ】Cloud-initでec2-userのパスワード認証を可能にする
こんにちは、せーのです。今日はたまたまこういう機会があったので小ネタとして書かせてもらいます。EC2でパスワード認証を可能にする方法です。
Cloud-initとUser-Data
パスワード認証を可能にするためにCloud-initを使用します。Cloud-initにつきましてはすもけさんがガッツリ書かれたブログのシリーズがありますのでこちらを参考になさってください。 User DataとはEC2作成時にタスクやスクリプトを一度だけ走らせることができる仕組みです。通常はロケールの変更やタイムゾーンをTokyo/Asiaにしたりするのに使ったりします。
やってみる
ではやってみましょう。EC2を新規に立ち上げますとインスタンスの設定画面が出てきます。User Dataを書く欄は[Advanced Details]というタブの中に入っています。デフォルトではこのタブは畳まれているので見落とさないようにしてください。
#cloud-config password: [パスワードを入力] chpasswd: { expire: False } ssh_pwauth: True
ここにcloud-initにてパスワード認証の許可とパスワード、期限を書き込みます。デフォルトではパスワード認証は無効になっているのでここで有効にして、期限を無期限とした上でパスワードを入力しているわけですね。 こちらを入力した上でEC2を立ち上げて、コンソールからパスワード認証でログインしてみます。
Tsuyoshis-Air-3:~ Tsuyoshi$ ssh [email protected] [email protected]'s password:[ここにパスワードを打つ] Last login: Wed Jan 7 08:18:58 2015 from softbank126067040250.bbtec.net __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 18 package(s) needed for security, out of 42 available Run "sudo yum update" to apply all updates. [ec2-user@ip-172-31-4-238 ~]$
パスワード認証で入ることに成功しました。設定を確認してみます。
......中略...... # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no # EC2 uses keys for remote access PasswordAuthentication yes
デフォルトではPasswordAuthenticationはnoに設定されていますが、先ほどのcloud-initが効いてyesになっているのが確認できます。
まとめ
いかがでしたでしょうか。今回はec2のパスワード認証をやってみました。 AWSがデフォルトでパスワード認証を無効にしているのはブルートフォースアタックを危惧してのものです。またdescribe-instance-attribute権限(通常read only権限についてる)で、簡単にスーパーユーザのパスワードが一般の利用者に露出してしまいます。 ですのでセキュリティの観点から言っても特段の理由がなければ鍵認証方式を使ったほうがいいかと思います。あくまでこういう方法もある、ということで頭の片隅にでも入れておいて頂ければと思います。