こんにちは、ひでさんです。
今回は、EC2のLinuxOSユーザーとIAMユーザーを同期する方法についてご紹介したいと思います。
よくあるのが、EC2で踏み台サーバを作成し、秘密鍵を使ってSSH接続という場面なんですが、少しセキュリティ面を考え出すと、管理が手間になってきます。
例えば、1つのOSユーザーだけですと、いろんな人が共有でそのユーザーを使いますから、セキュリティ対策の一環として踏み台サーバの操作ログをとったとしても結局誰が何をしたかがわからない。
で、個人ごとにユーザーを作ろうと思うと数名程度ならまだしも、
数十人以上の規模になってくると、かなり手間になってくる。
また、エンジニアをどかから引っ張ってきて開発を行っているようなプロジェクトですと、人の入れ替わりもありますし、その度に秘密鍵を取っ替えたり、OSユーザーを削除したりと・・・。
そんな時思うのが、
「AWSのIAMユーザーとOSユーザー、自動で連動しねーかなぁ」
ということ。
※実はセッションマネージャーというのもを使えば、AWSコンソール上からブラウザ経由で踏み台サーバへSSH接続のようなことを実現する方法もありますので、ご興味のある方は以下の記事をご参照ください。

ここで登場するのが、「aws-ec2-ssh」というツールです。
aws-ec2-sshを使えば、IAMユーザーと踏み台サーバのOSユーザーを同期させることができます。
さらにAWSコンソール上から個別に公開鍵をアップすることで、
aws-ec2-sshがいい感じに踏み台サーバへ適用してくれて、わざわざ踏み台サーバに入って設定し直さなくても、各IAMユーザーに関連づけられた鍵でアクセスできるようになります。
また、特定のユーザーにはsudo権限を付与し、特定のユーザーにはsudo権限を付与しないといった権限管理も自動的に行われます。
注意いただきたいのが、「aws-ec2-ssh」というツールは、
既に開発がストップされているツールなので、今後もしかしたら使えなくなるというリスクがある点です。
その点は十分に検討いただき、それでも大丈夫!ということであればぜひ使ってみてください。
aws-ec2-sshのインストール手順
それでは実際にaws-ec2-sshをインストールし、設定する方法をご紹介したいと思います。
主な流れは以下の通りです。
- EC2に特定のポリシーをアタッチしたIAMロールを適用する
- EC2にaws-ec2-sshをインストールする
- aws-ec2-sshのconfigを設定する
この3点を行えば、あとはIAMユーザーを作り、指定のグループに追加するだけで自動的にEC2側にも同じ名前のOSユーザーが作られます。
1.EC2に特定のポリシーをアタッチしたIAMロールを適用する
それでは、IAMユーザーを同期させたいEC2に対して特定のポリシーをアタッチしたIAMロールを適用しましょう。
(1)IAMマネジメントコンソールにて以下のポリシーを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:ListSSHPublicKeys", "iam:GetSSHPublicKey", "iam:GetGroup" ], "Resource": [ "arn:aws:iam::*:user/*", "arn:aws:iam::*:group/*" ] }, { "Effect": "Allow", "Action": "iam:ListUsers", "Resource": "*" } ] } |
(2)新しくEC2用のIAMロールを作成し、作成したポリシーを適用します
(3)IAMロールを踏み台サーバ(EC2)に適用します
2.EC2にaws-ec2-sshをインストールする
次にEC2にaws-ec2-sshをインストールします。
(1)EC2にSSH接続します
(2)以下のコマンドにてaws-ec2-sshをダウンロードします
1 |
# git clone https://github.com/widdix/aws-ec2-ssh.git |
※EC2にgitがインストールされていない場合は、gitをインストールしてから行いましょう
1 |
# yum install -y git |
(3)以下のコマンドにてaws-ec2-sshをインストールします
1 2 |
# cd aws-ec2-ssh # ./install.sh |
3.aws-ec2-sshのconfigを設定する
最後にインストールしたaws-ec2-sshの設定を行います。
これが完了するとAWSのIAMユーザーとEC2のOSユーザーが同期するようになります。
(1)以下のコマンドで設定ファイルを作成します
1 |
# vi /etc/aws-ec2-ssh.conf |
※aws-ec2-ssh.confの中身は以下の内容とします
1 2 3 4 5 6 7 8 |
IAM_AUTHORIZED_GROUPS="members" # IAMグループ(管理対象のグループ) LOCAL_MARKER_GROUP="iam-synced-users" # 任意の名前 SUDOERS_GROUPS="admins" # IAMグループ(管理者のグループ) # Remove or set to 0 if you are done with configuration # To change the interval of the sync change the file # /etc/cron.d/import_users DONOTSYNC=0 # 0でユーザの同期が実行される。デフォルトで10分毎に同期。詳しくは/etc/cron.d/import_users |
各パラメータの意味は以下の通りです。
Sudo権限を持たないIAMグループ名。なければ「=””」とする。
※上記の例では「members」となります。
【LOCAL_MARKER_GROUP】
aws-ec2-ssh内で使われるグループ名。
※IAMグループ名とは関係ありませんので任意で大丈夫です。
【SUDOERS_GROUPS】
Sudo権限を持たせるIAMグループ名。なければ「=””」とする。
※上記の例では「admins」となります。
【DONOTSYNC】
同期設定。0でユーザーの同期が実行される。
AWSコンソール上で新規IAMユーザーを作る
aws-ec2-sshの準備が整ったところで、IAMユーザーを作って自動同期を試してみましょう。
AWSコンソールから新しくIAMユーザーを作成します。
この時、aws-ec2-ssh.confで設定したグループ名と同じグループに追加することも忘れずに行ってください。
aws-ec2-sshで設定したグループとIAMグループが紐づいて自動的にOSユーザーが作成される仕組みになっています。
ちなみにIAMユーザーを削除すると、EC2側のOSユーザーも削除されます。
AWSコンソール上に公開鍵を登録する
新しくIAMユーザーを作成したところで、以下の手順で公開鍵・秘密鍵を作成し、公開鍵を登録しましょう。
(1)以下のコマンドで公開鍵・秘密鍵を作成します
※MacOSの場合です
1 |
$ ssh-keygen -t rsa |
※以下、全部EnterでOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Generating public/private rsa key pair. Enter file in which to save the key (/Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa): <----- ここで鍵ファイルを保存するフォルダの名前を設定できます Enter passphrase (empty for no passphrase): <----- パスフレーズ Enter same passphrase again: <----- パスフレーズ(確認用) Your identification has been saved in /Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa. Your public key has been saved in /Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa.pub. The key fingerprint is: 99:24:u0:8i:2d:34:e6:82:r5:89:41:p8:a7:58:1p:n2(ここにメールアドレスが入ります).local The key's randomart image is: +---[RSA 2048]----+ | . =+.+. | | . + .+ | | . . .. . | | o + o o + . | |o . o o.SB ..+ | |.. .+ +oo+o | |o . . ..*=.o. | |.o . ..E+.o+| |. .+=o+| +-----------------+ |
これで、「~/.ssh」配下に「id_rsa」(秘密鍵)と「id_rsa.pub」(公開鍵)が作成されます。
(2)IAMマネジメントコンソールへいきます
(3)対象のユーザー名をクリックし、「認証情報」タブをクリックします
(4)「SSHパブリックキーのアップロード」ボタンをクリックします
(5)公開鍵の内容を貼り付ける欄が表示されますので、先程作成した公開鍵ファイル(id_rsa.pub)を開いて内容を貼り付けます。
※公開鍵最後に記載されている「ユーザー名@ホスト名」は削除して貼り付けます
(6)アップロードすると以下のようにSSHキーとしてAWS上に認識されます
これで、秘密鍵(id_rsa)と作成したユーザー名を使って踏み台サーバへSSH接続することが可能になります。
実際の運用上では、例えば新しく参画した人がいるならば、
IAMユーザーの作成はこちらで行なって、参画者に鍵の作成と公開鍵の登録を任せてしまってもいいですね。
そうすると踏み台サーバの管理がずっと楽になると思います。
以上、よろしければ運用管理の効率化に使ってみてください。
ひでさんでした。