AWS SSM AgentのVPCエンドポイント経由インストール設計|インターネット非公開環境

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > AWS SSM AgentのVPCエンドポイント経由インストール設計|インターネット非公開環境
「プライベートサブネットにEC2を置いたら、SSM AgentがずっとOfflineのままで管理できない...」
セキュリティ要件でEC2にパブリックIPを付けられない構成や、インターネットゲートウェイを持たないVPC設計では、aws ssm agentがパブリックのAWSエンドポイントに到達できずOfflineになります。NATゲートウェイで解決できますが、転送データ量に比例するコストと、NAT経由の全トラフィック許可がセキュリティ上受け入れられないケースは現場でよく見かけます。

この記事では、インターネット非公開のVPC環境でaws ssm agentをVPCエンドポイント(Interface型)経由で動作させるための設計・実装手順を解説します。
VPCエンドポイントの種類と作成手順、IAMインスタンスプロファイルの設定、SSM Agentのインストール・起動確認、Session Managerでの接続テストまで、Amazon Linux 2 / Amazon Linux 2023の実機手順を元に紹介します。

この記事のポイント

・aws ssm agentにはssm・ssmmessages・ec2messagesの3エンドポイントが必要
・エンドポイント作成時は「プライベートDNS名を有効化」が必須設定
・IAMインスタンスプロファイルにAmazonSSMManagedInstanceCoreポリシーを付ける
・DNS解決がプライベートIPになっているかがOffline原因の切り分け起点


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜVPCエンドポイントが必要なのか?

aws ssm agentは、EC2インスタンス上で常駐するデーモンです。起動時からSSMサービスのパブリックエンドポイントにHTTPS(ポート443)で接続してポーリングし、Run CommandやSession Managerのリクエストを受け取る仕組みになっています。

インターネットゲートウェイやNATゲートウェイが存在しないVPCでは、このHTTPS通信がルーティング不能になり、System Managerのコンソールに「Offline」と表示されたまま変わらなくなります。「EC2は起動している、SSM AgentもRunning状態なのに接続できない」という状況のほとんどは、このネットワーク経路の欠如が原因です。

VPCエンドポイント(Interface型)を使うと、AWSのプライベートネットワーク内に仮想的なエンドポイントが作られ、EC2インスタンスはインターネットを一切経由せずにSSMサービスと通信できるようになります。この仕組みをAWS PrivateLinkと呼びます。

必要なVPCエンドポイント3つを把握する

aws ssm agentが正常に動作するには、以下の3つのInterface型VPCエンドポイントが必要です。

・com.amazonaws.ap-northeast-1.ssm:Systems Manager本体のAPI(インスタンス登録・ステータス報告)
・com.amazonaws.ap-northeast-1.ssmmessages:Session Manager・Run Commandのメッセージングチャネル
・com.amazonaws.ap-northeast-1.ec2messages:Run Command・SSMエージェントのメッセージ配信

3つのうちどれか1つでも欠けると、aws ssm agentのOnline登録が完了しません。実装現場での経験から言うと、「ssm」だけ作ってssmmessagesを作り忘れるケースが最も多いです。S3へのアクセスが必要な場合(パッチ適用のパッケージ取得等)は、Gateway型のS3エンドポイントも追加します。

VPCエンドポイントの作成手順

1. セキュリティグループを準備する

VPCエンドポイントには専用のセキュリティグループを適用します。プライベートサブネットのEC2インスタンスからHTTPS(443番ポート)を受け付けるインバウンドルールが最小要件です。

・インバウンド:ポート443、ソースにEC2のセキュリティグループIDを指定
・アウトバウンド:デフォルト(全許可のまま)

EC2のセキュリティグループIDを直接ソースに指定することで、同じVPC内の他リソースからの不要なアクセスを遮断できます。CIDRブロックで指定する場合はEC2が存在するサブネットのCIDRを使います。

2. Interface型エンドポイントを3つ作成する

AWSマネジメントコンソールの場合:VPC → エンドポイント → エンドポイントを作成 から進みます。
AWS CLIで一括作成する場合は以下の手順です。VPC ID・サブネットID・セキュリティグループIDは環境に合わせて変更してください。

