踏み台不要!SSMセッションマネージャーでのEC2接続構築手順

はじめに

AWSのインフラ設計において、プライベートサブネット内にあるEC2インスタンスへのセキュアなアクセス経路の確保は、常に重要な課題です。従来は「踏み台サーバー(Bastion Host)」をパブリックサブネットに構築してSSH接続する手法が一般的でした。しかし、踏み台サーバーは運用コストがかかるだけでなく、セキュリティホールになるリスクも抱えています。

本記事では、踏み台サーバーを完全に不要にし、IAMによるアクセス制御と操作ログの取得を可能にする「AWS Systems Manager(SSM)セッションマネージャー」の導入手順を、初心者から中級者向けにステップバイステップで解説します。

前提知識/必要な理由

踏み台サーバーを廃止すべき理由

  • 管理コストの削減: 踏み台サーバー自体のOSアップデートやパッチ適用、鍵管理が不要になります。
  • セキュリティの向上: インバウンド(外からの受信)ポートとしてSSH(22番)を開放する必要がなくなります。また、IAMポリシーを用いて「誰が」「どのインスタンスに」接続できるかを厳密に制御できます。
  • 監査ログの自動取得: セッションマネージャーを経由した操作ログは、Amazon CloudWatch LogsやS3バケットに自動的に保存・管理できます。

接続の仕組み

セッションマネージャーは、EC2インスタンス内で動作する「SSM Agent」が、AWSのSSMエンドポイントに対してアウトバウンド(外向き)のHTTPS(443番)通信を行うことで双方向接続を確立します。したがって、対象のEC2インスタンスがインターネット(またはVPCエンドポイント経由でSSM)にアウトバウンド通信できる環境が必要です。

具体的な設定手順・設計方法

今回は、プライベートサブネットに配置されたAmazon Linux 2023のEC2インスタンスに、ローカルPCのAWS CLIからセッションマネージャーで接続するための設定手順を解説します。

ステップ1:EC2用IAMロールの作成とアタッチ

EC2インスタンスがSSMサービスと通信できるように、適切なIAMロールを付与します。

  1. IAMコンソールを開き、[ロールの作成] を選択します。
  2. 信頼されたエンティティタイプで [AWSのサービス]、ユースケースで [EC2] を選択します。
  3. 許可ポリシーの検索窓に AmazonSSMManagedInstanceCore と入力し、チェックを入れて選択します。
  4. ロール名(例: EC2-SSM-Access-Role)を入力し、ロールを作成します。
  5. EC2コンソールに移動し、対象のインスタンスを選択して、[アクション] -> [セキュリティ] -> [IAMロールを変更] から作成したロールをアタッチします。

ステップ2:VPCエンドポイントの設定(プライベートサブネットの場合)

対象のEC2がインターネットへのルートを持たない完全なプライベートサブネットにある場合、VPC内からSSMへアクセスするためのVPCエンドポイント(インターフェイス型)を作成する必要があります。※NATゲートウェイ経由でインターネットに抜けられる場合は本手順は不要です。

以下の3つのエンドポイントを、EC2が所属するVPCとサブネットに対して作成します。セキュリティグループのインバウンドルールでは、EC2からのHTTPS(443番)通信を許可してください。

  • com.amazonaws.[リージョン名].ssm
  • com.amazonaws.[リージョン名].ssmmessages
  • com.amazonaws.[リージョン名].ec2messages

ステップ3:ローカルPCへのSession Managerプラグインの導入

ローカルPCのAWS CLIからセッションマネージャーを使用するには、拡張用の「Session Managerプラグイン」をインストールする必要があります。

macOSでのインストール手順

# プラグインのダウンロードとインストール
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/session-manager-plugin.pkg" -o "session-manager-plugin.pkg"
sudo installer -pkg session-manager-plugin.pkg -target /

# インストールの確認
session-manager-plugin --version

Windows (PowerShell) でのインストール手順

# インストーラーのダウンロードと実行
Invoke-WebRequest "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe" -OutFile "SessionManagerPluginSetup.exe"
Start-Process -FilePath ".\SessionManagerPluginSetup.exe" -ArgumentList "/S" -Wait

# インストールの確認
session-manager-plugin --version

ステップ4:接続の検証

ローカルPCのターミナルまたはコマンドプロンプトから、以下のAWS CLIコマンドを実行してEC2に接続します。

# [Instance-ID]の部分を接続対象のEC2インスタンスID(例: i-0123456789abcdef0)に置き換えてください
aws ssm start-session --target [Instance-ID]

接続に成功すると、EC2のシェル(ssm-user)が起動し、コマンド操作が可能になります。セッションを終了するには exit コマンドを実行します。

実務での注意点

1. SSM Agentの起動ステータス確認

Amazon Linux 2やAmazon Linux 2023、Ubuntu 18.04 LTS以降などの主要なAMIにはSSM Agentがプリインストールされています。しかし、独自のカスタムAMIを使用している場合や何らかの理由でエージェントが停止している場合は接続できません。接続できない場合は、以下のコマンドで起動ステータスを確認してください。

sudo systemctl status amazon-ssm-agent

2. ログ保存先(S3/CloudWatch)の設定

実務では、運用の透明性とセキュリティ監査のため、操作ログの出力を必須とすることが推奨されます。AWS Systems Managerのコンソールにある「セッションマネージャー」の「設定」タブから、ログの送信先(Amazon S3バケットまたはCloudWatch Logs)を設定できます。この際、EC2のIAMロールにS3への書き込み権限(s3:PutObject)やCloudWatchへのログ送信権限を事前に追加しておく必要があります。

3. プライベートDNSの有効化

ステップ2でVPCエンドポイントを作成する際、VPC設定の「DNS解決」および「DNSホスト名」を有効にし、エンドポイントの作成時に「プライベートDNS名を有効にする」のチェックがオンになっていることを確認してください。これが無効になっていると、EC2インスタンスがSSMのパブリックIPを解決しようとして接続エラーになります。

まとめ

SSMセッションマネージャーを導入することで、踏み台サーバーの維持管理コストやセキュリティリスクを大幅に削減できます。インフラエンジニアとしては、単に接続環境を作るだけでなく、CloudWatch Logsとの連携による「オペレーションの可視化」まで設計・提案できるようになることで、実務での信頼性がより一層高まります。ぜひ本手順を参考に、セキュアなAWS運用の第一歩を踏み出してください。

上部へスクロール