AWS Systems Manager(SSM)のセッションマネージャーを使えば、
aws ssm start-session コマンド1本でVPC内のEC2インスタンスへ安全に接続できます。ポート22のインバウンド開放もSSH鍵の配布も不要です。この記事では、基本的な接続操作から、ポートフォワーディングによるRDS・Redis接続、SSH over SSMの設定、インターネット非公開環境でのVPCエンドポイント設計まで、CLIを中心とした実践手順を解説します。
この記事のポイント
・aws ssm start-sessionコマンドで踏み台なしにプライベートEC2へ接続できる
・ポートフォワーディングでプライベートサブネット内のRDS・Redisへも到達できる
・~/.ssh/configのProxyCommand設定でSSHワークフローをそのまま流用できる
・VPCエンドポイント3本でインターネット非公開のままSSMが動作する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜ踏み台サーバーが不要になるのか:SSMの仕組みを理解する
従来の踏み台(bastion)構成は、パブリックサブネットに専用のEC2を1台立て、そこをホップしてプライベートEC2に接続する設計です。管理コスト・鍵管理・ポート開放の問題を抱えています。SSMセッションマネージャーは、EC2インスタンス上のSSM AgentがアウトバウンドHTTPS(443番)でSSMエンドポイントと通信することで、接続チャネルを確立します。インバウンドのSSH(22番)ポートを一切開ける必要がありません。
接続の流れは次のとおりです。
・①:ローカルPCで
aws ssm start-session を実行・②:AWS CLIがSSMエンドポイントへHTTPSで接続
・③:SSMがEC2上のSSM Agentと暗号化チャネルを確立
・④:ローカルPCのターミナルがEC2のbashセッションへ接続
このアーキテクチャにより、セキュリティグループのインバウンドルールから22番ポートの許可を完全に削除できます。
前提設定:IAMロールとSSM Agentの確認
1. EC2インスタンスプロファイルにポリシーを付与する
EC2インスタンスに付与しているIAMロールにAmazonSSMManagedInstanceCore ポリシーが含まれていることを確認します。# インスタンスに付与されているIAMロールを確認する aws ec2 describe-instances --instance-ids i-0123456789abcdef0 --query "Reservations[0].Instances[0].IamInstanceProfile.Arn" --output text arn:aws:iam::123456789012:instance-profile/ssm-managed-role # ロールに付与されているポリシーを確認する aws iam list-attached-role-policies --role-name ssm-managed-role --query "AttachedPolicies[*].PolicyName" --output table -------------------------------------------- | ListAttachedRolePolicies | +------------------------------------------+ | AmazonSSMManagedInstanceCore | +------------------------------------------+
AmazonSSMManagedInstanceCore が含まれていれば、SSMからの接続を受け付ける準備が整っています。
2. SSM管理対象インスタンスとして登録されていることを確認する
接続前に対象インスタンスがSSMで「Online」になっているか確認します。# SSM管理対象インスタンスの状態を一覧表示する aws ssm describe-instance-information --query "InstanceInformationList[*].[InstanceId,PingStatus,PlatformName,AgentVersion]" --output table ------------------------------------------------------------------------------------- | DescribeInstanceInformation | +---------------------+---------+---------------------------+---------------------+ | i-0123456789abcdef0 | Online | Amazon Linux 2023 | 3.3.987.0 | | i-0abcdef123456789 | Online | Red Hat Enterprise Linux 9 | 3.3.987.0 | +---------------------+---------+---------------------------+---------------------+
PingStatus が Online であれば接続可能です。Offline の場合はEC2上でSSM Agentの状態を確認してください。# EC2上でSSM Agentのステータスを確認する(コンソールアクセスが可能な場合) sudo systemctl status amazon-ssm-agent * amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled) Active: active (running) since Thu 2026-10-09 10:15:43 UTC; 1h 23min ago
aws ssm start-sessionでEC2へ接続する
ローカルPCにSession Manager Plugin(ターミナルとSSMのブリッジとなるバイナリ)がインストールされていれば、次のコマンドでセッションを開始できます。# Session Manager Pluginのバージョン確認 session-manager-plugin --version 1.2.553.0 # EC2インスタンスへ接続する(インスタンスIDを指定) aws ssm start-session --target i-0123456789abcdef0
Starting session with SessionId: tomohiro.miyazaki-0ab1c2d3e4f5a6b7c sh-5.2$ whoami ssm-user sh-5.2$ hostname ip-10-0-1-55 sh-5.2$ sudo -i [root@ip-10-0-1-55 ~]# id uid=0(root) gid=0(root) groups=0(root) [root@ip-10-0-1-55 ~]# exit sh-5.2$ exit exit Exiting session with sessionId: tomohiro.miyazaki-0ab1c2d3e4f5a6b7c.
ssm-user です。sudo -i でrootに昇格できるので、管理操作に支障はありません。接続先のリージョンを明示したい場合は
--region オプションを使います。# リージョンを明示して東京リージョンのインスタンスへ接続する aws ssm start-session --target i-0123456789abcdef0 --region ap-northeast-1
ポートフォワーディング:プライベートサブネット内のRDS・Redisへ接続する
SSMのポートフォワーディングを使うと、プライベートサブネット内のRDSやElastiCache(Redis)に、ローカルPCのMySQLクライアントやredis-cliから直接接続できます。設計のポイントは「EC2をトンネルの出口として使う」ことです。EC2インスタンスから見てアクセス可能なエンドポイントであれば、SSMトンネル経由でローカルPCからも到達できます。
1. EC2を経由してRDSへポートフォワーディングする
# ローカルの13306番ポート → EC2経由でRDSの3306番ポートへ転送する aws ssm start-session --target i-0123456789abcdef0 --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{ "host":["mydb.cluster-abcdef123456.ap-northeast-1.rds.amazonaws.com"], "portNumber":["3306"], "localPortNumber":["13306"] }'
Starting session with SessionId: tomohiro.miyazaki-0ab1c2d3e4f5a6b7c Port 13306 opened for sessionId tomohiro.miyazaki-0ab1c2d3e4f5a6b7c. Waiting for connections... Connection accepted for session tomohiro.miyazaki-0ab1c2d3e4f5a6b7c
# 別のターミナルでMySQLクライアントから接続する mysql -h 127.0.0.1 -P 13306 -u admin -p Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4421 Server version: 8.0.35 Source distribution
2. EC2インスタンス自身のポートへフォワーディングする
EC2上で動いているWebアプリやAPIサーバーへローカルから確認したい場合は、AWS-StartPortForwardingSession ドキュメントを使います。# EC2の8080番ポートをローカルの18080番に転送する aws ssm start-session --target i-0123456789abcdef0 --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["8080"],"localPortNumber":["18080"]}'
SSH over SSM:~/.ssh/configの設定で既存のSSHワークフローを使う
sftpコマンドでのファイル転送や、Visual Studio CodeのRemote SSH拡張機能など、既存のSSHベースのワークフローを使いたい場面では、SSMをSSHのプロキシとして利用する設定が有効です。1. ~/.ssh/configにProxyCommandを追加する
# ~/.ssh/config に以下を追記する Host i-* mi-* User ec2-user IdentityFile ~/.ssh/my-ec2-key.pem ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
2. SSHコマンドで接続を確認する
設定後は、インスタンスIDをホスト名として通常のSSHコマンドで接続できます。# インスタンスIDをホスト名に指定してSSH接続する ssh i-0123456789abcdef0 Last login: Thu Oct 9 10:30:22 2026 from 127.0.0.1 __| __|_ ) _| ( / Amazon Linux 2023 ___|\__|___| https://aws.amazon.com/linux/amazon-linux-2023 [ec2-user@ip-10-0-1-55 ~]$
authorized_keys に公開鍵が登録されている必要があります。SSMはトンネルを提供しますが、SSH認証はSSHプロトコル自身が行うためです。AWSのVPC設計とSSMを組み合わせたサーバー構築の実践については、LinuxMaster.JPのAWS・Amazon Linux実践ガイドでも体系的に解説しています。
VPCエンドポイントの設定:インターネット非公開環境での接続設計
EC2インスタンスがNATゲートウェイのないプライベートサブネットに配置されている場合、SSM Agentがパブリックエンドポイントへアウトバウンド通信できません。この場合、VPCエンドポイント(AWS PrivateLink)を3本作成します。・com.amazonaws.ap-northeast-1.ssm:SSMサービスとの通信
・com.amazonaws.ap-northeast-1.ssmmessages:セッションチャネルの確立
・com.amazonaws.ap-northeast-1.ec2messages:Run Commandとの通信
CLIで3本を一括作成するスクリプト例:
REGION="ap-northeast-1" VPC_ID="vpc-0abc1234def56789" SUBNET_ID="subnet-0abc1234def56789" SG_ID="sg-0abc1234def56789" for SERVICE in ssm ssmmessages ec2messages; do aws ec2 create-vpc-endpoint --vpc-id --service-name com.amazonaws.. --vpc-endpoint-type Interface --subnet-ids --security-group-ids --private-dns-enabled --region echo " endpoint created" done ssm endpoint created ssmmessages endpoint created ec2messages endpoint created
# エンドポイント用SGにVPC CIDRからのTCP 443番を許可する aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 443 --cidr 10.0.0.0/16
トラブルシュート:接続できない場合の確認手順
「TargetNotConnected」エラーが出た場合
# エラーメッセージの例 An error occurred (TargetNotConnected) when calling the StartSession operation: i-0123456789abcdef0 is not connected.
・ステップ1:
aws ssm describe-instance-information でインスタンスが Online かを確認する・ステップ2:EC2のIAMロールに
AmazonSSMManagedInstanceCore が付与されているかを確認する・ステップ3:EC2上で
sudo systemctl status amazon-ssm-agent を実行してSSM Agentが起動しているかを確認する・ステップ4:EC2のセキュリティグループでアウトバウンドTCP 443番が許可されているかを確認する(NATゲートウェイまたはVPCエンドポイントへの経路も確認)
「Session Manager plugin not found」エラーが出た場合
ローカルPCにSession Manager Pluginがインストールされていません。# Amazon Linux 2023 / RHEL9系でのSession Manager Pluginインストール curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o /tmp/session-manager-plugin.rpm sudo dnf install -y /tmp/session-manager-plugin.rpm # バージョン確認 session-manager-plugin --version 1.2.553.0
ポートフォワーディングのセッションが突然切れる場合
SSMセッションのアイドルタイムアウト(デフォルト20分)が原因の場合があります。長時間のフォワーディングが必要なときは、AWSマネジメントコンソールの「Systems Manager」→「セッションマネージャー」→「設定」でアイドルセッションのタイムアウト時間を延長してください。本記事のまとめ
| やりたいこと | コマンド・設定 |
|---|---|
| EC2へ対話シェルで接続する | aws ssm start-session --target i-xxxxxxxxx |
| プライベートRDS・Redisへ接続する | aws ssm start-session --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["エンドポイント"],"portNumber":["3306"],"localPortNumber":["13306"]}' |
| EC2自身のポートをフォワードする | aws ssm start-session --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["8080"],"localPortNumber":["18080"]}' |
| SSHコマンドをそのまま使う | ~/.ssh/config に ProxyCommand を設定し ssh i-xxxxxxxx で接続 |
| インターネット非公開環境で使う | ssm / ssmmessages / ec2messages のVPCエンドポイント(PrivateLink)を3本作成する |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AWS SSM Send Commandで複数EC2に一括スクリプト実行する構成設計|マルチAZ運用自動化の実践
- この記事の属するカテゴリ:AWS(Amazon Linux)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます