概要
AWS Systems Manager は、AWS 上のリソースやオンプレミスのサーバーを一元的に管理・運用するためのサービスです。インスタンスへのリモートアクセス、パッチ適用、設定管理、オートメーションなど、運用に必要な多くの機能を提供します。
従来、EC2 インスタンスを管理するには SSH でログインする方法が一般的でしたが、セキュリティグループでポート 22 を開放する必要があり、キーペアの管理も煩雑です。Systems Manager のセッションマネージャーを使えば、SSH ポートを開放せず、キーペアも不要でインスタンスに安全にアクセスできます。
本記事では、Systems Manager の中核機能であるセッションマネージャーによるリモートアクセスと、Run Command によるコマンドのリモート実行を体験します。

この記事のメリット
- AWS Systems Manager の全体像と主要機能を理解できる
- SSM Agent の役割とマネージドインスタンスの仕組みを把握できる
- セッションマネージャーで SSH 不要のリモートアクセスを体験できる
- Run Command でコマンドをリモート実行する手順を習得できる
- セキュアなインスタンス管理のベストプラクティスを学べる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
AWS Systems Manager の主要機能



とひさん、Systems Manager っていろんな機能があるみたいですけど、全体像がよくわからないです。どんなことができるんですか?
Systems Manager は EC2 インスタンスやオンプレミスサーバーの運用管理をまとめて面倒みてくれるサービスだよ。機能がたくさんあるから、代表的なものを表で整理するね。
| カテゴリ | 機能 | 説明 |
|---|---|---|
| ノード管理 | セッションマネージャー | ブラウザや CLI からインスタンスにシェルアクセス |
| ノード管理 | Run Command | 複数のインスタンスにコマンドをリモート実行 |
| ノード管理 | パッチマネージャー | OS パッチの適用を自動化 |
| ノード管理 | インベントリ | インスタンスのソフトウェア情報を収集 |
| 運用管理 | オートメーション | 運用タスクを自動化するランブックを実行 |
| アプリケーション管理 | パラメータストア | 設定値やシークレットを安全に保存・管理 |



けっこう幅広いですね。今回の記事ではどれを扱うんですか?
今回はノード管理の中から「セッションマネージャー」と「Run Command」の2つに絞って体験するよ。この2つがわかると、インスタンスへのリモートアクセスとコマンド実行の基本がつかめるんだ。
SSM Agent



Systems Manager を使うには何か準備がいるんですか?
うん、インスタンス側に「SSM Agent」というソフトウェアが必要なんだ。このエージェントが Systems Manager サービスと通信して、コマンドの実行やセッションの確立を行ってくれるよ。



自分でインストールしないといけないんですか?ちょっと面倒そうですね。
実はそこまで大変じゃないんだ。主要な AMI にはプリインストールされているよ。ポイントを整理するとこんな感じ。
- Amazon Linux 2、Amazon Linux 2023、Ubuntu Server(16.04以降)など主要な AMI にはプリインストール済み
- エージェントはアウトバウンド通信で Systems Manager のエンドポイントに接続する(インバウンドポートの開放は不要)
- オンプレミスサーバーにもインストール可能



アウトバウンド通信だけでいいということは、インバウンドのポートを開けなくていいんですね。
そのとおり。SSH のようにポート 22 を開放する必要がないから、セキュリティ的にもうれしいポイントだよ。
マネージドインスタンス



「マネージドインスタンス」という言葉が出てきましたけど、これは何ですか?
Systems Manager で管理されているインスタンスのことを「マネージドインスタンス」と呼ぶんだ。SSM Agent を入れただけじゃ足りなくて、3つの条件を全部満たす必要があるよ。


- SSM Agent がインストールされ、起動していること
- 適切な IAM ロールがアタッチされていること:
AmazonSSMManagedInstanceCoreポリシーを含むインスタンスプロファイルが必要 - Systems Manager エンドポイントへのネットワーク接続性があること: インターネットアクセスまたは VPC エンドポイント経由



どれか1つでも欠けると管理対象にならないんですか?
そうなんだ。よくあるのが IAM ロールの付け忘れで、Agent は動いてるのにフリートマネージャーに表示されない、というケースだね。3つともそろっているか確認するのが大事だよ。
セッションマネージャー



セッションマネージャーを使うと SSH なしでインスタンスに入れるんですよね? 具体的にどう違うんですか?
いい質問だね。マネジメントコンソールや AWS CLI からインスタンスにシェルアクセスできる機能で、従来の SSH と比べるとかなりメリットが多いんだ。比較表を見てみて。
| 項目 | SSH | セッションマネージャー |
|---|---|---|
| ポート開放 | ポート 22 の開放が必要 | 不要 |
| キーペア管理 | SSH キーペアの管理が必要 | 不要(IAM で認証) |
| 踏み台サーバー | パブリックサブネットに踏み台が必要 | 不要 |
| 監査ログ | 別途設定が必要 | CloudTrail・S3・CloudWatch Logs に自動記録可能 |



ポート開放もキーペアも踏み台も全部不要になるんですね。ログも自動で残るのは便利です。
そうだね。認証は IAM で行うから、「誰がいつどのインスタンスにアクセスしたか」が CloudTrail に記録されるんだ。セキュリティと監査の両方で強みがあるよ。
Run Command



Run Command はどういう場面で使うんですか?
マネージドインスタンスに対してコマンドをリモート実行する機能だよ。たとえば OS 情報を取得したり、ソフトウェアをインストールしたりといった操作を、コンソールから複数のインスタンスに一括で実行できるんだ。



