🏢 AWS Systems Manager Run Command

会社経営で理解する一斉指示システム

👨‍💼 本社 ↔️ 📋 一斉指示 ↔️ 🏢 各支店

AWS Run Commandを、身近な会社の支店管理システムで例えて分かりやすく説明します!

🤔 まず、Run Commandって何?

📝 簡単に言うと...

会社の本社 から 複数の支店 に、 同じ作業指示 を一斉に送って実行させる仕組みです

🏢 日常の会社経営

本社の社長 全支店
「新しいセキュリティソフトを
全PCにインストールして」


📞 電話で一つずつ連絡は大変...
📧 一斉メール で指示を送ろう!

☁️ AWSの世界

管理者 複数のEC2
「新しいソフトウェアを
全サーバーにインストールして」


💻 一台ずつSSH接続は大変...
🚀 Run Command で一斉実行!

🏢 主要な構成要素を会社で理解

👨‍💼

Run Command
= 本社の管理者

指示を出す人 です。
会社の社長や管理者のように、
複数の支店に 同じ作業指示 を一斉に送ります。

特徴: 一度の操作で複数対象に実行
場所: AWSコンソールやCLIから
🏢

EC2インスタンス
= 各支店

指示を受ける側 です。
東京支店、大阪支店、名古屋支店のように、
それぞれが 独立した作業場所 を持っています。

役割: 指示された作業を実行
状態: 24時間稼働中
📱

SSMエージェント
= 各支店の連絡担当者

連絡を受ける専門スタッフ です。
本社からの指示を受け取って、
支店内で 実際の作業を実行 します。

必要条件: 各EC2に事前インストール
機能: 自動で本社と通信
📋

Document
= 作業マニュアル

具体的な作業手順書 です。
「ソフトウェアインストール手順」や
「システム再起動手順」など、
標準化された作業内容 が記載されています。

種類: AWS提供 + カスタム作成
例: AWS-RunShellScript

🚀 実際の指示の流れを見てみよう

👨‍💼

本社の管理者

Run Command実行

「全支店で同じ作業をして!」
⬇️
一斉指示送信
⬇️
🏢

東京支店

EC2-Tokyo

📱 SSMエージェント待機中
🏢

大阪支店

EC2-Osaka

📱 SSMエージェント待機中
🏢

名古屋支店

EC2-Nagoya

📱 SSMエージェント待機中
⬇️
各支店で同時実行
⬇️

📊 実行結果の報告

✅ 東京支店: 作業完了 (成功)
✅ 大阪支店: 作業完了 (成功)
❌ 名古屋支店: エラー発生 (要確認)

📋 よく使用されるコマンド例

🛠️ 実際の業務で使われる指示例

🔄 システム再起動指示

会社の例: 「全支店のPCを明日朝に再起動して」

AWS-RunShellScript
sudo reboot

結果: 指定したサーバーが安全に再起動されます

💾 ソフトウェアインストール

会社の例: 「新しいセキュリティソフトを全支店に導入して」

AWS-RunShellScript
sudo yum update -y
sudo yum install -y htop

結果: 全サーバーに同じソフトウェアがインストールされます

📊 システム状況確認

会社の例: 「各支店の業務状況を報告して」

AWS-RunShellScript
df -h
free -m
ps aux | head -10

結果: 各サーバーのディスク使用量、メモリ使用量、稼働プロセスが分かります

🔧 設定ファイル配布

会社の例: 「新しい業務マニュアルを全支店に配布して」

AWS-RunShellScript
aws s3 cp s3://my-bucket/config.txt /etc/myapp/
sudo systemctl restart myapp

結果: 統一された設定ファイルが全サーバーに適用されます

🎯 ターゲット指定機能

📍 特定の支店だけに指示を出したい場合

全支店ではなく、条件に合った特定の支店だけに指示を出すことも可能です

🏷️

タグによる指定

