AWS Systems Manager の Fleet Manager で EC2 インスタンスのパフォーマンスカウンターを見る

[AWS エバンジェリストシリーズ　AWSの基礎を学ぼう](https://awsbasics.connpass.com/) の [特別編 Systems Managerその１](https://awsbasics.connpass.com/event/253403/)に参加し、AWS Systems Manager （以下、SSM）で Fleet Manager （以下、フリートマネージャー）を触った。

https://awsbasics.connpass.com/event/253403/

セッションマネージャーは触ったことがあるが、フリートマネージャーについてはあまり知らなかったので、別途調査したことと、ハンズオン後半で躓いたEC2 インスタンスのパフォーマンスカウンター閲覧 （に必要な KMS でのセッション暗号化）について記載する。

# 1.Fleet とは（自己解釈）
[Weblio 英和辞典さん](https://ejje.weblio.jp/content/fleet)によると

**fleet**
【名詞】艦隊、海軍、船団、隊、団
【形容詞】速い，快速の.

「サーバーフリート」という言葉はインスタンスセット、インスタンスの集まりを表すようなので、「サーバー群の管理」というような意味である模様。

# 2.SSM の フリートマネージャー とは
- フリートマネージャーは SSM の機能の一つ
- AWS またはオンプレミスで実行されているノードをリモートで管理
- AWS マネジメントコンソールからサーバーフリート全体の正常性とパフォーマンスステータスを表示
- 個々のノードからデータを収集し、コンソールから一般的なトラブルシューティングと管理タスクを実行
- リモートデスクトッププロトコル (RDP) を使用した Windows インスタンスへの接続、フォルダとファイルのコンテンツの表示、Windows レジストリの管理、オペレーティングシステムのユーザー管理などが可能

## 2-1.セッションマネージャーとフリートマネージャーの違い

どちらも共に、SSM の機能の一種で、以下の特徴がある。
- SSH ポート 22 や RDP ポート 443 などを開放せずに、サーバをリモートで管理できる
- SSM Agent のインストールが必要
- 管理するサーバ側で SSM にアクセスするための権限（IAM ロール）が必要
- SSM に接続する通信経路の確保が必要
- SSM Agent のインストール・通信経路が確保されていればオンプレミスのサーバも管理できる

以下、軽く触ってみた私の個人的な見解だが
### セッションマネージャー
- Windows Server への接続は CUI となる

### フリートマネージャー
- Windows Server へ RDP 接続できる
- AWS マネジメントコンソール上で以下情報を参照できる
   - （Windows の場合）Windows イベントログ、Windows レジストリ
   - パフォーマンスカウンター
   - ファイルシステム
   - プロセス新規
   - ユーザーとグループ


# 3.使い方
日本語のハンズオンがあるので貼っておく。

https://catalog.us-east-1.prod.workshops.aws/workshops/7e60f6e3-0c8f-488a-bedc-632aa8d526ea/ja-JP

## 3-1.フリートマネージャーで EC2 インスタンスのパフォーマンスカウンターを見る

今回の構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/7405c50a-17ab-e8d8-a7b2-8ace53e61a0f.png)

### 3-1-1.フリートマネージャーで EC2 インスタンスのパフォーマンスカウンターを見る際の仕組み
- **フリートマネージャーは、セッションマネージャーを使用してパフォーマンスデータを取得する**
  - つまりセッションマネージャーを利用するための準備が必要
- セッションマネージャーで EC2 インスタンスに接続するための準備
   - SSM へのアクセス権限 (`AmazonSSMManagedInstanceCore`) がある IAM ロールをEC2 インスタンスに付与
      - [既存の IAM ロールに Session Manager 許可を追加](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-add-permissions-to-existing-profile.html)を参照
   - SSM (セッションマネージャー) から EC2 インスタンスへの通信経路確保
      - 今回は VPC 内のパブリックサブネットに配置した EC2 インスタンスに、Internet Gateway 経由で接続する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9bb02936-a5db-a1e4-c0a7-3c683b151cfa.png)


### 3-1-2.なぜ KMS で暗号化するのか？
- フリートマネージャーで EC2 インスタンスのパフォーマンスカウンターを見るには、**セッションマネージャーの設定で AWS Key Management Service (AWS KMS) 暗号化が有効化されている必要がある**
   - [セッションデータの KMS キー暗号化を有効にする (コンソール)](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-preferences-enable-encryption.html)を参照

### 3-1-3.何を暗号化するのか？
[セッションデータの KMS キー暗号化を有効にする (コンソール)](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-preferences-enable-encryption.html)を参照すると、「マネージドノードと AWS アカウント内のユーザーのローカルマシン間で送信されるセッションデータが、KMS キー暗号化プログラムで暗号化される」と記載されている。

実際は end-to-end の共通鍵暗号化で、SSM Agent から SSM へのデータの受け渡し通信だけが暗号化されるわけではないとのこと。
（例えば S3 などへの保存も暗号化された状態。セッションマネージャー関連のデータ全般が暗号化されるという感じ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/d24f9d1a-4897-e268-b763-16142ac7dcd3.png)