実行するコマンドは自分で自由に書けるんですか?
もちろん自由に書けるよ。ただ、よくある操作はあらかじめ「SSM ドキュメント」としてテンプレートが用意されているんだ。代表的なものを挙げるとこんな感じ。
AWS-RunShellScript— Linux インスタンスでシェルスクリプトを実行AWS-RunPowerShellScript— Windows インスタンスで PowerShell スクリプトを実行AWS-InstallApplication— アプリケーションのインストールAWS-ConfigureAWSPackage— AWS パッケージのインストール・更新



Linux と Windows で別のドキュメントがあるんですね。今回の実践では AWS-RunShellScript を使うんですか?
そうだよ。実践では AWS-RunShellScript を使って、OS 情報やディスク使用量をまとめて取得してみるよ。SSH で1台ずつログインしなくても、コンソールからまとめて結果を確認できるのが Run Command の便利なところなんだ。
実践
前提条件
- リージョン:
ap-northeast-1(東京) - EC2 インスタンスが1台起動済みであること(Amazon Linux 2023 を推奨)
- インスタンスに
AmazonSSMManagedInstanceCoreポリシーを含む IAM ロールがアタッチされていること - インスタンスからインターネットへのアウトバウンド通信が可能であること
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| EC2 インスタンス | ssm-demo | Systems Manager で管理する対象(Amazon Linux 2023、パブリックサブネット) |
| IAM ロール | ssm-demo-role | AmazonSSMManagedInstanceCore をアタッチし、インスタンスプロファイルとして EC2 に設定 |
マネージドインスタンスを確認する
- AWSマネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Systems Managerと入力し、表示された「Systems Manager」を選択します - 左側ナビゲーションの「ノードツール」→「フリートマネージャー」を選択します
- 「マネージドノード」の一覧に対象のインスタンス(
ssm-demo)が表示されていることを確認します。ほかのインスタンスが多い場合は「フィルタ」に名前を入力して Enter を押すと絞り込めます - 「Ping ステータス」が「オンライン」であれば、Systems Manager の管理下にあります。起動直後は一覧に出るまで数分かかることがあります


セッションマネージャーでインスタンスに接続する
- 左側ナビゲーションの「ノードツール」→「セッションマネージャー」を選択します
- 「セッションの開始」をクリックすると、3 ステップのウィザードが開きます
- Step 1「Specify target」で、「ターゲットインスタンス」の一覧から
ssm-demoを選択し、「Next」をクリックします(「理由」は空欄のままで構いません)


- Step 2「Specify session document」は任意なので、そのまま「Next」をクリックします
- Step 3「Review and launch」で対象のインスタンスを確認し、「Start session」をクリックします
- 新しいタブでブラウザ上のシェルが表示されます
- シェルが表示されたら、以下のコマンドを実行して接続を確認します
whoami
hostname
ssm-userと表示され、インスタンスのホスト名(ip-172-16-1-177.ap-northeast-1.compute.internalのような形式)が確認できます。SSH の鍵もセキュリティグループの 22 番ポートの開放も使っていない点がポイントです


- 確認が終わったら右上の「終了」をクリックし、確認ダイアログでもう一度「終了」を選んでセッションを終了します
セッション履歴を確認する
- セッションマネージャーの画面に戻り、「セッション履歴」タブを選択します
- 先ほどのセッションが履歴として記録されていることを確認します
- セッション ID、所有者(操作した IAM ユーザーの ARN)、インスタンス ID、開始日時、終了日時、ステータス(Terminated)が表示されます。誰がいつどのインスタンスに入ったかが残るため、監査の観点でも役立ちます


Run Command でコマンドをリモート実行する
- 左側ナビゲーションの「ノードツール」→「Run Command」を選択します
- 「コマンドの実行」をクリックします
- 「コマンドドキュメント」の検索バーに
AWS-RunShellScriptと入力して Enter を押し、表示されたAWS-RunShellScriptのラジオボタンを選択します - 「説明」に「Run a shell script or specify the commands to run.」と表示されます。「ドキュメントのバージョン」はデフォルトのままにします


コマンドパラメータを設定する
- 「コマンドのパラメータ」セクションの「Commands」(コードエディタ)に、以下を入力します
echo "=== OS Information ==="
cat /etc/os-release
echo "=== Disk Usage ==="
df -h
echo "=== Memory Usage ==="
free -m
- 「ターゲット」セクションで「インスタンスを手動で選択する」を選択し、表示された「インスタンス」の一覧で
ssm-demoにチェックを入れます - 「その他のパラメータ」「出力オプション」などはデフォルトのままにします
- ページ下部の「実行」をクリックします


実行結果を確認する
- コマンド ID の画面に遷移し、「コマンドのステータス」の「全体的なステータス」が「成功」になるまで待ちます(数秒〜数十秒)
- 「ターゲットと出力」で対象インスタンスの行を選択し、「出力の表示」をクリックします
- 「Output」を展開すると、実行したコマンドの結果(OS 情報、ディスク使用量、メモリ使用量)が表示されます。コンソールに表示されるのは先頭 2,500 文字までで、全文が必要な場合は出力オプションで S3 や CloudWatch Logs への書き込みを有効にします


まとめ
- AWS Systems Manager はインスタンスの運用管理を一元化するサービス
- SSM Agent がインスタンスと Systems Manager サービスの間の通信を担う
- マネージドインスタンスとして認識されるには SSM Agent、IAM ロール、ネットワーク接続性の3要素が必要
- セッションマネージャーにより SSH ポート開放やキーペア管理なしでリモートアクセスが可能
- Run Command で複数のインスタンスにコマンドを一括実行でき、結果も集約して確認できる
- セッション履歴や操作ログが自動的に記録され、監査にも対応できる
参照先
- AWS Systems Manager とは
- AWS Systems Manager セッションマネージャー
- AWS Systems Manager Run Command
- Systems Manager の前提条件の設定
- SSM Agent の使用