会社の例:
「営業部」タグが付いた支店のみ
「関東地方」タグが付いた支店のみ

AWS例:
Environment=Production
Department=Web-Server
📋

インスタンスID指定

会社の例:
東京支店(支店番号:001)
大阪支店(支店番号:002)
のみに指示

AWS例:
i-1234567890abcdef0
i-0987654321fedcba0
🔍

リソースグループ

会社の例:
「新規開店した支店」グループ
「大型店舗」グループ
事前に分類したグループ単位で指示

AWS例:
WebServers-Group
DatabaseServers-Group

📋 実際の設定手順(超簡単版)

1

事前準備:連絡担当者の配置

SSMエージェントの確認
→ 各支店(EC2)に連絡担当者(SSMエージェント)が配置されているか確認
→ 最新のAmazon LinuxやWindows Serverには標準で含まれています
→ 古いOSの場合は手動インストールが必要

2

権限設定:指示する権限を与える

IAMロールの設定
→ EC2に「AmazonSSMManagedInstanceCore」ポリシーを付与
→ 各支店が本社からの指示を受け取れるように権限設定
→ これがないと支店は指示を受け取れません

3

Systems Managerコンソールを開く

管理画面へアクセス
→ AWSコンソールでSystems Managerを選択
→ 左メニューから「Run Command」をクリック
→ 本社の管理者用の操作画面です

4

作業指示書を選択

Document(作業マニュアル)の選択
→ AWS-RunShellScript(Linux用の基本的な作業)
→ AWS-RunPowerShellScript(Windows用)
→ または自作のカスタムドキュメント

5

対象支店を選択

ターゲットの指定
→ すべての支店、または特定の支店を選択
→ タグやインスタンスIDで細かく指定可能
→ 「営業部の支店のみ」「関東地方のみ」など

6

具体的な作業内容を入力

コマンドの入力
→ 実行したいコマンドを入力欄に記載
→ 例:「sudo yum update -y」(システム更新)
→ 複数のコマンドを順番に実行することも可能

7

実行ボタンをクリック!

一斉指示の送信
→ 「Run」ボタンをクリックで指示を一斉送信
→ 各支店で同時に作業が開始されます
→ 実行状況はリアルタイムで確認可能

8

結果確認

各支店からの作業報告を確認
→ 成功・失敗の状況を一覧で確認
→ 失敗した支店は詳細なエラーログも確認可能
→ 必要に応じて個別対応を実施

❓ よくある質問

🤔 なぜRun Commandが必要なの?

効率性とスケーラビリティ のためです!


従来の方法(SSH):

  • 10台のサーバー → 10回のSSH接続が必要
  • 各サーバーにログインして手動実行
  • 1台ずつ作業するので時間がかかる

Run Command:

  • 100台のサーバー → 1回の操作で一斉実行
  • ブラウザから簡単操作
  • 全サーバーで同時実行
💰 料金はどのくらいかかるの?

基本的には無料 です!


無料枠:

  • 月10万リクエストまで無料
  • Systems Manager自体の利用料は無料
  • EC2の実行時間のみ課金(通常通り)

有料になる場合:

  • 月10万リクエストを超えた場合
  • 1リクエスト $0.00243(約0.3円)

一般的な企業なら、ほぼ無料で使えます!

🔒 セキュリティは大丈夫?

非常に安全 です!


セキュリティ機能:

  • IAM権限: 実行可能な人を制限
  • 暗号化通信: 指示内容は暗号化して送信
  • ログ記録: すべての実行履歴を記録
  • CloudTrail連携: 誰がいつ実行したか監査可能

ベストプラクティス:

  • 最小権限の原則でIAM設定
  • 重要な作業前には事前テスト
  • 定期的な権限の見直し
🚨 実行に失敗した場合はどうする?

詳細な診断情報 が提供されます!


失敗の確認方法:

  • 実行結果画面でステータス確認
  • 失敗したインスタンスの詳細ログ表示
  • エラーメッセージから原因特定

よくある失敗原因:

  • SSMエージェントが停止している
  • IAM権限が不足している
  • コマンド自体にエラーがある
  • 対象インスタンスが停止している

対処法: 失敗したインスタンスのみを対象に再実行可能

⏰ 実行タイミングを指定できる?

はい! 時間指定実行も可能です。


方法1: EventBridge(CloudWatch Events)連携

  • 毎日午前3時にシステム更新
  • 毎週日曜日にバックアップ作業
  • cron形式でスケジュール設定

方法2: Maintenance Windows

  • メンテナンス時間帯を事前設定
  • その時間内でのみ作業実行
  • 営業時間外の安全な作業実行

例: 「毎月第2土曜日の午前2時に全サーバーでパッチ適用」

✨ Run Commandの主なメリット

作業時間短縮

100台のサーバーでも1回の操作で一斉実行。SSH接続の手間が不要

🎯

作業品質向上

手動作業のミスを防止。全サーバーで同じ作業が確実に実行される

👀

可視性向上

作業の実行状況と結果をリアルタイムで確認。履歴も残る

🔒

セキュリティ強化

SSHキーの管理不要。IAM権限で安全にアクセス制御

📊

柔軟な対象指定

タグやグループで細かく対象を指定。必要な支店のみに実行

💰

コスト効率

月10万リクエストまで無料。専用ツール導入より圧倒的に安い

🏢 実際のビジネス活用例:ECSクラスター管理

🏬 100階建てオフィスビルの安全管理システム

企業が新しいウェブサービスを立ち上げる際の、セキュリティを重視したサーバー管理の実例です

🏢 ECSクラスター = 100階建てオフィスビル

🏢

新ウェブサービス用ビル

Amazon ECS クラスター

100台のEC2インスタンス = 100階のオフィス

❌ 従来の方法(禁止)

🔑 SSH接続 = 各階に個別の合鍵配布
  • 鍵の管理が大変
  • 紛失・悪用リスク
  • セキュリティホール
🚪 複数ポート開放 = 裏口・非常口も開放
  • 攻撃経路が多い
  • 管理が複雑
  • 侵入リスク高

✅ 新方式(採用)

🚪 HTTPS(443)のみ開放 = 正面玄関のみ
  • お客様アクセス専用
  • 最小限のリスク
  • 明確な用途
📱 Run Command = 中央制御システム
  • 鍵なしでリモート管理
  • 一括操作可能
  • 完全な監査証跡

🛡️ セキュリティポリシーの実装手順

1

ECSクラスターの構築

100階建てオフィスビルの建設
→ 100台のEC2インスタンスでECSクラスターを構築
→ 各インスタンスに「SSMエージェント」を配置(連絡担当者)
→ 新しいウェブサービス専用の環境を準備

2

厳格なセキュリティグループ設定

ビルの入口を最小限に制限
インバウンド: HTTPS(443)のみ許可
ブロック: SSH(22)、HTTP(80)、その他全て
→ 会社のセキュリティポリシーに完全準拠

3

SSHキーなしでインスタンス起動

物理的な鍵を一切使わない方針
→ EC2起動時にSSHキーペアを指定しない
→ 従来の「鍵管理」リスクを完全排除
→ 紛失・悪用・不正アクセスの心配なし

4

Run Commandによる中央管理

統合管理システムの稼働開始
→ 管理者は中央制御室(AWSコンソール)から操作
→ 100台すべてに同時指示が可能
→ セキュアで効率的なリモート管理を実現

🛠️ ECSクラスターでの実際の管理作業例

🔄 コンテナ関連の一斉操作

ビル全体でのシステム更新作業

# Docker設定の更新 sudo systemctl restart docker
# ECSエージェントの再起動 sudo systemctl restart ecs

効果: 100台のサーバーで同時にコンテナ環境を更新

📊 クラスター状況の一斉確認

全階の業務状況を一斉チェック

