はじめに
各EC2のユーザー管理がしんどいしんどい。
だってインスタンスが20~30種類あって、インスタンス毎にユーザーが独立されて管理されているんですぜ。
そもそも、EC2にユーザーいる?sshする必要ってある?しなくても済むように設計するべきだよね。
接続する時はSSMでいいよね。
と言う訳でそんな構成に。
したはよいが、今度はSSMする時に
「え〜っと。どうやるんだっけ?」
と言う経年劣化による記憶容量がScaleIn、コマンドが思い出せない事案が発生。
ならToolを作りましょう。
構築
コマンドを実装
$ vim ssm.sh
ssm.sh
#!/bin/sh
AWS_CONFIG='~/.aws/config'
profile=''
function showProfile() {
echo '# Input profile.'
echo '## profile list.'
cat ~/.aws/config | grep profile
echo '##'
read input
if [ -z $input ] ; then
echo 'Done.'
exit 1
else
profile=$input
fi
}
function ssmInstance() {
echo '# Input ResourceId.'
echo '## ResourceId list.'
aws ec2 describe-tags --profile $profile --output table --filters "Name=resource-type,Values=instance"
echo '## ResourceId list.'
read input
if [ -z $input ] ; then
echo 'Done.'
exit 1
else
aws ssm start-session --target $input --profile $profile
fi
}
showProfile
ssmInstance
コマンドを移動
$ chmod 744 ssm.sh
$ mv ssm.sh /usr/local/bin/ssm
以上。
実際に使ってみる。
$ ssm
# Input profile.
## profile list.
[profile profile-dev]
[profile profile-prod]
[profile teck]
[profile pricate-dev]
##
-- 接続対象のprofileを入力
# Input ResourceId.
## ResourceId list.
------------------------------------------------------------------------------------------
| DescribeTags |
+----------------------------------------------------------------------------------------+
|| Tags ||
|+----------------------------+-----------------------+---------------+-----------------+|
|| Key | ResourceId | ResourceType | Value ||
|+----------------------------+-----------------------+---------------+-----------------+|
|| Name | i-xxx | instance | webapp_1 ||
|| Name | i-xxx | instance | webapp_2 ||
|| Name | i-xxx | instance | batch ||
|| Name | i-xxx | instance | nat ||
|+----------------------------+-----------------------+---------------+-----------------+|
## ResourceId list.
-- 接続対象のResourceIdを入力
Starting session with SessionId: xxxxxxxx
sh-4.2$
-- 接続!!!
終わりに
EC2のユーザーを脳死で追加してしまうと、いざと言うときに管理や棚卸しがとても大変。
なのでそもそも「EC2に接続しないように・させないように」する設計が大事。
※ ECS / Fargateを使えば万事解決