SSHからの脱却?SSM-UserとIAMでセキュアなリモートアクセスを実現する

AWS

みなさん、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 で接続する OS ユーザーを変更する方法を教えてください | DevelopersIO

まとめ

session manager 自体使ったことがないと、ややこしそうだとか運用が大変そうとかのイメージがあるかもしれません。最初の導入はそうかもしれませんが、最初に設計さえ固めてしまえば、Cloudformation などでもユーザーの変更などは可能になるので、セキュアな接続を進めていきましょう!!

コメント

タイトルとURLをコピーしました