# 変数を設定する(環境に合わせて変更する) VPC_ID=vpc-0a1b2c3d4e5f67890 SUBNET_ID=subnet-0a1b2c3d4e5f67890 SG_ID=sg-0a1b2c3d4e5f67890 REGION=ap-northeast-1 # ssmエンドポイントを作成する aws ec2 create-vpc-endpoint \ --vpc-id $VPC_ID \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.${REGION}.ssm \ --subnet-ids $SUBNET_ID \ --security-group-ids $SG_ID \ --private-dns-enabled # ssmmessagesエンドポイントを作成する aws ec2 create-vpc-endpoint \ --vpc-id $VPC_ID \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.${REGION}.ssmmessages \ --subnet-ids $SUBNET_ID \ --security-group-ids $SG_ID \ --private-dns-enabled # ec2messagesエンドポイントを作成する aws ec2 create-vpc-endpoint \ --vpc-id $VPC_ID \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.${REGION}.ec2messages \ --subnet-ids $SUBNET_ID \ --security-group-ids $SG_ID \ --private-dns-enabled

3つのエンドポイントが作成されると、コンソールのエンドポイント一覧に状態「available」として表示されます。「pending」から「available」への切り替わりに数分かかることがあります。

3. プライベートDNS名の有効化を確認する

`--private-dns-enabled` オプション(コンソールでは「このエンドポイントのプライベートDNS名を有効化する」チェックボックス)が無効のままだと、VPC内のEC2から `ssm.ap-northeast-1.amazonaws.com` を解決したときにパブリックIPが返ってしまいます。このオプションは必ず有効にしてください。

また、VPC設定として「DNS解決を有効化」と「DNSホスト名を有効化」の両方がオンになっている必要があります。デフォルトVPCでは両方オンですが、カスタムVPCで明示的にオフにしているケースがあります。VPCの「設定の編集」からDNS項目を確認してください。

SSM Agentのインストールと起動設定

AWSが提供するAmazon Linux 2またはAmazon Linux 2023の公式AMIには、aws ssm agentがプリインストールされています。新規起動のインスタンスならインストール手順は不要なことが多いですが、カスタムAMIや古いAMIを使っている場合はインストールから実施します。

Amazon Linux環境でのAWSサーバー構築の基礎から体系的に学びたい場合は、Amazon LinuxによるAWSサーバー構築入門も参考にしてください。

1. amazon-ssm-agentをyumでインストールする

# Amazon Linux 2 の場合 sudo yum install -y amazon-ssm-agent # 実行例(プライベートサブネット・VPCエンドポイント経由でパッケージ取得) # Loaded plugins: extras_suggestions, langpacks, priorities, update-motd # amzn2-core | 3.7 kB 00:00:00 # Resolving Dependencies # --> Running transaction check # ---> Package amazon-ssm-agent.x86_64 0:3.3.131.0-1.amzn2 will be updated # ---> Package amazon-ssm-agent.x86_64 0:3.3.582.0-1.amzn2 will be an update # Transaction Summary # Upgrade 1 Package # Complete!

# Amazon Linux 2023 の場合 sudo dnf install -y amazon-ssm-agent

S3エンドポイント(Gateway型)が未設定の場合、yumのS3バケットへのアクセスが失敗してインストールできないことがあります。インストールに失敗するときはS3エンドポイントの追加も検討してください。

2. SSM Agentを起動・自動起動を設定する

# SSM Agentを起動する sudo systemctl start amazon-ssm-agent # 自動起動を設定する sudo systemctl enable amazon-ssm-agent # 起動状態を確認する sudo systemctl status amazon-ssm-agent

起動が成功した場合、以下のような出力が得られます。

* amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/usr/lib/systemd/amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2026-10-06 09:12:45 UTC; 1min 33s ago Main PID: 3142 (amazon-ssm-agen) Tasks: 11 (limit: 4915) Memory: 52.4M CPU: 1.451s CGroup: /system.slice/amazon-ssm-agent.service └─3142 /usr/bin/amazon-ssm-agent

`Active: active (running)` と表示されれば、SSM Agentプロセス自体は正常動作しています。ただし、この状態はプロセスが起動しているだけであり、SSMサービスへの接続成功を意味しません。接続成功はSystem ManagerコンソールでOnline表示になってから判定します。

3. IAMインスタンスプロファイルを確認する

aws ssm agentがSSMサービスと通信するには、EC2インスタンスにIAMロールが必要です。マネージドポリシー `AmazonSSMManagedInstanceCore` が付与されたロールをインスタンスプロファイルとしてEC2にアタッチしてください。

EC2コンソール → インスタンスの選択 → 「セキュリティ」タブ → 「IAMロール」でアタッチ済みのロールとポリシーを確認します。既存のEC2に後付けする場合はCLIでアタッチできます。

# 既存EC2インスタンスにインスタンスプロファイルをアタッチする aws ec2 associate-iam-instance-profile \ --instance-id i-0a1b2c3d4e5f67890 \ --iam-instance-profile Name=SSMInstanceProfile

Session Managerで接続を確認する