ちなみに、 AWS クラウド内の通信は、パブリックIP 同士であってもデフォルトで TLS 1.2 暗号化が提供されている。
[参考：Q:2 つのインスタンスがパブリック IP アドレスを使用して通信する場合、またはインスタンスがパブリックな AWS のサービスエンドポイントと通信する場合、トラフィックはインターネットを経由しますか?](https://aws.amazon.com/jp/vpc/faqs/)

AWS KMS で作成したキーでセッションデータを暗号化するオプションを使用する場合、SSM SSM Agent バージョン 2.3.539.0 以降がインストールされている必要がある。

KMS キーは EC2 インスタンス側で使えるように、キーユーザーに EC2 インスタンスに付与した IAM ロールを指定しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/77aa78c4-152e-af58-e8ca-dd10b39c4f3b.png)


## 3-2.フリートマネージャーで EC2 インスタンスに接続する

### 3-2-1.IAM ロールの作成
- IAM マネジメントコンソールに移動
- ロールを作成
   - 信頼されたエンティティタイプ：AWS のサービス
   - ユースケース：EC2
   - 次へ
- 許可を追加
   - 管理ポリシーである `AmazonSSMManagedInstanceCore` をチェック
   - 次へ
- ロール名を指定してロールを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9ca41555-0656-bd46-dab0-01d6e42af0e8.png)

### 3-2-2.EC2 インスタンスの作成（今回は Windows ）
- EC2 マネジメントコンソールに移動
- インスタンスを起動
   - 名前とタグで任意の名前を記入
   - アプリケーションおよび OS イメージ (Amazon マシンイメージ)で Windows を選択
   - 任意のキーペアを指定
   - ネットワーク設定
      - 今回はデフォルトの VPC のパブリックサブネットを選択（デフォルト）
      - ファイアウォール (セキュリティグループ)で新規セキュリティグループを作成、インバウンドの許可ルールは不要なので何も設定しない
      - アウトバウンドの HTTPS アクセスが制限されていなければ、インバウンドの許可は不要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/dc1d0020-997f-8529-2aba-7733ad526916.png)
   - 高度な詳細を展開
      - IAM インスタンスプロフィールで「3-2-1.IAM ロールの作成」で作成した IAM ロールを選択する
   - インスタンスを起動

###  3-2-3.SSM フリートマネージャーで接続確認
- SSM マネジメントコンソールに移動
- 画面左のナビゲーションペインでフリートマネージャーを選択
- 起動した Windows Server にチェックを入れ [ノードアクション] - [リモートデスクトップ (RDP) との連携]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/42ab1754-bce9-aa66-1208-388cbc065c3a.png)
- キーペアを選択し、connect
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/6bf93e7f-39d6-35ce-3e94-1eb2833be926.png)
- Windows の GUI が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/e9c96862-2050-064a-aceb-641bd3eca180.png)
- フリートマネージャーでは IME 日本語設定しても日本語が入力できない難点がある。手元のローカル端末からコピペすることはできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/4258766f-641d-0247-16f0-5da150064756.png)

## 3-3.フリートマネージャーで パフォーマンスカウンターを確認する

###  3-3-1.KMS 暗号化キーを作成
- KMS マネジメントコンソールに移動
- 画面左のナビゲーションペインでカスタマー管理型のキーを選択し[キーの作成]
   - [キーのタイプ][キーの使用]はそのまま次へ
   - エイリアスに任意の文字列を入力し次へ
   - キー管理者で任意の IAM ユーザを選択し次へ
   - キーの使用アクセス許可を定義「3-2-1.IAM ロールの作成」で作成した IAM ロールを選択し次へ
   - 完了

###  3-3-2.セッションマネージャーで暗号化を有効化
- SSM マネジメントコンソールに移動
- 画面左のナビゲーションペインでフリートマネージャーを選択
- 起動した Windows Server のノード ID リンクをクリック
- 「パフォーマンスカウンター」を選択するとエラーになる。エラー内の「セッション設定」をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/faee386e-cda2-505a-d232-26512eef0cd7.png)
- セッションマネージャーの設定画面が開く
   - KMS encryption が　Disable になっているのが確認できる
   - 編集をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/774e4baf-3dbb-228a-ba13-74a2be8636c6.png)
- 「KMS encryption」で「Enable KMS encryption」にチェックを入れ、「3-2-5.KMS 暗号化キーを作成」で作成したキーを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/7ab6dcae-dcd4-e257-c0c9-ea84a51c3b48.png)
- 画面下部の「保存」をクリックする

### 3-3-3.フリートマネージャーで パフォーマンスカウンターを確認する
- SSM マネジメントコンソールに移動
- 画面左のナビゲーションペインでフリートマネージャーを選択
- 起動した Windows Server のノード ID リンクをクリック
- 「パフォーマンスカウンター」を選択すると、パフォーマンスカウンターが確認できるようになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/4a70458a-f72c-5049-a7f8-901bb4b89dac.png)



# 参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/fleet.html

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html