【AWS】学習記録#01_Systems Managerを用いてEC2インスタンスをリモート操作

2022年11月11日

こんにちは、キクです。

「AWS初心者だけど、何かしらの形でアウトプットしていきたい!!」

本記事は、そんな思いから「AWS学習記録」として気ままにアウトプットしていくシリーズです。
今回は『Systems Managerでのリモート操作』をテーマに書いていきたいと思います!

それでは、よろしくお願いします。

本記事に登場する主なAWSサービス(アルファベット順)

・EC2
・IAM
・Systems Manager

注意事項

本記事はAWS初心者である筆者が学習の一環でアウトプットすることを目的の1つとしています。
そのため、読者の方にとっては有益な情報でない可能性もあります。
あらかじめご了承いただけますと幸いです。

はじめに

まずはじめに、今回の作業内容について簡単にご紹介します。
今回は以下のAWS公式チュートリアルを試してみました。
講座名:EC2 インスタンスでコマンドをリモートで実行する

講座内では次のような内容を扱っています。

作成したEC2インスタンスに対してSystems Managerの「Run Command」という機能を用いてリモート操作するというものでした。

作業内容

本章では、実際にAWSでの操作内容を書いていこうと思います。

1. IAMロールの作成

まずはIAMロールの作成をしていきます。

■1-1. IAMロール管理画面から「ロールの作成」ボタンをクリック

■1-2.「信頼されたエンティティを選択」画面にて、以下の項目にチェックを入れて「次へ」をクリック

設定パラメータ

信頼されたエンティティタイプ :AWSのサービス
ユースケース:EC2

■1-3.「許可を追加」画面にて、以下のポリシーを選択して「次へ」をクリック

設定パラメータ

ポリシー名 :AmazonEC2RoleforSSM

■1-4.「名前、確認、および作成」画面にて、以下のパラメータを入力して「ロールを作成」をクリック

設定パラメータ

ロール名 :EnablesEC2ToAccessSystemsManagerRole

■1-5. 無事にIAMロールが作成されたことを確認

2. EC2インスタンスの作成

次にSystems Managerでの操作対象となるEC2インスタンスを作成していきます。

■2-1. EC2管理画面より「インスタンスを起動」ボタンをクリック

■2-2.「インスタンスを起動」画面にて、以下のパラメータを設定して「インスタンスを起動」をクリック

設定パラメータ

名前 :Test-EC2
アプリケーションおよびOSイメージ(AMI) :Amazon Linux 2 AMI
インスタンスタイプ :t2.micro
キーペア :キーペアなしで続行
IAMインスタンスプロフィール :EnablesEC2ToAccessSystemsManagerRole

※その他の部分はデフォルト

■2-3. 無事にEC2インスタンスが作成されたことを確認

3. Systems Managerエージェントの更新(Run Command)

ここからはSystems Managerを利用した操作をしていきます。
まずは「Run Command」機能でEC2インスタンス内にあるSystem Managerエージェントの更新を行ないます。

■3-1. Systems Manager管理画面の左ペインにある「セッションマネージャー -> Run Command」をクリック

■3-2.「Run Command」ボタンをクリック

■3-3.「コマンドの実行」画面にて、以下のパラメータを設定して「実行」をクリック

設定パラメータ

コマンドドキュメント :AWS-UpdateSSMAgent
ターゲット :インスタンスを手動で選択する
インスタンス(名前) :Test-EC2

※その他の部分はデフォルト

■3-4. 正常にコマンドが完了したことを確認

4. リモートシェルスクリプトの実行(Run Command)

「Run Command」を用いてもう1つ作業を実施します。
次に行うのはEC2インスタンス内でスクリプトの実行をしていきます。

■4-1. Systems Manager管理画面の左ペインにある「セッションマネージャー -> Run Command」をクリック

■4-2.「Run Command」ボタンをクリック

■4-3.「コマンドの実行」画面にて、以下のパラメータを設定して「実行」をクリック

設定パラメータ

コマンドドキュメント :AWS-RunShellScript
コマンドのパラメータ :以下を入力
  echo "Test script start!!!!!!!!!!!!!!!!!!!!!!!"
  sudo yum update -y

ターゲット :インスタンスを手動で選択する
インスタンス(名前) :Test-EC2

■4-4. 正常にコマンドが完了したことを確認

対象のインスタンスID(青文字)をクリックして画面遷移し、「Ontput」の内容確認すると指定したスクリプト(Test script start!!!!!!!!〜)が実行されているのが分かります。

5. リソースの終了

作成したAWSリソースを削除して、本チュートリアルは終了となりました。

調べたこと