VPCエンドポイント・IAMロール・SSM Agentの3つが揃った後、System Managerコンソールで「フリートマネージャー」を開き、対象インスタンスの状態が「Online」に変わることを確認します。Onlineになるまで1~3分かかることがあります。

OnlineになったらSession Managerで接続テストをします。コンソールから「セッションマネージャー」→「セッションの開始」を選んでインスタンスを選択し、「セッションを開始する」を押します。ブラウザ上でシェルが起動すれば接続成功です。

AWS CLIからも接続できます。Session Manager Pluginが必要なので、未インストールのPCは事前にインストールしておきます。

# Session PluginをインストールしたPCから接続する aws ssm start-session --target i-0a1b2c3d4e5f67890 # 接続後のシェル(プライベートサブネット上のEC2に入れることを確認する) sh-4.2$ whoami ssm-user sh-4.2$ hostname ip-10-0-12-45.ap-northeast-1.compute.internal sh-4.2$ curl -s http://169.254.169.254/latest/meta-data/instance-id i-0a1b2c3d4e5f67890

トラブルシュート

「Offline」のままになる場合の確認手順

3点を順番に確認してください。

・1. VPCエンドポイントの状態が「available」か:コンソールのエンドポイント一覧で3つとも「available」を確認する。「pending」や「failed」の場合はSGのインバウンドルールを見直す
・2. IAMロールがアタッチされているか:フリートマネージャーのインスタンス詳細「IAMロール」列が空になっていないか確認する
・3. SSM Agentログにエラーがないか:ログファイルで接続エラーを確認する

# SSM Agentのログを確認する sudo tail -50 /var/log/amazon/ssm/amazon-ssm-agent.log # 接続成功時のログ例 # 2026-10-06 09:14:21 INFO [HealthCheck] EC2 instance is registered with SSM # 2026-10-06 09:14:21 INFO Successfully connected to endpoint: ssmmessages.ap-northeast-1.amazonaws.com # 接続失敗時(VPCエンドポイントが未設定)のログ例 # 2026-10-06 09:14:21 ERROR [CredentialRefresher] No EC2 instance role found # 2026-10-06 09:14:21 ERROR HealthCheck: Unable to connect, i/o timeout

VPCエンドポイントのDNS解決を確認する

プライベートDNSが正しく機能しているかを確認するには、nslookupでエンドポイントのFQDNをVPC内のDNSサーバーで解決し、プライベートIPアドレス(10.x.x.x等)が返るかを確認します。Linux DNS 設定の基本も参考になります。

# EC2インスタンス上でnslookupを実行する nslookup ssm.ap-northeast-1.amazonaws.com # VPCエンドポイントが正常な場合(プライベートIPが返る) # Server: 10.0.0.2 # Address: 10.0.0.2#53 # # Non-authoritative answer: # Name: ssm.ap-northeast-1.amazonaws.com # Address: 10.0.10.213 # VPCエンドポイントが未設定の場合(パブリックIPが返る) # Server: 10.0.0.2 # Address: 10.0.0.2#53 # # Non-authoritative answer: # Name: ssm.ap-northeast-1.amazonaws.com # Address: 52.119.224.28

`10.0.x.x` 系のプライベートIPアドレスが返れば、VPCエンドポイント経由での名前解決が成功しています。パブリックIP(52.x.x.x等)が返る場合は、プライベートDNSが有効化されていないか、VPCのDNS設定が不完全です。

aws ssm agentが接続するすべてのエンドポイント(ssm・ssmmessages・ec2messages)で同じ確認を行ってください。Linux ポート確認の全コマンドを使って対象ホストへのポート443到達性をncやssコマンドで確認する方法を組み合わせると、経路の切り分けがより精度高くできます。

本記事のまとめ

インターネット非公開のVPC環境でaws ssm agentを動作させるために必要な設定をまとめます。
設定項目 内容・注意点
VPCエンドポイント(ssm) Interface型。プライベートDNS有効化必須
VPCエンドポイント(ssmmessages) Interface型。Session Manager・Run Commandに必須
VPCエンドポイント(ec2messages) Interface型。Run Commandに必須
IAMインスタンスプロファイル AmazonSSMManagedInstanceCoreポリシーを付与
VPC DNS設定 「DNS解決」「DNSホスト名」両方を有効化
SSM Agent起動 systemctl enable amazon-ssm-agentで自動起動設定
3つのエンドポイントのうちどれか1つでも欠けるとOfflineのままになります。新規構築時は3つを同時に作成してから接続確認する手順でトラブルシュートを最小化できます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Amazon LinuxによるAWSサーバー構築入門でAWS環境でのLinuxサーバー設計・構築スキルを体系的に習得しましょう。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。