NO IMAGE

EC2インスタンスをSystemsManager管理する場合にIAMロールが必要無くなったので試してみる(2023.2アップデート)

  • 2023年5月3日
  • 2023年5月4日
  • AWS, IT
AWS NO IMAGE

こんにちはますのです。
普段SystemsManagerを利用出来ないという縛りのもと業務をしております。

そんなわたしでも、SessionManagerでSSH接続出来るのは便利だなぁ程度で検証したことはあるので設定方法は存じております。
設定したいEC2インスタンスに必要なIAMロールをアタッチするんでしょう??

AWS Systems ManagerにEC2インスタンスが表示されない時に確認した設定箇所

その常識が壊れた様子。
2023.2月のアップデートで各EC2インスタンスにIAMロール設定不要で利用できるようになった様子。

Systems Manager を有効にし、アカウント内の EC2 インスタンスすべての権限を設定できます。この機能を使用すると、Patch Manager、Session Manager、Inventory といった Systems Manager のコア機能を、アカウント内の新規および既存のインスタンスすべてに対して利用できるようになります。DHMC は、あらゆる EC2 ユーザーに最適な設定です。多数のインスタンスを管理する必要がある場合に、シンプルかつスケーラブルなプロセスで Systems Manager ツールを標準的に利用できるようになります。

また、DHMC を使用すると、アカウントレベルでアクセス権限が付与されるようになるほか、Systems Manager を有効にするために既存のインスタンスプロファイルロールを変更する必要がなくなります。これにより、EC2 インスタンスへのアクセスの管理作業が簡素化されます。DHMC を使用するには、Fleet Manager コンソールを数回クリックするだけです。

引用元:AWS Systems Manager をアカウント内すべての EC2 インスタンスにおいてデフォルトで有効にする新機能が登場

半信半疑のため実際に利用可能か試してみました。

結果:DHMC有効化で各EC2のIAMロール設定は不要

結果として、EC2インスタンスへのIAMロール設定は不要でフリートマネージャに表示されました。

  • フリートマネージャ上でDHMCを有効化する際にIAMポリシーを設定する
  • 下記を満たすEC2インスタンス全てが対象となる
    • IMDSv2を利用出来るEC2インスタンス(※特に追加設定は不要)
    • SSMエージェントのバージョン:3.2.582.0である
    • https通信でAWSのSystemsManagerのエンドポイントへアクセス出来る
EC2インスタンスへのIAMロール設定は不要になりましたが、AWSのエンドポイントへのアクセスといった基礎的な知識は必要であると捉えました。

前提条件

  • 対象のEC2インスタンスに「SSM Agent バージョン 3.2.582.0 以降」がインストールされていること
  • インスタンスメタデータサービスバージョン 2 (IMDSv2) を使用していること

注意点

検証でAmazonLinux2をデフォルトで起動したところ、SSM Agentのバージョンが「3.1.1732.0」でした。
既存、新規インスタンスに関わらずSSM Agentのアップデートを実施しないとデフォルトでは機能しなそうです。

[ec2-user@ip-172-31-18-57 ~]$ yum info amazon-ssm-agent
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
Name : amazon-ssm-agent
Arch : x86_64
Version : 3.1.1732.0
Release : 1.amzn2
Size : 90 M
Repo : installed
Summary : Manage EC2 Instances using SSM APIs
URL : http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html
License : ASL 2.0
Description : This package provides Amazon SSM Agent for managing EC2 Instances using SSM APIs
IMDSv2は既存のインスタンスも利用できるっぽい?
ドキュメントで詳細確認が出来ませんでしたが、基本は「IMDSv2=optional」に設定されているようです。・optional:IMDSv1 と IMDSv2 が使用可能
・required:IMDSv2 が使用可能

IMDSv2のみ利用する場合は「required」に変更することになるようです。
参考:インスタンスメタデータサービスバージョン 2 の使用への移行