ここからは僕が作業中に疑問に思ったことや調べた内容について、備忘録的に書いていこうと思います。
超初歩的な内容もあるかもしれませんがご了承ください・・・。

1. IAMロールの作成について

IAMロールの作成は「誰向けか?」によって若干手順が異なり、次のようなパターンがある。

  1. IAMユーザにアクセス許可を委任するロールの作成
  2. AWSサービスにアクセス許可を委任するロールの作成
  3. サードパーティーIDプロバイダー(フェデレーション)用のロールの作成
  4. カスタム信頼ポリシーを使用したロールの作成(コンソール)

参考:IAM ロールの作成

今回のチュートリアルではパターン2に該当していると認識しています。
Systems Managerの機能でEC2インスタンスをリモート操作することから「Systems Manager側にEC2インスタンスへアクセスするロールが必要?」と考えてしまいましたが、実際にはその逆でした。
次の内容がEC2インスタンス側にIAMロールを割り当てる適切な回答なように感じました。

EC2インスタンスがコマンド実行のためにSSMドキュメントなどの情報を取得する際に利用するIAMロール

参考:「AWS Systems Manager」の「SSMドキュメント」と「リソースグループ」を利用して「Amazon EC2」インスタンスにコマンドを一括して実行するには

2. EC2がマネージドインスタンス?

本記事の第2章での作業「3. Systems Managerエージェントの更新」や「4. リモートシェルスクリプトの実行」でRun Commandのターゲットを選択する部分では、対象となるEC2インスタンスを選択していました。
仮にターゲットとなるEC2インスタンスが存在しない場合には、次のように表示されました。

"登録されたマネージドインスタンスはありません"

まだAWS初心者の筆者ですが、AWSには「マネージドサービス」と「アンマネージドサービス」があり、EC2は「アンマネージドサービス」に属していると認識しています。
そのため、EC2インスタンスを選択する画面で「マネージドインスタンスがありません」と表示されていることを疑問に思いました。

しかし、調べてみるとここでの「マネージド」とはSystems Managerで管理する対象のことを指しており、「マネージドサービス」のそれとは話が違うようでした。
ただ、「このEC2インスタンスはマネージドインスタンスにする」と明示的に設定した覚えもないような・・・と感じました。
ここについても調べてみたのですが、どうやら以下の条件を満たすことで「マネージドインスタンス」として認識されることが分かりました。

マネージドインスタンスになるためには・・・

  1. SSMエージェントがインストールされ実行中である
  2. SSMエージェントを使用してSystems Managerエンドポイントに接続されている
  3. 適切なIAMロールがアタッチされている
  4. インスタンスメタデータサービスに接続している

条件3は「1. IAMロールの作成」で作成したものを「2. EC2インスタンスの作成」でアタッチしているので条件満たしていることが分かります。
また、条件1のSSMエージェントについては本作業で選択したAMI「Amazon Linux 2 AMI」でインスタンスを起動した場合にはデフォルトでインストールされているみたいなので条件を満たしていることが分かります。
条件2と条件4については正直なところまだ理解が追いついていないです・・・。

これらの条件を満たすことでEC2インスタンスは晴れて「マネージドインスタンス」として認識され、Systems Managerからの操作も可能になるという仕組みだったんですね。

参考:Systems Manager コンソールの [マネージドインスタンス] に EC2 インスタンスが表示されないのはなぜですか?

3. Run Commandについて

そもそもですが「Run Commandって何?」というところから疑問を持っていました。
調べてみたら次のように説明されていました。

AWS Systems Manager の一機能である Run Command では、マネージドノードの設定を安全にリモートで管理することができます。

Run Command を使用すると、一般的な管理 タスクを自動化して、1 回限りの大規模な設定変更を実行できます。

参考:AWS Systems Manager Run Command

たしかに今回実際にRun Commandを実行してみて、コマンド単位で「実行→結果→終了」という段階を踏んでいたので、「1回限りの」という部分についても感覚的に掴めたような気がします。

おわりに

いかがだったでしょうか。

今回はSystems Managerを用いてEC2インスタンスをリモート操作するという内容でした。
根本的な部分から疑問に感じる部分も多かったので、チュートリアルの規模感以上にたくさん調べたような気もしますが、非常に勉強になりました。

ただチュートリアルをやるだけよりもたくさんのことを学べそうなので、本シリーズは継続して頑張っていきたいなと思います。
筆者と同じようにまだAWS初心者で、同じような疑問を持った方にとって少しでも参考になる情報が紹介できていれば嬉しいです。

本記事を最後まで読んでいただき、ありがとうございました。
ではでは!

-AWS
-,