# クラスター状況確認 docker ps
# リソース使用量確認 df -h && free -m
# ECSタスク状況確認 curl -s http://localhost:51678/v1/tasks

効果: 全サーバーの稼働状況を瞬時に把握

🔧 セキュリティパッチの一斉適用

ビル全体のセキュリティ強化作業

# システム更新 sudo yum update -y
# セキュリティパッチ適用 sudo yum update --security
# ログ確認 tail -f /var/log/ecs/ecs-agent.log

効果: 全サーバーを同じセキュリティレベルに統一

💡 このアプローチの優れた点

🛡️ なぜSSHを使わないのか?
🔒 HTTPSのみでなぜ十分なのか?
⚡ 100台を一斉管理する実際のメリットは?
🛡️

セキュリティ最大化

攻撃経路を最小限に制限。SSH鍵管理リスクを完全排除

運用効率最大化

100台のサーバーを1回の操作で管理。作業時間99%削減

📊

品質統一

全サーバーで同一の設定・操作。環境差異によるトラブル防止

💰

コスト最適化

管理工数大幅削減。障害対応時間短縮。予防保守効率化

🎯 ECSクラスター管理のベストプラクティス

✅ セキュリティ面:

  • 最小権限の原則:必要なポートのみ開放
  • SSH鍵なし運用:物理的鍵管理リスクを排除
  • Run Command活用:セキュアな管理チャネル確保

⚡ 運用面:

  • 一括操作:スケールに関係なく同じ工数
  • 作業標準化:ドキュメント化された手順
  • 監査証跡:全操作の完全な記録

🔄 継続改善:

  • 定期的なセキュリティ見直し
  • 自動化の推進(EventBridge連携)
  • 運用メトリクスの継続監視

📞 なぜインバウンドポートを開く必要がないの?

🔄 アウトバウンド通信の魔法

Run Commandは「外から中」ではなく、「中から外」への通信だけで完璧に動作します

❌ 従来のSSH接続

📞

固定電話への着信


🏢 ← 👨‍💼
サーバーが「電話を受ける」


問題:
✗ インバウンドポート22必要
✗ 外部から直接アクセス可能
✗ 攻撃者の標的になりやすい

✅ Run Command

📱

携帯電話からの発信


🏢 → ☁️
サーバーが「電話をかける」


利点:
✓ アウトバウンドHTTPS(443)のみ
✓ 外部からアクセス不可
✓ デフォルト設定で動作

🔄 通信方向の違いを理解しよう

❌ インバウンド通信(SSH)

👨‍💼 管理者
IPアドレス: どこか不明
⬇️
🌐 インターネット経由
ポート22 (SSH)
⬇️
🏢 EC2サーバー
ポート22を開放必須
リスク: 外部から侵入可能な「入口」を作る

✅ アウトバウンド通信(Run Command)

🏢 EC2サーバー
SSMエージェント起動中
⬆️
📱 「仕事ありますか?」
HTTPS(443)でポーリング
⬆️
☁️ AWS Systems Manager
指示待ち・結果受け取り
安全: 外部からアクセス不可能な「出口」のみ

📱 Run Commandの詳細な動作シーケンス

1

SSMエージェントの起動

連絡担当者が待機開始
→ EC2起動時にSSMエージェントが自動起動
→ 「仕事がないか」定期的にAWSに確認する準備完了
インバウンドポートは一切不要

2

定期的なポーリング通信

「何かお仕事ありますか?」の定期確認
→ アウトバウンドHTTPS(443)でAWS Systems Managerに問い合わせ
→ 通常は「特に仕事なし」の応答
デフォルトのセキュリティグループ設定で動作

3

管理者による指示送信

本社からの作業指示
→ 管理者がAWSコンソールでRun Command実行
→ AWS Systems Managerが指示を保管
管理者とEC2は直接通信しない

4

指示の受け取りと実行

