こんにちはますのです。
普段SystemsManagerを利用出来ないという縛りのもと業務をしております。
そんなわたしでも、SessionManagerでSSH接続出来るのは便利だなぁ程度で検証したことはあるので設定方法は存じております。
設定したいEC2インスタンスに必要なIAMロールをアタッチするんでしょう??
その常識が壊れた様子。
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インスタンスに「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=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インスタンスを作成する
- インターネット経由でSSM Agentの疎通をさせる
実現するためには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 を手動でインストールする
また、「メタデータのバージョン」で何も選択しなかった場合も「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.comSSM Agent は、クラウド内の Systems Manager サービスへのすべての接続を開始します。このため、Systems Manager のインスタンスへのインバウンドトラフィックを許可するようにファイアウォールを設定する必要はありません。
RunBookの実行やSessionManagerも利用出来そうです。
次回はRunBookの実行とSessionManagerへの接続についても検証したいと思います。
参考情報
- AWS Systems Manager をアカウント内すべての EC2 インスタンスにおいてデフォルトで有効にする新機能が登場
- インスタンスメタデータサービスバージョン 2 の使用への移行
- インスタンスメタデータの取得
- Amazon Linux 2 インスタンスに SSM Agent を手動でインストールする
- デフォルトのホスト管理設定
- ステップ 2: VPC エンドポイントを作成する
- [アップデート] EC2インスタンスに対しデフォルトでSSMを有効にするDefault Host Management Configurationが追加されました
- InstanceMetaDataV2を分かりやすく解説してみる