【AWSサービス 基礎編】AWS Systems Manager でインスタンスをリモート管理する

目次

概要

AWS Systems Manager は、AWS 上のリソースやオンプレミスのサーバーを一元的に管理・運用するためのサービスです。インスタンスへのリモートアクセス、パッチ適用、設定管理、オートメーションなど、運用に必要な多くの機能を提供します。

従来、EC2 インスタンスを管理するには SSH でログインする方法が一般的でしたが、セキュリティグループでポート 22 を開放する必要があり、キーペアの管理も煩雑です。Systems Manager のセッションマネージャーを使えば、SSH ポートを開放せず、キーペアも不要でインスタンスに安全にアクセスできます。

本記事では、Systems Manager の中核機能であるセッションマネージャーによるリモートアクセスと、Run Command によるコマンドのリモート実行を体験します。

Systems Manager がSSMエージェント経由でEC2インスタンスを管理し、セッションマネージャーやRun Commandでリモート操作する全体像の図解
Systems Manager がSSMエージェント経由でEC2インスタンスを管理し、セッションマネージャーや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つの条件を全部満たす必要があるよ。

マネージドインスタンスとして認識されるための3つの条件(SSM Agent、IAMロール、ネットワーク接続性)の図
マネージドインスタンスとして認識されるための3つの条件(SSM Agent、IAMロール、ネットワーク接続性)の図
  • 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 の便利なところなんだ。

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

前提条件

  • リージョン: ap-northeast-1(東京)
  • EC2 インスタンスが1台起動済みであること(Amazon Linux 2023 を推奨)
  • インスタンスに AmazonSSMManagedInstanceCore ポリシーを含む IAM ロールがアタッチされていること
  • インスタンスからインターネットへのアウトバウンド通信が可能であること
リソース種別リソース名用途
EC2 インスタンスssm-demoSystems Manager で管理する対象(Amazon Linux 2023、パブリックサブネット)
IAM ロールssm-demo-roleAmazonSSMManagedInstanceCore をアタッチし、インスタンスプロファイルとして 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 番ポートの開放も使っていない点がポイントです
セッションマネージャーのシェル画面(whoami と hostname の実行結果)
セッションマネージャーのシェル画面(whoami と hostname の実行結果)
  • 確認が終わったら右上の「終了」をクリックし、確認ダイアログでもう一度「終了」を選んでセッションを終了します

セッション履歴を確認する

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

Run Command でコマンドをリモート実行する

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

コマンドパラメータを設定する

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

実行結果を確認する

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

まとめ

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

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次