みなさん、EC2 に接続する時は、session manager を使っていますか? ssh 接続と比べてよりセキュアにEC2 に接続することが可能になります。
環境構築について
今回も前回執筆したブログと同様、Amazon Q とチャットしながら、構築していきました。
q chat
前回のブログも参照してみてください
SSH と比べてどんなところがいいの??
表形式でまとめてみました。
比較ポイント | ssh 接続 | ssm 接続 |
port公開 | 22 port を公開 | 公開は不要 |
アクセス制限 | セキュリティグループ OS でのfirewall・fail2ban | IAM での制限・セキュリティグループ |
鍵 | 秘密鍵の管理 | 鍵は不要 |
一番大きいところとしては、ssh port を開放していないところでしょうか?基本的にセキュリティグループでの制限をしているので、攻撃されることは少ないかもしれませんが、攻撃された時のリスクは大きいように思います。
一方で、ssm 接続は22 番ポートなどそもそもポートを公開する必要がないため、そういった攻撃を受ける可能性はかなり少ないよう思います。
SSM 接続でもセキュリティを気にする必要があるの??
ssm 接続をする時は、ssm-user で接続するので、その権限には少し不安はあります。
というのは、sudoers の権限を見てみると、ssm-user の権限は
# User rules for ssm-user
ssm-user ALL=(ALL) NOPASSWD:ALL
password なしで接続できるのか。。。かなり強い権限を持っていますね。EC2 を管理している管理者だったらいいですが、開発の方にも同じ権限を充てるのはちょっと違う気がしますね。
ということで他のユーザでログインできるといいですね。
他のユーザでのログイン??
ssm-user の権限を直接変更してもいいですが、そうすると毎回password をもとめられて、結構面倒だったりします。調査の初動が遅れてしまう可能性があります。
なので、RunAs コマンドというのを使ってみます。設定方法は以下です
session manager で設定を押下

編集を押して => RunAs の変更
編集ボタンを押して、

Run As を有効にして、対象のユーザ名称を記載しましょう

ここまでできたら、下の方にある保存ボタンを押しましょう。
session manager で接続
ec2-user で接続できれば、オッケーですね。

変更できてました!!!
うん?ここでみなさん、一つ疑問に思いませんか?
疑問???
そうです。毎回変更しないといけないの???とても大変じゃない??絶対間違えて、ssm-user で入ってしまうときもあると思います。
それならIAM で制御してしまおうという結論になります。ということでやっていきます。
IAM Role での制限
制限する前に、ユーザを作成しましょう
ユーザ作成
ユーザ作成しましょう。
# ユーザ作成
useradd test-user
このユーザーでログインできるのが目的なので、細かい設定はしません。
IAM Userの設定
特定のIAM USER の設定にいって、設定したユーザーでログインできるように、以下の値をいれてあげます。
キー | SSMSessionRunAs |
値 | test-user |

session manager の設定
RunAs は有効にして、特定のユーザなどは記載しない形で保存してください

session manager で接続してみる
test-user で接続できるようになっていたら、オッケーです

これでユーザーごとに接続ができるようになります!
IAM Role でも同じことができます。これでswitch user などでRole base で制御している場合も安心ですね。
まとめ
session manager 自体使ったことがないと、ややこしそうだとか運用が大変そうとかのイメージがあるかもしれません。最初の導入はそうかもしれませんが、最初に設計さえ固めてしまえば、Cloudformation などでもユーザーの変更などは可能になるので、セキュアな接続を進めていきましょう!!
コメント