次回のポーリングで指示を発見
→ SSMエージェントが「今度は仕事がある!」を確認
→ 指示内容をダウンロードして実行開始
全てアウトバウンド通信で完結

5

結果の報告

作業完了報告
→ 実行結果をアウトバウンドHTTPS(443)でAWSに送信
→ AWS Systems Managerが結果を保存
→ 管理者はコンソールで結果確認可能

🔧 実際のセキュリティグループ設定例

🛡️ 推奨セキュリティグループ設定

最小権限の原則を適用

✅ インバウンドルール
Type: HTTPS
Port: 443
Source: 0.0.0.0/0
Purpose: お客様のWebアクセス用
✅ アウトバウンドルール
Type: All Traffic
Port: All
Destination: 0.0.0.0/0
Purpose: AWS通信+ソフトウェア更新
❌ 不要なルール(追加しない)
Type: SSH, Port: 22 → Run Commandがあるので不要
Type: RDP, Port: 3389 → Windows でも不要
Type: Custom TCP → 管理用ポートは全て不要

🔍 ネットワーク要件の確認

Run Command が動作するための最小要件

必要な通信先(アウトバウンドのみ):
# Systems Manager エンドポイント
ssm.region.amazonaws.com:443

# メッセージングサービス
ssmmessages.region.amazonaws.com:443

# EC2メッセージング
ec2messages.region.amazonaws.com:443
💡 ネットワーク構成オプション:
  • パブリックサブネット: Internet Gateway 経由
  • プライベートサブネット: NAT Gateway 経由
  • 完全プライベート: VPC Endpoint 経由

どの構成でもインバウンドポート開放は不要!

🤔 アウトバウンド通信に関するよくある質問

📞 アウトバウンドだけで本当にリアルタイム管理できるの?
🔒 デフォルトのアウトバウンド設定で本当に安全?
🌐 インターネット接続がない環境では使えない?
⚡ SSH と比べて性能は劣らない?
🔒

ゼロインバウンド

外部からアクセス可能なポートを開く必要なし。攻撃面を最小化

🎯

デフォルト動作

複雑なファイアウォール設定不要。標準設定で即座に利用開始

📡

ポーリング方式

サーバー側から定期確認。リアルタイム性と安全性を両立

🌐

柔軟なネットワーク

インターネット、NAT、VPCエンドポイント。どの構成でも対応

🎯 アウトバウンド通信方式の核心価値

🔑 セキュリティ革命:

  • 従来の「外→内」から「内→外」への発想転換
  • 管理用ポートの完全廃止
  • 攻撃面の劇的な縮小

⚡ 運用効率:

  • 複雑なネットワーク設定が不要
  • 即座に利用開始可能
  • スケールに関係ない一定の性能

🎛️ 技術的優位性:

  • ステートフル通信の活用
  • AWS インフラとの最適な統合
  • クラウドネイティブな設計思想

💡 結論: Run Command は「セキュリティ」「効率性」「簡単さ」の三拍子が揃った、
現代のクラウド管理における理想的なソリューションです

🎯 まとめ

👨‍💼 Run Command = 本社の管理者(一斉指示を出す人)

🏢 EC2インスタンス = 各支店(指示を受けて作業する場所)

📱 SSMエージェント = 連絡担当者(指示を受け取って実行する人)

📋 Document = 作業マニュアル(具体的な手順書)


この仕組みを使うことで、 複数のサーバーを効率的に一元管理 できます!


🎯 初心者へのアドバイス:

  • 小さな作業から始めてみる(システム情報確認など)
  • 重要な作業の前は必ず1台でテスト実行
  • IAM権限の設定は慎重に(最小権限の原則)
  • 作業の実行履歴は定期的に確認

💡 実際の活用例:

  • セキュリティパッチの一斉適用
  • アプリケーションの設定変更
  • システム監視データの収集
  • 緊急時の一斉作業実行

Created by SSuzuki1063

AWS SAP Learning Resources