12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Run Commandを許可したらSession ManagerでもEC2に接続できた話 ~SSM Agent の通信を理解する~

12
Last updated at Posted at 2025-12-22

はじめに

Amazon EventBridge から Systems Manager(SSM)の Run Command を自動実行する仕組みを実装しました。
EC2 上の SSM Agent は、インターネットを経由せず VPC エンドポイント経由で SSM に通信する構成です。

ある日、ふと Session Manager を試したところ、AWSコンソール上から EC2 にログインできてしまったことに気づきました。

正直、想定外だったため少しヒヤッとしました。

最初は設定ミスを疑いましたが、調べてみると、EC2(SSM Agent) と SSM がどう通信しているかを理解していなかっただけで、仕様上予想される結果であることが分かりました。

この記事では、同じところでモヤっとしそうな人向けに、以下を整理します。

  • Run Command を設定すると Session Manager も成立する理由
  • SSM が EC2 とどう通信しているか(なぜ EC2 のインバウンド通信不要なのか)
  • IAM 権限での安全な制御方法

この記事を読んでほしい人

  • Run Command を自動実行している、または検討している人
  • VPC エンドポイントやセキュリティグループで「SSMを安全に利用しているつもり」の人
  • Run Command / Session Manager が「EC2へのインバウンド接続不要」と聞いたことはあるが仕組みを理解していない人

実際の構成と起こった事象

構成概要

  • EventBridge スケジューラー → Run Command 実行
  • EC2 に SSM Agent インストール済み
  • EC2 のインバウンド通信は 拒否
  • アウトバウンドは VPC エンドポイント向けHTTPSのみ許可

VPCエンドポイントサービス(使用するもの)

  • com.amazonaws.ap-northeast-1.ssmmessages
  • com.amazonaws.ap-northeast-1.ssm
  • com.amazonaws.ap-northeast-1.ec2messages(Agent 3.3.40.0 以降は必須ではない)

セキュリティグループ設定(簡略化)

VPCエンドポイントのSG

  • インバウンド:EC2 SG からのHTTPS通信を許可
  • アウトバウンド:なし

EC2のSG

  • アウトバウンド:SSMエンドポイント SG へのHTTPS通信を許可
  • インバウンド:なし

image.png

起こった事象

この状態で Run Command は問題なく動作しましたが、意図せず Session Manager でのログインも可能になっていました。

image.png

Session Manager は非常に便利ですが、 OSアカウント単位の厳密なアクセス制御や、操作ログの統制が必要な環境では、 設計方針として利用を制限・禁止する判断が適切です。

なぜ Session Manager でもログインできてしまったのか

理由はシンプルです。

Run Command / Session Manager は同じ通信経路・SSM Agentを使っているためです。

すなわち、 Run Command が動作する条件を満たしたことで、
同時に Session Manager が成立する前提条件も満たしていたということです。

SSMはどうやってEC2と通信しているのか

ここがこの記事の一番のポイントです。

SSM から EC2 に接続しているように見えますが、実際には EC2 上の SSM Agent が SSM に通信しています。

  • EC2(SSM Agent) → SSM API にアウトバウンド通信
  • 自分宛ての Run Command / Session を確認(ポーリング) ※ポーリング間隔は2025/12現在非公開
  • 指定されたコマンドやセッションがあれば実行

image.png

通信経路はVPCエンドポイントでもインターネット経由でも変わりません。

重要なのは EC2 から SSM へのアウトバウンド通信が許可されているか です。

制御ポイントはネットワークではなく IAM

EC2 のインバウンド通信を閉じても、SSMの利用可否は制御できません。
SSM の制御ポイントは IAM 権限 です。

今回の事象では以下が揃っていました。

ロール 機能 許可するアクション 可能になること
EC2 用ロール① - ssm:UpdateInstanceInformation, ec2messages:GetMessages, ec2messages:SendReply EC2 が SSM と通信・ポーリングしてコマンドを受信
EventBridge 実行用ロール② Run Command ssm:SendCommand EC2 にコマンドを実行させる
マネジメントコンソール操作用ロール③ Session Manager ssm:StartSession ユーザーが Session Manager で接続可能

この状態では、Session Manager が使えるのは仕様通りとなります。

image.png

上記の通り、EC2 にアタッチされたロールで SSM との接続が成立しており、さらにマネジメントコンソール用ロールに Session Manager 権限が付与されていたため、意図せず Session Manager も使える状態になっていたことが分かります。

安全に制御するポイント

今回の経験から、SSM で Run Command を利用する際に意識すべきポイントは以下の通りです。

1.ロールの分離

各ロールに対し、役割ごとに必要最小限の IAM 権限を付与することで、意図しない操作を防止しましょう。

2. 明示的な Deny の設定

IAMロールに明示的なDenyを付与し、意図せぬ動作を防ぎましょう。
例えば今回の場合、マネジメントコンソール操作用ロールにて、「ssm:StartSession」権限を明示的に拒否すれば、Session Manager の利用を防ぐことができます。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"ssm:StartSession"
			],
			"Resource": "*"
		}
	]
}
補足: SSM の機能は強力であることを認識する

・Run Command → Linux の場合は root 権限でコマンドを実行可能

・Session Manager → EC2 に端末操作可能、必要に応じ sudo 取得可

まとめ

  • Run Command / Session Manager は同じ通信経路・SSM Agent を使って動作している
  • SSM は「接続している」のではなく SSM Agent が SSM にポーリングしている ため、EC2 のインバウンド通信は不要
  • 制御ポイントはネットワークではなく IAM 設計 である

SSM を使った自動化は非常に便利ですが、 意図しない操作経路が成立していないか、一度確認してみると安心です。

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?