はじめに
EC2をパブリックサブネット → プライベートサブネットに移設した。
プライベートサブネットにはインターネットへアクセスするための設定がない。
ローカル環境(Windows Subsystem for Linux)からEC2のグローバルIP宛てにSSHで接続していたが、接続方法をSSHからSession Managerに変更する。
Session Managerとは
サービス概要
Session Manager はフルマネージド型の AWS Systems Manager ツール[(※1)]
Amazon Elastic Compute Cloud (EC2) インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン (VM) への安全な接続を確立[(※1)]
インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりする必要はありません[(※1)]
通信の流れ
セッションを開始するための最初のコマンドを送信すると、Session Manager サービスは ID を認証し、IAM ポリシーにより付与されたアクセス権限を検証して、設定 (セッションの許容限度の確認など) を確認します。それから、SSM Agent にメッセージを送信して双方向接続を開きます。接続の確立後、John が次のコマンドを入力すると、SSM Agent からのコマンド出力がこの通信チャネルにアップロードされ、ローカルマシンに送り返されます。[(※1)]
以上を踏まえると、こんなかんじか。
=====
【クライアント】
↓
【Session Manager】→【IAM】
↑
【接続先サーバー(SSM Agent)】
=====
Session ManagerでEC2に接続する(コンソールから)
まずはコンソールから接続できる状態を目指す(参考:※3)。
SSM Agent導入
SSM Agent導入済みのAMIからEC2インスタンスを作成していたため、対応不要。
SSM Agentを導入する場合はこちらを参照。
なお、SSM Agent導入済み確認コマンドと出力結果は下のとおり。
【確認コマンド】
yum info amazon-ssm-agent
【出力結果】
Installed Packages
Name : amazon-ssm-agent
Version : 3.3.4624.0
Release : 1.amzn2023
Architecture : x86_64
Size : 118 M
Source : amazon-ssm-agent-3.3.4624.0-1.amzn2023.src.rpm
Repository : @System
Summary : Manage EC2 Instances using SSM APIs
URL : http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html
License : ASL 2.0
Description : This package provides Amazon SSM Agent for managing EC2 Instances using SSM APIs
エンドポイントへの接続
EC2から以下のエンドポイントにHTTPS(ポート 443)で接続できる必要がある。
- ec2messages.region.amazonaws.com
- ssm.region.amazonaws.com
- ssmmessages.region.amazonaws.com
EC2が設置されているプライベートサブネットからインターネットへアクセスする手段がないため、VPCエンドポイントを作成。

なお、VPCエンドポイントに関連付けたセキュリティグループではEC2からポート 443へのインバウンド通信を許可している(参考:※4)。
EC2にSSMへのアクセス権限を付与
EC2にアタッチしているIAMロールへAWS管理IAMポリシー AmazonSSMManagedInstanceCoreを設定。
しばらくすると、マネージドノードとして対象のEC2が表示されるようになった。

コンソールから接続実施
対象のEC2を選択して
ノードアクション > 接続
をクリック。

Session ManagerでEC2に接続する(ローカル環境から)
続いて、本題である、ローカル環境(Windows Subsystem for Linux)からの接続を目指す。
接続の流れとしては以下を想定。
- aws loginコマンドでIAMユーザーにログイン
- aws ssm start-sessionコマンドでEC2へ接続
本旨から逸れるため、aws loginについては割愛。
aws ssm start-sessionを使える環境を整え、ローカル環境からEC2への接続を実施する。
AWS CLIをインストール
以下のコマンドを実施(参考:※5)。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
インストールOK
$ aws --version
aws-cli/2.36.14 Python/3.14.6 Linux/6.6.87.2-microsoft-standard-WSL2 exe/x86_64.ubuntu.24
$
AWS CLI 用の Session Manager プラグインをインストール
以下のコマンドを実施(参考:※6)。
- インストーラーパッケージをダウンロード
curl -o "session-manager-plugin.deb" "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb"
- インストーラーパッケージに関連付けられた署名ファイルをダウンロード
curl -o "session-manager-plugin.deb.sig" "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb.sig"
- GPG ツールをインストール
apt update
apt install gnupg2
- インストーラーパッケージの署名確認
※必ずAWS Systems Manager > ユーザーガイド >AWS Systems Manager > Session Manager プラグインの署名を確認する > ステップ 4を参照のうえ実施した方がよさそうなので、コマンドは割愛 - インストール実施
sudo dpkg -i session-manager-plugin.deb
インストールOK
$ session-manager-plugin --version
1.2.835.0
$
IAMユーザーにSSMへのアクセス権限を付与
以下のカスタマー管理IAMポリシーを作成のうえ、EC2への接続に使用するIAMユーザーへを設定(参考:※7)。
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession",
"ssm:SendCommand"
],
"Resource": [
"arn:aws:ec2:ap-northeast-1:[アカウントID]:instance/[インスタンスID]",
"arn:aws:ssm:ap-northeast-1:[アカウントID]:document/SSM-SessionManagerRunShell"
]
},
{
"Effect": "Allow",
"Action": ["ssmmessages:OpenDataChannel"],
"Resource": ["arn:aws:ssm:*:[アカウントID]:session/${aws:userid}-*"]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:[アカウントID]:session/${aws:userid}-*"
]
}
]
}
ローカル環境から接続実施
ローカル環境にて、aws loginを行ってIAMユーザーにログイン。
※aws login実行には、IAMユーザーにAWS管理ポリシー SignInLocalDevelopmentAccessが必要(参考:※8)
そのうえで、以下のコマンドを実行。
aws ssm start-session --target "[接続先EC2インスタンスID]" --region "[接続先リージョン名]"
接続成功。
$ aws ssm start-session --target "****" --region "ap-northeast-1"
Starting session with SessionId: ****
sh-5.2$
引用元および参照元
- (※1) AWS Systems Manager > ユーザーガイド > AWS Systems Manager Session Manager
- (※2) AWS Black Belt Online Seminar > AWS Systems Manager Overview
- (※3) AWS Systems Manager > ユーザーガイド > Session Manager を設定する
- (※4) Amazon Virtual Private Cloud > AWS PrivateLink > AWS PrivateLinkとは
- (※5) AWS Command Line Interface > バージョン 2 用ユーザーガイド > AWS CLI の最新バージョンのインストールまたは更新
- (※6) AWS Systems Manager > ユーザーガイド > Linux で Session Manager プラグインをインストールする
- (※7) AWS Systems Manager > ユーザーガイド > Session Manager のサンプル IAM ポリシー
- (※8) AWSサインイン > ユーザーガイド > AWS Command Line Interfaceを使用してサインインする


