【小ネタ】Cloud-initでec2-userのパスワード認証を可能にする

2015.01.09

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

こんにちは、せーのです。今日はたまたまこういう機会があったので小ネタとして書かせてもらいます。EC2でパスワード認証を可能にする方法です。

Cloud-initとUser-Data

パスワード認証を可能にするためにCloud-initを使用します。Cloud-initにつきましてはすもけさんがガッツリ書かれたブログのシリーズがありますのでこちらを参考になさってください。 User DataとはEC2作成時にタスクやスクリプトを一度だけ走らせることができる仕組みです。通常はロケールの変更やタイムゾーンをTokyo/Asiaにしたりするのに使ったりします。

やってみる

ではやってみましょう。EC2を新規に立ち上げますとインスタンスの設定画面が出てきます。User Dataを書く欄は[Advanced Details]というタブの中に入っています。デフォルトではこのタブは畳まれているので見落とさないようにしてください。

cloudinit1

User Data

#cloud-config
password: [パスワードを入力]
chpasswd: { expire: False }
ssh_pwauth: True

ここにcloud-initにてパスワード認証の許可パスワード期限を書き込みます。デフォルトではパスワード認証は無効になっているのでここで有効にして、期限を無期限とした上でパスワードを入力しているわけですね。 こちらを入力した上でEC2を立ち上げて、コンソールからパスワード認証でログインしてみます。

Tsuyoshis-Air-3:~ Tsuyoshi$ ssh ec2-user@54.65.189.7
ec2-user@54.65.189.7'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 ~]$

パスワード認証で入ることに成功しました。設定を確認してみます。

/etc/ssh/sshd_config

......中略......

# 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権限についてる)で、簡単にスーパーユーザのパスワードが一般の利用者に露出してしまいます。 ですのでセキュリティの観点から言っても特段の理由がなければ鍵認証方式を使ったほうがいいかと思います。あくまでこういう方法もある、ということで頭の片隅にでも入れておいて頂ければと思います。