EC2のセキュリティがガバガバに穴が空いている状態の皆さん息してますかー?
すみません。いきなり煽りから入ってしまいました。
最近、サーバー構築作業をしている中でセキュリティ担保の方法を学ぶことがあったので、皆さんに共有したいなーと思い記事を書いています!
EC2へSSH接続を行い、サーバーでの作業を行っているバックエンド側の人の幸せにつながってくれたら嬉しいです〜
EC2のSSH鍵の扱いどうしている?
複数人でプロジェクトを組んでいる場合、サーバーで作業をする人が複数出てくると思います。
そうなってくると以下の作業を 作業者の人数分 × サーバーの台数分
実施しなければいけなくなります。
- 作業者Aのユーザーを登録
- 各作業者のローカルでSSH鍵の生成 && サーバー上で公開鍵の登録
この時点で億劫ですね。
また、上記の作業に加えて 鍵の定期的なローテーション、チームの入退場が発生した時のユーザー管理が発生してしまいます。
死ぬほど面倒くさい!!!!!!!!
更にセキュリティに興味が無いメンバーが存在すると、鍵のローテーションはやらなくていいじゃんとか抜かすんですよ。。あー、面倒くさい。
ECS Instance Connect で解決しましょう
鍵のローテーションも面倒くさい作業も全てやらなくて済む方法が一つだけ存在するのです。
それが、AWSのコンソールパネルから該当EC2にSSH接続を行うことができる EC2 Instance Connect
という機能です。
この機能は~/.ssh/authorized_keys
に一時的なキーを付与するという特徴があります。
そのため、僕達ユーザーが鍵の管理をする必要がなくなるので、運用の手間をかなり減らすことができます。
(サーバー運用やったことにしか伝わらないと思いますが、管理するものを減らすという事は運用において絶大に効果があるのです!!!!
しかもこの機能、API と CLI にも対応しているのでちょっとした作業時にも効果があるのですよぉぉぉぉ!!!
基本的に権限さえ付与してしまえば使える機能ですので、皆さん使ってみて下さい!
AWSのコンパネでは、コマンド操作やりづらいよ〜 とクレーム言ってくる輩は絶対出てくると思います。
こちらの作業量を減らすためにも死守しなければいけないので、ぜひ以下のような提案を行って下さい
- Tmux 使おうぜ!
- 画面分割
- セッション保持
- bash-completion 🔜
- 補完効くぜ〜
- thefuck
- 本当にいい感じにやってくれるぜ〜
一応セキュリティグループも絞っておこう
EC2 Instance Connect を使う際には、セキュリティグループで SSHのポート 22
を開放して置く必要があります。
22番ポートを開けるのは多少なりとも気が引けますよね〜
最低限のセキュリティ担保として、 EC2 が所属する Region のみからアクセスできるようにIP指定をすることができます。
下記のサイトにリージョン単位かつサービス単位でIP範囲をまとめてくれています。
https://ip-ranges.amazonaws.com/ip-ranges.json
今回の例でいうと ap-northeast-1
に所属するEC2のSSH接続を制限する場合は、 3.112.23.0/29
を セキュリティグループのIP範囲に指定してあげると良いです。
これで、IAMで認証されたユーザーかつ東京リージョンからのSSH接続に制限することができます。
{
"ip_prefix": "3.112.23.0/29",
"region": "ap-northeast-1",
"service": "EC2_INSTANCE_CONNECT",
"network_border_group": "ap-northeast-1"
},
幸せになりたい
運用負荷が下がると幸せになれます。
幸せになろう。