2023-02-28 · 5

AWS SSM(Systems Manager)— Session Manager

cloudawsssm

この記事は公開から2年以上経過しています。

AWS Systems Manager とは?

Systems Manager の動作の仕組み

  1. Systems Manager へのアクセス — Systems Manager アクセス(console、CLI、SDK)で使用可能なオプションのいずれかを使います。
  2. Systems Manager 機能の選択 — リソースに対して行いたい作業に役立つ機能を確認します。このダイアグラムは、IT 開発者や DevOps 担当者がリソースを構成・管理するのに使ういくつかの機能だけを示しています。
  3. 検証と処理 — Systems Manager は、AWS Identity and Access Management(IAM)ユーザー、グループ(OU)、またはロールに指定された作業を実行できる権限があるか検証します。作業対象が管理ノードの場合、ノード上で動く Systems Manager Agent(SSM Agent)が作業を実行します。他の種類のリソースの場合は、Systems Manager が指定された作業を実行するか、他の AWS サービスと通信して Systems Manager に代わって作業を実行します。
  4. レポート — Systems Manager、SSM Agent、および Systems Manager に代わって作業を実行するその他の AWS サービスの状態がレポートされます。Systems Manager は他の AWS サービスに状態の詳細を送れます。
  5. Systems Manager 運用管理機能 — 有効化されている場合、運用管理機能(Explorer、OpsCenter)と Incident Manager は、リソースのイベントやエラーに対応して運用データを集約したりアーティファクトを生成したりします。こうしたアーティファクトには運用作業項目(OpsItems)やインシデントがあります。運用管理機能はアプリケーションとリソースへの運用インサイトと自動化された問題解決ソリューションを提供し、問題解決を支援します。

まとめ:今あるものより良いものがあるなら乗り換える!

AWS SSM で EC2 インスタンスにアクセス(SSH 代替)— Session Manager

ユーザーを 1 つ作って Access Key を発行し、AWS CLI に接続済みの状態で進めます。

IAM で EC2 に紐づけるロールを先に作っておきましょう。

上のように設定して Next を押します。ここで EC2 Role for AWS Systems Manager を選択する必要があります。

きちんと進めていれば、特に追加設定なしで AmazonSSMManagedInstanceCore という権限が追加されているのが確認できます。この権限だけあれば OK です。Next を押し、Role name だけ入力して Create Role を押しましょう。

では EC2 に移動してプライベートなインスタンスを 1 つ作ってみます。

EC2 の設定は上のように、キーペアを別途作り、VPC を作って private-a ゾーンに配置し、security groups には 22 番と 3306、80、443 と、Web・DB・SSH 関連の基本的なポートだけ開けておきます。

その後、作った EC2 をクリックして設定に入り、Modify IAM role を押します。

先ほど作った IAM ロールがあるのが確認できます。それを選択して Update IAM Role を押します。

その後テストで SSH 接続を試しても、パブリック IP がないため当然つながりません。かといって Bastion EC2 があるわけでもないので接続は不可能です。

しかしここまできちんと進めていれば、**「aws ssm start-session --target <instances ID>」**と入力すると問題なく接続できるのが確認できます。

+)追加設定 (2023-02-17) アカウントのすべての EC2 インスタンスでデフォルトで AWS Systems Manager を有効化する機能を発表

リンク

アカウントのすべての EC2 インスタンスでデフォルトで AWS Systems Manager を有効化する機能を発表 AWS Systems Manager のお客様は、デフォルトホスト管理構成(DHMC)エージェントを使い、一度の操作で Systems Manager を有効化してアカウントのすべての EC2 インスタンスの権限を構成できるようになりました。 — aws.amazon.com

今回のアップデート(2023-02-17)で、AWS Systems Manager に Default Host Management Configuration(DHMC)という新しい設定が追加されました。

この DHMC は、SSM の Fleet Manager で権限(IAM ロール)を指定する形で設定します。そして SSM Agent がインスタンスプロファイルの代わりに DHMC に設定されたロールから認証情報を取得し、SSM の各種機能を実現する形になります。

  • 従来の動作
    • SSM を使う EC2 インスタンスに事前定義されたインスタンスプロファイルを設定
    • SSM Agent は上記インスタンスプロファイルの権限で動作し、SSM の各種機能を実現します。
  • DHMC を使った場合の動作
    • SSM を使う EC2 インスタンスのインスタンスプロファイルはもう不要です。
    • EC2 インスタンスにインスタンスプロファイルが構成されている場合、SSM Agent はインスタンスプロファイルの権限で動作し SSM の各種機能を実現します。
    • EC2 インスタンスにインスタンスプロファイルが設定されていない場合、SSM Agent は DHMC に設定されたロール(IAM role)から認証情報を取得し SSM の各種機能を実現します。

簡単に言うと「EC2 プロファイルがないときにフォールバックされるデフォルトルール」のことです。

※ 注意)SSM Agent は Ver.3.2.582.0 以上である必要があります。これ以前の SSM Agent は DHMC をサポートしません。

直接やってみる

まず DHMC で構成する IAM ロールを作ります。

AWS の AmazonSSMManagedEC2InstanceDefaultPolicy というポリシーで作ります。このポリシーは元々 AmazonSSMManagedInstanceCore とほぼ同じですが、ssm:getParameter(s) の 2 つのポリシーは許可されていません。

もし EC2 インスタンスから SSM Parameter Store の読み込みもしたい場合は、AmazonSSMManagedInstanceCore ベースでポリシーを作るのがよいです。

SSMManagedEC2InstanceDefaultRole という名前で作ります。Next を押し続けて作成し、作ったロールをクリックして開きます。

SSMManagedEC2InstanceDefaultRole -> Trust relationships -> Edit trust policy を押します。

ec2.amazonaws.com -> ssm.amazonaws.com に変えて Update policy を押します。では DHMC の設定をしに行きましょう。

上の写真のように IAM Role を変更して Configure を押せば DHMC 設定は完了です。次に EC2 を作ります。

EC2 作成時、プロファイルは設定しなくて構いません。インスタンスメタデータ設定は V1 と V2 を使うようにします。そして User-data には以下のコードを入れます。

#!/bin/bash
cd /tmp
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

公式ドキュメント

EC2 Linux インスタンスに Systems Manager Agent をインストール Amazon EC2 Linux インスタンスの起動時に AWS Systems Manager Agent(SSM Agent)をインストールするにはどうすればよいですか?最終更新日:2023 年 1 月 31 日 Amazon Elastic Compute Cloud(Amazon EC2)Linux インスタンスを起動 — aws.amazon.com

IAM Role が設定されていない状態であることが確認できます。

DHMC が有効な場合、この状態でも SSM Host Manager が管理ノードとして認識します。

その後 Session Manager に入って Connect を押すと接続できることが確認できます。上でやったように CLI でも構いません。

yum info amazon-ssm-agent を入力してみると、正しいバージョンが表示されることを確認できました。


原文(韓国語): tistory — 2023-02-28 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

AWS SSM(Systems Manager)— Session Manager · 나봄하랑