踏み台不要!SSMセッションマネージャーによるEC2安全接続手順

はじめに

実務において、EC2インスタンスへのセキュアなアクセス経路の確保は重要な課題です。従来の踏み台サーバー(Bastion)運用は、セキュリティグループの管理やパッチ当てなどの運用負荷、さらには維持コストがデメリットでした。本記事では、踏み台サーバーを排除し、ポートを完全に閉じた状態でEC2に安全にリモート接続できる「AWS Systems Manager(SSM)セッションマネージャー」の設定手順を解説します。

前提知識/必要な理由

SSMセッションマネージャーとは、AWSのマネージドサービスを利用して、ブラウザやAWS CLIから直接EC2インスタンスのシェルにアクセスする機能です。これが必要とされる主な理由は以下の通りです。

  • インバウンドポートの開放が不要:SSH(22番ポート)などの受信ポートをセキュリティグループで開く必要がなく、不正アクセスのリスクを極小化できます。
  • 鍵管理が不要:SSHキーペアの配布や管理が不要になり、IAM(Identity and Access Management)による一元的なアクセス制御が可能です。
  • 監査ログの自動取得:操作ログをS3やAmazon CloudWatch Logsに自動で転送・保存できるため、厳格な監査要件にも容易に対応できます。

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

SSMセッションマネージャーを導入するための具体的なステップを解説します。

1. EC2用のIAMロールの作成

EC2インスタンスがSSMサービスと通信できるように、適切な権限を持つIAMロールを作成します。

IAMコンソールで新しいロールを作成し、信頼されたエンティティとして「EC2」を選択します。許可ポリシーとして、AWSのマネージドポリシーである以下のポリシーをアタッチします。

AmazonSSMManagedInstanceCore

※独自にカスタマイズしたポリシー(インラインポリシーなど)を使用する場合は、最低限以下のJSON権限が必要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:UpdateInstanceInformation",
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"
        }
    ]
}

2. EC2インスタンスへのIAMロール適用

対象のEC2インスタンスに、先ほど作成したIAMロール(インスタンスプロフィール)をアタッチします。EC2インスタンスのOSがAmazon Linux 2023やAmazon Linux 2の場合、SSM Agentはデフォルトでプリインストールされているため、特別なインストール作業は不要です。

3. クライアント環境のセットアップ(外部ツールの導入)

ローカルPCの端末(ターミナル)から接続する場合、AWS CLIに加え、Session Manager プラグインの導入が必要です。これらは標準では提供されていないため、OS環境に応じて以下の手順で事前にインストールしてください。

macOSの場合(Homebrewを使用):

# Session Manager プラグインのインストール
brew install --cask session-manager-plugin

Windowsの場合(PowerShellを使用):

公式のMSIインストーラーをダウンロードしてサイレントインストールを実行します。

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

4. AWS CLIを使用した接続の確認

環境が整ったら、ローカルPCのターミナルから以下のAWS CLIコマンドを実行して接続します。[INSTANCE_ID]には接続先EC2のインスタンスIDを入力してください。

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

コマンド実行後、シェルが起動し「Starting session…」と表示されれば接続成功です。

実務での注意点

  • プライベートサブネット内での通信:インターネットに接続できない完全なプライベートサブネットに配置されたEC2の場合、SSMと通信するためにVPCエンドポイント(ssm, ssmmessages, ec2messagesの3つ)の設計・配置が必須となります。
  • SSM Agentの最新化:古いバージョンのAgentでは最新のセッションオプションが動作しない場合があります。SSMの高速セットアップ機能などを利用し、定期的に自動アップデートされるよう設計することを推奨します。
  • IAMポリシーによる詳細なアクセス制御:実務では、開発者ごとにアクセスできるEC2インスタンスをタグ(例:Environment=Development)などで制限する「属性ベースのアクセス制御(ABAC)」を設計に組み込むことが重要です。

まとめ

SSMセッションマネージャーを導入することで、インフラ全体のセキュリティが飛躍的に向上し、不要な踏み台サーバーの管理コストから解放されます。AWS CLIプラグインの導入手順や、本番環境を見据えたVPCエンドポイントの設計など、今回紹介した手順を参考に、安全で運用のしやすいEC2アクセス環境を構築してみてください。

上部へスクロール