Systems Manager Default Host Management Configurationを使ってみた

## はじめに
2023年2月17日にAWSから発表のあったSystems Manager Default Host Management Configurationを試してみたので、共有します。

https://aws.amazon.com/jp/about-aws/whats-new/2023/02/enable-aws-systems-manager-default-all-ec2-instances-account/

# Systems Manager Default Host Management Configurationとは
Default Host Management Configuration（以下 DHMC、日本語：デフォルトのホスト管理設定）を利用すると、EC2インスタンスに対しデフォルトでSSMを利用可能にするための権限を設定できます。

利用できるのは以下の2つの条件を満たした場合のみとなります。
・SSM AgentはVer.3.2.582.0以上
・Instance Metadata Service バージョン 2 (IMDSv2)

## DHMCの機能

DHMCでは、EC2のインスタンスプロファイルではなく、SSM サービスに設定されたロールから直接クレデンシャルを取得します。

以下に従来の挙動とDHMCを利用した場合の違いをまとめています。
* インスタンスプロファイルの必要性
    * 従来：必須
    * DHMC：必須でない

* SSM Agentの挙動
    * 従来：インスタンスプロファイルの権限で動作
    * DHMC
       ・インスタンスプロファイルあり：インスタンスプロファイルの権限で動作
       ・インスタンスプロファイルなし：DHMCに設定されたロールからクレデンシャルを取得

インスタンスプロファイルが設定されている場合はそちらが優先されるため、DHMCはインスタンスプロファイルを設定していない場合に使用されるデフォルトロールのようなものかと考えます。

インスタンスプロファイルとDHCMをどちらも設定している場合は、ssm:UpdateInstanceInformation アクションをインスタンスプロファイルにて許可しているかしてないかで挙動が変わります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/76ca5c53-4fcf-b390-4386-10cea7e8908e.png)




## 実際に使ってみた
以下の手順でDHCMを利用するデモを行いました。

### IAMロールの作成
AmazonSSMManagedEC2InstanceDefaultPolicy を利用して、IAMロールを作成します。
DHMC の利用のためにAWSから用意されたポリシーとなっているので、DHCM 利用時は基本的に AmazonSSMManagedEC2InstanceDefaultPolicy の利用を検討しましょう。

※ AmazonSSMManagedInstanceCorePolicyとの違い
おおむね同じです。ただ、以下の2つのアクションが、AmazonSSMManagedInstanceCorePolicy では許可されています。（AmazonSSMManagedEC2InstanceDefaultPolicy では許可されていない）
・ssm:GetParameter
・ssm:GetParameters

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/3e31c134-0044-25dc-0c8d-885d7bc63db9.png)

このロールは、EC2ではなく、Systems Manager に設定するものなので、信頼するエンティティはssm.amazonaws.com としてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/19c08c3d-2fd5-bad2-8e39-d03d807ebb15.png)

### DHMCの設定
* Systems Manager Fleet Manager から設定する場合
Systems Manager ＞ Fleet Manager ＞アカウント管理 ＞デフォルトのホスト管理設定の構成 より設定可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/89ed125d-9ad3-7a0a-5740-63d92b0804c1.png)

デフォルトのホスト管理設定の構成を有効にし、先ほど作成したIAMロールを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/0f5b793c-6672-0507-3477-6f4d0e09f378.png)



* CLIから設定する場合
aws ssm get-service-setting コマンドを使用します。
``` 
aws ssm get-service-setting --setting-id "arn:aws:ssm:${region}:${account_id}:servicesetting/ssm/managed-instance/default-ec2-instance-management-role“
``` 



DHMCは有効にしてから利用可能になるまで最大30分ほどかかるそうなので、ご注意ください。



### EC2インスタンスの作成
Instance Metadata Service バージョン 2 (IMDSv2)のEC2インスタンスを作成します。
このAMIだとSSM AgentのバージョンがVer.3.2.582.0より古いため、今回はユーザーデータで最新バージョンにしました。

参考：https://dev.classmethod.jp/articles/aws-systems-manager-supports-default-host-management-configuration/

また、今回はDHMCを試すために、インスタンスプロファイルは設定しません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/cc832e9d-fdad-12d5-76a9-ea7b9927e524.png)


### EC2インスタンスを確認
* Systems Manager Fleet Manager
作成したインスタンスをマネージドノードとして確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/ac75bff9-c5c2-82cd-611f-7ca62c5e7139.png)

* Systems Manager Session Manager
作成したインスタンスにSession Manager から接続可能なことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/a8b22d34-f840-e783-fc11-d2007a8bef6d.png)

## おわりに
デフォルトでSSMを利用できるようになるのはとても便利な機能だと思いました。
２月のAWSのアップデートで一番気になった機能だったので、試すことができてよかったです。