はじめに

AWS 環境におけるサーバーアクセス管理は重要です。
そのため、多くの現場で踏み台サーバー(Bastion Host)が利用されていますが、踏み台サーバーの運用には課題もあります。
本記事では代替手段として AWS Systems Manager (SSM) Session Manager を紹介します。
そして SSM Session Manager のメリットを具体的に検証する手順も解説します。

踏み台サーバー運用の課題

従来、プライベートサブネット内の EC2 インスタンスへアクセスするには踏み台サーバーが一般的でした。しかし、踏み台サーバーの運用には以下のような課題があります。

  • セキュリティリスク:
  • 踏み台サーバー自体が攻撃対象になります。SSH ポートの公開は常にリスクを伴います。
  • SSH キーやパスワードの管理が煩雑です。漏洩リスクも無視できません。
  • 踏み台サーバーが侵害されると内部ネットワークへの侵入口になります。
  • 運用管理の負荷:
  • 踏み台サーバー自体のOSパッチ適用やセキュリティ対策、監視が必要です。
  • ユーザーアカウントやアクセス権の管理に手間がかかります。
  • 誰がいつアクセスしたかのログ管理と監査対応も必要です。
  • 可用性確保のため冗長化を検討するとさらにコストと手間が増えます。
  • コスト:
  • 踏み台サーバー用の EC2 インスタンス料金が発生します。
  • 上記運用管理のための人件費も考慮する必要があります。

これらの課題を解決する選択肢として SSM Session Manager があります。

比較

踏み台サーバーと SSM Session Manager の主な違いを比較します。

比較項目 踏み台サーバー (従来方式) AWS SSM Session Manager
アクセス方法 SSH クライアント、SSH キー/パスワード AWS コンソール、AWS CLI (特別なクライアント不要)
ポート開放 必要 (通常 SSH: TCP/22) 不要
認証 SSH キー、パスワード IAM ユーザー/ロール
アクセス制御 OS レベル、セキュリティグループ IAM ポリシー (インスタンス単位、ユーザー単位可)
サーバー管理 必要 (OS パッチ、セキュリティ対策、監視) 不要
ログ記録 (操作) OS 上で設定・管理が必要 CloudWatch Logs / S3 へ自動記録 (設定可能)!
ログ記録 (接続) OS 上で設定・管理が必要 CloudTrail へ自動記録
インスタンスコスト 必要 不要 (SSM 自体の利用料は別途要確認)
運用負荷 高い 低い

どちらを選ぶべきか?選定のポイント

以下の点を考慮して選択するのが良いでしょう。

  • セキュリティ要件: SSH ポートを開放したくない場合や IAM で厳密なアクセス制御を行いたい場合は SSM Session Manager が有力です。
  • 運用負荷: 踏み台サーバーの管理から解放されたい場合は SSM Session Manager が適しています。
  • 監査要件: 操作ログの自動記録や CloudTrail との連携を重視する場合は SSM Session Manager が有利です。
  • 既存環境: 既に踏み台サーバーが構築・運用されており、大きな変更が難しい場合は現状維持も選択肢です。ただし、リスクとコストは継続します。
  • コスト: インスタンス費用を削減したい場合は SSM Session Manager を検討する価値があります。

今回は、SSM Session Manager のメリットを具体的に検証していきます。

SSM Session Manager メリット検証手順

それでは実際に SSM Session Manager のメリットを検証してみましょう。

検証の前提条件

以下の準備が必要です。

  1. 検証対象 EC2 インスタンス: 任意の EC2 インスタンスを用意。
  2. SSM Agent: 対象インスタンスで SSM Agent がインストールされ実行中であること。
  3. IAM ロール: 対象インスタンスに AmazonSSMManagedInstanceCore ポリシーを含む IAM ロールがアタッチされていること。
  4. ネットワーク接続: 対象インスタンスが SSM エンドポイント (HTTPS/443) と通信できること。(インバウンドの SSH ポート開放は不要です!)

検証1: 踏み台サーバーなしでのセキュアな接続

SSH ポートを開放せず EC2 インスタンスへ接続できるか確認します。

手順 (AWS マネジメントコンソール):

  1. AWS マネジメントコンソールで Systems Manager サービスを開きます。
  2. 「ノードツール」\>「セッションマネージャー」を選択します。
  3. 「セッションの開始」をクリックします。
  4. 接続対象のインスタンスを選択し「セッションを開始する」をクリックします。

    ブラウザ上で対象EC2に接続できることが確認できます。

    手順 (AWS CLI):

AWS CLI を使用して接続することも可能です。事前に AWS CLI の設定と、Session Manager Plugin のインストールが必要です。

以下のコマンドを実行します。i-xxxxxxxxxxxxxxxxx の部分を、実際に接続したい EC2 インスタンスの ID に置き換えてください。

aws ssm start-session --target i-xxxxxxxxxxxxxxxxx

コマンドを実行すると、対象インスタンスへのセッションが開始され、シェルプロンプトが表示されます。

確認結果:
ブラウザまたはターミナルにシェルプロンプトが表示されました。踏み台サーバーや SSH クライアント、SSH キーなしで接続できました! SSH ポート (TCP/22) を開放せずにセキュアに接続できることが確認できました! これが大きなメリットの一つです。

コマンド実行に必要な Session Manager Plugin について:

aws ssm start-session コマンドを実行するには、Session Manager Plugin がローカルマシンにインストールされている必要があります。インストールされていない場合は、以下のドキュメントを参考にインストールしてください。

AWS CLI 用の Session Manager Plugin をインストールする
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

検証2: ログ記録による監査

Session Manager の利用状況や操作内容が自動的にログ記録されるか確認します。

手順:

  1. Session Manager の設定で、CloudWatch Logs または S3 へのログ記録を有効にします。
  2. Session Manager でセッションを開始し、いくつかのコマンド(例: ls, pwd)を実行して終了します。
  3. AWS CloudTrail のイベント履歴で StartSession TerminateSession イベントが記録されていることを確認します。

  4. 設定した CloudWatch Logs のロググループ、または S3 バケットを確認します。セッション内の操作コマンドが記録されたログファイル/オブジェクトが生成されているはずです。

    確認結果:
    CloudTrail にセッション開始/終了ログが記録されていました。CloudWatch Logs (または S3) にセッション内の操作コマンドが記録されていました! 誰がいつ、どのインスタンスで何を実行したかの監査証跡が自動的に取得できることが確認できました!

検証結果のまとめ

今回の検証を通じて、SSM Session Manager の以下のメリットが確認できました。

  • セキュリティ向上: 踏み台サーバーと SSH ポート開放が不要になり、攻撃対象領域が大幅に減少。 IAM による厳格なアクセス制御。
  • 運用管理の簡素化: 踏み台サーバー自体の構築・運用・パッチ適用・監視が不要。 サーバー管理者の負担が軽減。
  • 監査対応の強化: CloudTrail と CloudWatch Logs / S3連携により、接続履歴と操作ログが自動的に記録され、監査対応が容易になる。
  • コスト削減の可能性: 踏み台サーバー用の EC2 インスタンス費用が不要。

これらのメリットを考慮すると、多くのケースで既存の踏み台サーバーを SSM Session Manager に置き換えることは、AWS 運用の改善に大きく貢献すると言えるでしょう! ぜひ導入を検討してみてください。

参考ドキュメント

AWS Systems Manager Session Manager
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html
SSM Agent のインストールと設定
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent.html
SSM 用の IAM インスタンスプロファイルを作成する
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-instance-profile.html
Session Manager アクティビティのログ記録
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-logging.html