SSMでEC2へ安全接続!セッションマネージャー構築完全ガイド

はじめに

AWSの運用において、EC2インスタンスへのセキュアなシェル接続は必須の要件です。しかし、従来のSSH接続では、踏み台サーバーの運用やSSH鍵の管理、セキュリティグループで22番ポートを開放するといったセキュリティ上のリスクと管理コストが伴いました。本記事では、これらの課題を解決し、実務での採用率が非常に高い「AWS Systems Manager(SSM)セッションマネージャー」を用いて、踏み台サーバー不要かつ安全にEC2へ接続するための設定手順をステップバイステップで解説します。

前提知識/必要な理由

SSMセッションマネージャーとは、AWS Systems Managerの一機能であり、ブラウザやAWS CLIを介してEC2インスタンスにセキュアに接続できるマネージドサービスです。この方法を採用すべき主な理由は以下の通りです。

  • ポートの開放が不要: EC2インスタンスのアウトバウンド通信(HTTPS: 443)のみを利用するため、インバウンドの22番ポートを開放する必要がありません。
  • 鍵管理からの解放: IAMポリシーによってアクセス権限を制御するため、SSHの秘密鍵・公開鍵を管理・配布する手間がなくなります。
  • 操作ログの取得: セッション中の操作ログをAmazon S3やAmazon CloudWatch Logsに自動で記録・保管できるため、監査対応が容易になります。

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

セッションマネージャーを利用するための設定手順を4つのステップで進めます。

ステップ1:EC2用IAMロールの作成

EC2インスタンスがSSMサービスと通信するための権限を定義したIAMロールを作成します。

  1. IAMコンソールを開き、「ロールの作成」をクリックします。
  2. 信頼されたエンティティの種類で「AWSサービス」、ユースケースで「EC2」を選択します。
  3. 許可ポリシーの検索窓で「AmazonSSMManagedInstanceCore」を検索し、チェックを入れます。
  4. ロール名(例: EC2-SSM-Role)を入力し、「ロールを作成」をクリックします。

ステップ2:EC2インスタンスの作成とIAMロールのアタッチ

次に、作成したIAMロールをEC2インスタンスに紐付けます。今回は標準的な「Amazon Linux 2023」をターゲットとします。

  1. EC2コンソールから「インスタンスを起動」を選択します。
  2. AMIに「Amazon Linux 2023」を選択します(SSM Agentがプリインストールされているため、個別の導入は不要です)。
  3. 「高度な詳細」を展開し、「IAM インスタンスプロフィール」で先ほど作成した EC2-SSM-Role を選択します。
  4. セキュリティグループの設定で、インバウンドルール(SSH用のポート22など)がすべて「空(ルールなし)」であることを確認し、インスタンスを起動します。

ステップ3:ローカル環境(AWS CLI)での接続準備

AWS CLIを利用してローカルPCからEC2に接続するには、AWS CLIのほかに「Session Manager プラグイン」という外部パッケージの導入が必要です。以下は、各環境に応じた導入手順です。

【macOSの場合(Homebrewを使用)】

brew install --cask session-manager-plugin

【Linux (RHEL/CentOS/Amazon Linux) の場合】

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm

【Windows (PowerShell) の場合】

Invoke-WebRequest "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows_64bit/SessionManagerPluginSetup.exe" -OutFile "SessionManagerPluginSetup.exe"
Start-Process -FilePath ".\SessionManagerPluginSetup.exe" -ArgumentList "/S" -Wait

ステップ4:接続確認

設定が完了したら、ローカルのターミナルから以下のAWS CLIコマンドを実行して、対象のEC2インスタンスへ接続できるか確認します。

aws ssm start-session --target i-0123456789abcdef0

i-0123456789abcdef0 は、起動したEC2インスタンスの実際のインスタンスIDに置き換えてください。接続に成功すると、シェルプロンプトが表示されます。

実務での注意点

  • プライベートサブネットでの配置: インターネットゲートウェイを持たない隔離されたプライベートサブネットにEC2を配置する場合、SSMサービスと通信するための「VPCエンドポイント(ssm, ssmmessages, ec2messages)」の作成が必須となります。
  • IAMポリシーによる最小特権の原則: 本番環境では、開発者が任意のインスタンスに自由に接続できないよう、IAMポリシーの Resource 句で接続可能なインスタンスIDやタグ(例: Environment: Development)を制限する設計にしてください。
  • セッションの自動切断: 実務では、接続したまま放置されたセッションを自動切断するために、AWS Systems Managerの「セッションマネージャーの優先設定」から、無操作時のタイムアウト時間(例: 20分)を明示的に設定しておくことが推奨されます。

まとめ

SSMセッションマネージャーを導入することで、SSH鍵の漏洩リスクを完全に排除しつつ、踏み台サーバーの維持費や運用保守の手間を削減できます。実務のAWS環境設計において、22番ポートを開放する運用は過去のアンチパターンとなりつつあります。本記事の手順を参考に、セキュリティが高く運用負荷の低いモダンなインフラアクセス環境を構築しましょう。

上部へスクロール