Systems Managerのデフォルトのホスト管理設定を使ってSession Managerログインする。

# はじめに
2023/10/13に`Systems Manager`のデフォルトのホスト管理設定（DHMC、Default Host Management Configuration）といった機能が登場したようなので、何が便利になったのか試してみようと思います。

- [AWS Systems Manager を組織内すべての EC2 インスタンスに対してデフォルトで有効にする新機能が登場](https://aws.amazon.com/jp/about-aws/whats-new/2023/10/enable-aws-systems-manager-ec2-instances-organization/)

また、今回の記事は一部以前の記事を前提としているため、以下を見てから今回の記事を見ることをおすすめします。

- 【前】[Systems Manager Session Managerを使ってEC2からキーペアを根絶する。](https://qiita.com/sakai00kou/items/ecb41aea16f5a831c9f4)

# デフォルトのホスト管理設定とは
`Systems Manager`の機能の一つとなり、`DHMC`（Default Host Management Configuration）と言うそうです。

通常、`Session Manager`や`Patch Manager`などの機能を使うためには、対象のインスタンスにSSMのポリシーを許可したIAMロールを割り当てた上で接続する必要がありましたが、`DHMC`を使うことで、なんとインスタンスにIAMロールを割り当てなくても`Session Manager`などが使えるようになります。

また、SSMのポリシーが許可されていないIAMロールが割り当てられている場合でも接続ができるそうです。

詳細は以下AWS公式ドキュメントを参照してください。

- [デフォルトのホスト管理設定](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/managed-instances-default-host-management.html)

# DHMCの有効化
以下より`DHMC`を作成＆設定を行い、使える状態にしていこうと思います。

- [DHMCの作成](#dhmcの作成)
- [DHMCの設定](#dhmcの設定)

## DHMCの作成
`DHMC`の設定は「**AWS Systems Manager**」のダッシュボード画面から、「**高速セットアップ**」→「**ライブラリ**」タブの、「**Default Host Management Configuration**」から「**作成**」を行います。

![Monosnap_20231025_131624.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/597a4902-a41b-f721-a3fd-bdfa7ddf7414.png)

特に設定項目もないため、デフォルトのまま「**作成**」を行います。

また、以下説明文に記載されている通り、AWS組織内のすべてのインスタンスが`Systems Manager`に接続できるようにセットアップされるため、もし組織内全ては対象にしたくないといった場合は注意してください。

![Monosnap_20231025_131807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f819ef0e-5c93-3f9a-fbdd-56128ab7a9c2.png)

## DHMCの設定
作成した`DHMC`の設定を行うため、「**高速セットアップ**」→「**設定**」タブから先程作成した`DHMC`を選択し、「**アクション**」から「**設定を編集**」を選択します。

![Monosnap_20231025_155039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/6f9bea70-b990-f871-0ceb-bb2187bca64f.png)

「**デフォルトのホスト管理設定を有効にする**」を有効にすることで、`DHMC`で使用するIAMロールを選択または作成できます。

予め作成しておいたIAMロールを選択しても良いですが、今回は、「**AWSSystemsManagerDefaultEC2InstanceManagementRoleを作成(推奨)**」を選択して、「**設定**」を選択します。

![Monosnap_20231025_135001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/a81632da-a765-d254-4ea1-d275ba63e21b.png)

ちなみに推奨で作成した場合、以下のようなIAMポリシーが作成されます。

- [AWS マネージドポリシー: AmazonSSMManagedEC2InstanceDefaultPolicy](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonSSMManagedEC2InstanceDefaultPolicy)

なお、こちらで作成されるIAMロールは、対象のEC2インスタンスに付与されるわけではなく、`DHMC`の機能に割り当てられるようなので、EC2インスタンスに付与されているIAMロールには影響はありません。

# Session Managerでの接続確認
`DHMC`の設定としては完了したため、以下より`Session Manager`による接続確認を行っていきます。

`DHMC`で今までの手間が省かれるとのことなので、今回は以下３パターンで`Session Manager`の接続ができるのかを確認してみようと思います。

- [パブリックサブネットのEC2インスタンスへの接続（SSM不許可IAMロールの付与）](#パブリックサブネットのec2インスタンスへの接続ssm不許可iamロールの付与)
- [パブリックサブネットのEC2インスタンスへの接続（IAMロールなし）](#パブリックサブネットのec2インスタンスへの接続iamロールなし)
- [プライベートサブネットのEC2インスタンスへの接続](#プライベートサブネットのec2インスタンスへの接続)

![dhmc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/b9d06563-7f96-f06d-cde1-90974bd5b97b.png)

## パブリックサブネットのEC2インスタンスへの接続（SSM不許可IAMロールの付与）
はじめにSSMを許可していないIAMロールがEC2インスタンスに付与されている場合の確認を行います。

接続は`Session Manager`の画面から行うこともできますし、「**フリートマネージャー**」の画面から対象のEC2インスタンスを選択→「**ノードアクション**」から「**接続**」→「**ターミナルセッションを開始する**」でも接続できます。

![Monosnap_20231025_162611.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c7499873-93eb-fb66-a930-e30f778b4a4b.png)

結論としては、SSMが許可されたポリシーが無くても接続することができました。

## パブリックサブネットのEC2インスタンスへの接続（IAMロールなし）
次に、IAMロールがそもそも付与されていないEC2インスタンスに対して接続を行ってみようと思います。

こちらも結論としては、IAMロールが付与されていなくても接続することができました。

## プライベートサブネットのEC2インスタンスへの接続
最後にNATゲートウェイも`Systems Manager`のエンドポイントも存在しないプライベートサブネットに存在するEC2インスタンスに対して接続を行ってみようと思います。

こちらは結論として、IAMロールが付与されていても、付与されていなくても、対象のEC2インスタンスに接続することはできませんでした。

![Monosnap_20231025_163736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/93748422-24c1-8d53-516e-505addf50ff1.png)

# DHMC機能を使ったSession Managerログインまとめ
３パターンの接続を試してみた結果として、IAMロールに関してはSSMの許可ポリシーが存在しなくても接続することができましたが、`Systems Manager`とネットワーク的には繋がる必要があるため、プライベートサブネットのEC2インスタンスへの接続は[前回](https://qiita.com/sakai00kou/items/ecb41aea16f5a831c9f4)紹介したようにNATゲートウェイを設定するか、`Systems Manager`へのエンドポイントの設定が必要となります。

但し、接続できるパターンであっても、`DHMC`設定直後だったからなのか、EC2インスタンスから`Systems Manager`への通信が無かったからなのか、すぐにEC2インスタンスに接続できず、再起動することで接続できるようになったので、`DHMC`を導入した場合は、念のため、EC2インスタンスの再起動も行っておいたほうが良いかと思います。

ネットワーク的に接続できない状態のEC2インスタンスは、「**フリートマネージャー**」の画面から見ると「**接続が失われました**」と表示されているため、接続できない対象は以下の画面を見ると良いです。

![Monosnap_20231025_164134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/111a6a14-3f0c-35db-b690-1df0a986cf11.png)

# おわりに
`Systems Manager`と通信できないセグメントに対象のインスタンスが存在する場合は接続できませんが、IAMロールが未設定、またはSSMの許可がされていない場合でも接続できるようになることから、構築時に何も考えずとりあえず`DHMC`を有効にするというのでも良いかと思いました。

但し、`DHMC`の機能を知らない人や、新たにプロジェクトに参画してきた人が見た場合、IAMロール＆許可ポリシーなしで接続できてしまうことに混乱してしまう可能性もあるので、やはり明示的にSSMポリシーを許可しておいたり、設計書等に`DHMC`を使用している旨を書いておくのが良いと思いました。