検証時の前提条件

  • 検証すること
    • IAMロールを設定しないでフリートマネージャに表示されるか(OK:今回の記事で確認)
    • IAMロールを設定しないでSessionManagerでSSH接続が出来るのか(OK:検証済
    • IAMロールを設定しないでRunCommandが実行出来るのか(次回)
  • 構成
    • インターネット経由でSSM Agentの疎通をさせる
      • パブリックサブネットにEC2インスタンスを作成する
      • パブリックIPをEC2インスタンスに付与して直接インターネット経由に抜ける
      • VPCエンドポイントのインターナルな通信は設定しない(わりと良い金額が発生するので避けます)
    • IMDSv2を「optional」に設定してEC2インスタンスを作成する
本来の環境であればプライベートサブネットに配置しているEC2インスタンスにもSSH接続したり、メタデータへのアクセスも必要となるはずです。
実現するためにはVPCエンドポイントを作成してインターナルな通信でアクセスさせるか、NatGatewayなどでインターネットを経由する方法が考えられます。
しかし今回は検証メイン。お金が掛からない方法を重視します。

EC2インスタンスの作成

実際に作ってみましょう。

今回はAmazon Linux2を選択します。
※Amazon Linux2023でも同様ですが今回は割愛します。

続いてネットワーク設定です。
・パブリックサブネットに配置
・パブリックIPを割り当てる
・セキュリティグループの割り当て(※アウトバウンド:443、0.0.0.0/0が必要)

最後に高度な詳細を設定します。
・IAMロール(IAM instance profile)は選択しない
・メタデータのバージョン:V1 および V2(トークンはオプション)を選択
・ユーザデータにSSM Agentをアップデートするコマンドを設定する

ユーザーデータ設定値

#!/bin/bash

# GetRegionName
REGION=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')

# SSMAgent Update
sudo yum install -y https://s3.${REGION}.amazonaws.com/amazon-ssm-${REGION}/latest/linux_amd64/amazon-ssm-agent.rpm

# Restart SSM agent
sudo systemctl restart amazon-ssm-agent

参考:インスタンスメタデータの取得
参考:Amazon Linux 2 インスタンスに SSM Agent を手動でインストールする

メタデータのバージョンはEC2作成後もマネージメントコンソール上から変更可能です。
また、「メタデータのバージョン」で何も選択しなかった場合も「IMDSv2:Optional」がデフォルトとして反映されました。【確認方法】
EC2インスタンスを選択 > アクション > Modify instance metadata options を選択

SystemsManager:デフォルトのホスト管理設定を有効化

対象となるEC2インスタンスを用意したので、いよいよ本題です。

デフォルトのホスト管理設定の有効化の手順は公式ドキュメントを参照します。

1.AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。
2.ナビゲーションペインで、[Fleet Manager] を選択します。
3.[アカウント管理] ドロップダウンの一覧で [デフォルトのホスト管理設定] をクリックします。

4.[デフォルトのホスト管理設定を有効にする] をオンにします。
5.インスタンスの Systems Manager 機能を有効にするために使用するAWS Identity and Access Management (IAM) ロールを選択します。デフォルトのホスト管理設定で提供されるデフォルトのロールを使用することをお勧めします。このロールには、Systems Manager を使用して Amazon EC2 インスタンスを管理するために必要となる最小限のアクセス許可のセットが含まれています。カスタムロールを使用する場合は、ロールの信頼ポリシーで Systems Manager を信頼できるエンティティとして許可する必要があります。
6.[設定] をクリックして、セットアップを完了します。

引用:デフォルトのホスト管理設定

EC2インスタンスに設定していたIAMロールがフリートマネージャ上で設定するようになったと捉える形でしょうか。
設定するIAMロールはデフォルトで作成される「AWSSystemsManagerDefaultEC2InstanceManagementRole」が推奨のようです。

有効化後にEC2インスタンスが表示される

正確な時間は分かりませんが数分放置してたら表示されたことを確認しました。

もし表示されない場合は以下の確認が必要になります。

  • SSM Agentのバージョンが古い
  • セキュリティグループのアウトバウンドで「443」が許可されていない

VPC エンドポイントを使用する代わりに、マネージドインスタンスでアウトバウンドのインターネットアクセスを許可します。この場合、マネージドインスタンスは、以下のエンドポイントへの HTTPS (ポート 443) アウトバウンドトラフィックも許可する必要があります。

ssm.[region].amazonaws.com
ssmmessages.[region].amazonaws.com
ec2messages.[region].amazonaws.com

SSM Agent は、クラウド内の Systems Manager サービスへのすべての接続を開始します。このため、Systems Manager のインスタンスへのインバウンドトラフィックを許可するようにファイアウォールを設定する必要はありません。

引用:ステップ 2: VPC エンドポイントを作成する

RunBookの実行やSessionManagerも利用出来そうです。
次回はRunBookの実行とSessionManagerへの接続についても検証したいと思います。

参考情報

NO IMAGE
最新情報をチェックしよう!