Loading
BLOG 開発者ブログ

2020年12月2日

【まだEC2のSSHで消耗してるの?】AWS Systems Manager Session Managerのススメ



TL;DR

  • 特別な要件がない限り、AWS EC2への接続にSSHは利用せず、AWS Systems Manager Session Managerを利用しましょう
  • Session Managerを使うことで、セキュリティ向上やユーザー管理の簡易化といった恩恵を受けることができます



目次



はじめに

こんにちは。
クラウドソリューショングループのwatanabe.tです。

この記事は アイソルート Advent Calendar 2020 2日目の記事です。

昨日は suzuki.ko さんの たった3行編集で!ChronyでシンプルNTPサーバー構築 でした。
意外と知らないNTPサーバについて、知識を深めるいい機会になりましたね!

さて、今回は未だSSHで頑張っている人のために便利なサービスを紹介します。


AWS Systems Manager Session Managerとは?

AWS Systems Managerは、EC2などのインフラサービスを管理および制御するためのサービスです。

Systems Managerを利用することで、複数のEC2インスタンスに対してオペレーションタスクを自動的に実行したり、アプリケーションのインストール/アップデートを実行したりすることが可能です。
これにより運用上の手間を短縮し、煩雑なインフラ管理を安全かつ容易に運用・管理することを目的としたサービスです。

その中の機能の一つとして、Session Managerというものがあります。
これにより、EC2インスタンスのインバウンドポートの開放や踏み台サーバを設けることなく、ブラウザからShellを操作することが可能になります。

また、ユーザー管理もSSH鍵ではなくIAMで行われるため、管理の2重化を防ぎつつ操作履歴などを残すことができます。

Session Managerで接続する際のイメージ

ちなみに、AWS Systems Managerの略称はSSMとなりますが、これは前身となるサービスがAWS EC2 Simple Systems Managerだったことに由来しています。


なぜEC2へのSSHを避けるべきなのか?

Session Managerの概要については説明しました。
では、なぜSSHを避けるべきなのでしょうか?

主な理由は3つあります。

  1. EC2のSSHインバウンドポートを開放しなければならない
  2. ユーザーの管理が煩雑になる
  3. ユーザーの操作履歴が残らない(残すのが大変)


1. EC2のSSHインバウンドポートを開放しなければならない

EC2へのSSHを行うためには、セキュリティグループでSSHインバウンドポート(22ポート)を開放しておく必要があります。

この際、接続元のIPアドレスが固定できるなら問題ないですが、そうでない場合はインターネットに対して無制限にアクセスを許可することになります。

サーバ側の設定をしっかり行えているなら問題ありませんが、設定ミスや脆弱性により悪意を持った第3者に攻撃を受ける可能性があります。
そのため、基本的にはEC2のSSHインバウンドポートは閉じたままにしておくことをオススメします。

2. ユーザーの管理が煩雑になる

EC2へアクセスするユーザーが増減した際、忘れずにサーバ側のユーザーを追加/削除する必要があります。

また、EC2がスケールアウトによって増加した場合、そのインスタンスにもユーザーの増減を反映する必要があります。

ここまでやるとなるとかなり手間ですし、反映漏れが起こることによるセキュリティリスクもあります。

3. ユーザーの操作履歴が残らない(残すのが大変)

プロダクトレベルでEC2を利用する際、セキュリティやガバナンスを意識して、接続履歴や操作履歴を残す場合があります。

その場合、EC2にそのためのソフトウェアをインストールしておくなどの対応が必要になりますが、設定が煩雑だったり、それぞれのEC2ごとに確認したりしなければなりません。

また、EC2がスケールインなどによって終了することを考慮すると、CloudWatch Logsを利用して履歴を送信・保存しておくなどの対応が必要になります。

これらの理由により、特別な理由がない限りEC2へSSHで接続するのは、バッドプラクティスであるといえるでしょう。


Session Managerを使ってみる

ここからは実際にSession Managerを使ってEC2へ接続してみたいと思います。

あらかじめ接続対象のEC2インスタンスは起動しておきますが、2点ほど注意があります。

  1. `AmazonSSMManagedInstanceCore` というIAMポリシーを含んだIAMロールをEC2にアタッチする必要がある
  2. EC2からSystems Managerのエンドポイントにアクセスするため、EC2がインターネットまたはVPCエンドポイントにアクセスできる必要がある

ちなみに、SSHインバウンドポートが開いていないセキュリティグループをアタッチしてEC2インスタンスを起動しようとした場合、このままだとEC2インスタンスへ接続できなくなる旨の警告が表示されますが、強い意志を持って「次へ」を選択しましょう。

また、キーペアの設定も不要になります。
作成時には「キーペアなしで続行」を選択すると、ここでもEC2インスタンスへ接続できなくなる旨が表示されますが、強い意志を持って「作成」を選択しましょう。

さて、EC2インスタンスを起動したら、いよいよSession Managerで接続してみます。

インスタンス一覧より、対象のインスタンスを選択した状態で画面上部の「接続」を選択します。


セッションマネージャーのタブで「接続」を選択するとブラウザでShellが起動します。


Shellでは任意のコマンドを実行でき、SSHクライアントから接続した場合と何ら変わらず操作することができます。


さらに、あらかじめSystems Manager側で設定をしておくことにより、実行されたコマンドと履歴をCloudWatch Logsに保存しておくことが可能になります。




おわりに

AWS Systems Manager Session Managerを利用することで、EC2の操作にSSHが不要な時代となりました。

また、AzureもBastionという似たサービスを提供していることから、SSHで接続することは避けた方が良いという各社の思いが伝わってきます。

なお、Session Managerの利用料は無料となっています。
既存の運用・管理の手間を考えると使わない手は無いでしょう!

明日は kikuchi.s さんの 【DX】今だからこそ捉えなおしてみるです。


watanabe.tのブログ

クラウドソリューショングループ所属

昔はモバイルアプリ開発を、今はGCP, AWS, Firebaseなどのクラウド周りの提案/開発を行っているエンジニアです。

AWS認定ソリューションアーキテクト取得しました!