SSMで構築!踏み台サーバーなしでEC2に安全接続する設定手順

はじめに

実務のインフラ構築において、プライベートサブネット内にあるEC2インスタンスへのセキュアなアクセス経路の確保は重要な課題です。かつては踏み台サーバー(Bastion)の運用が一般的でしたが、現在ではセキュリティや運用の手間を削減するため、AWS Systems Manager(SSM)の「Session Manager」を利用した接続が推奨されています。本記事では、踏み台サーバーを排除し、安全にプライベートEC2へ接続するための環境構築手順をステップバイステップで解説します。

前提知識/必要な理由

Session Managerを利用することで、インターネットから隔離されたプライベートサブネット内のEC2に対して、以下のメリットを享受しながら接続できます。

  • ポート22の開放が不要: インバウンドのSSHポート(TCP/22)を完全に閉じることができ、外部からの攻撃経路(アタックサーフェス)を最小化します。
  • SSHキーペアの管理が不要: IAMポリシーを用いてアクセス制御を行うため、SSH秘密鍵の紛失や漏洩のリスクがなくなります。
  • 操作ログの取得: 誰がいつ、どのようなコマンドを実行したかをCloudWatch LogsやS3に自動で記録できます。

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

ここでは、パブリックIPを持たない完全なプライベートサブネット上のEC2(Amazon Linux 2023)に対して、Session Managerで接続するための手順を説明します。

Step 1. EC2用のIAMロール(インスタンスプロフィール)の作成

EC2がSSMのAPIと通信できるようにするためのIAMロールを作成します。

  1. IAMコンソールを開き、「ロールの作成」をクリックします。
  2. 信頼されたエンティティタイプとして「AWSのサービス」、ユースケースに「EC2」を選択します。
  3. 許可ポリシーとして、AWS管理ポリシーの AmazonSSMManagedInstanceCore を検索し、チェックを入れます。
  4. 任意のロール名(例: EC2-SSM-Access-Role)を付けて、ロールを作成します。

Step 2. VPCエンドポイントの設定(プライベート環境の場合)

プライベートサブネットからインターネットを経由せずにSSMへ接続するため、VPCエンドポイント(HTTPS/ポート443)を設定します。セキュリティグループは、VPC内からのHTTPS入力を許可するものを適用してください。

以下の3つのVPCエンドポイント(インターフェイス型)を作成し、プライベートサブネットに配置します。

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

Step 3. EC2インスタンスの起動とIAMロールの適用

EC2インスタンスを起動し、先ほど作成したIAMロールをアタッチします。Amazon Linux 2023などの最新OSには、SSM Agentがプリインストールされているため、特段の設定なしで起動時にエージェントが動作します。

※もしSSM Agentが入っていない古いOSの場合は、以下のコマンド等で手動インストールが必要です。

sudo dnf install -y amazon-ssm-agent
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

Step 4. ローカルPCから接続するためのクライアント設定

ローカルのターミナルからAWS CLI経由で接続する場合、AWS CLIに加えて、追加の外部プラグイン「Session Manager Plugin」が必要です。以下は、macOSおよびLinux環境への導入手順です。

【導入手順:Session Manager Pluginのインストール】

# macOSの場合(Homebrewを使用)
brew install --cask session-manager-plugin

# Linux (Ubuntu) の場合
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb

インストール完了後、以下のAWS CLIコマンドを実行することで、SSHキーを使わずにプライベートEC2へ安全に接続できます。

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

実務での注意点

  • VPCエンドポイントのコスト: VPCエンドポイントは、時間あたりおよびデータ処理量に対して課金が発生します。複数のVPCが存在する場合は、VPCピアリングやTransit Gatewayを活用したエンドポイントの共有設計を検討してください。
  • アクセス権限の最小化: 全ての開発者にSession Managerの接続権限を与えると危険です。IAMポリシーを用いて、タグ(例:Environment=Dev)に基づいた条件分岐(ABAC)を設定し、特定のインスタンスのみ接続できるように制限しましょう。
  • 監査ログの設計: Session Managerのログ設定で、操作ログをS3またはCloudWatch Logsへ暗号化して転送する設定を必ず有効にしてください。インシデント発生時の証跡となります。

まとめ

Session Managerを導入することで、従来の「踏み台サーバー」による管理コストとセキュリティリスクを大幅に削減できます。特にプライベートVPC内でのVPCエンドポイントの設定は、初期構築時に必須となるベストプラクティスです。ぜひ今回の手順を参考に、インフラ全体のセキュリティ向上にお役立てください。

上部へスクロール