CloudWatchAgentをインストールしてサーバーの監視を行う②（EC2への権限追加・SSMによるEC2への接続）

前回の記事にてCloudWatchAgentで使用するVPCエンドポイントの作成を行いました。
今回は、IAMロールを作成し、EC2に対してIAMロールをアタッチします。
EC2にIAMロールをアタッチ後、SSMにてEC2に接続できることを確認します。

## 作業の流れ
[1.VPCへCloudWatchAgentに必要なVPCエンドポイントを作成する](https://qiita.com/tonkatsu_oishi/items/7c39f81fd4e3e2fbe91e)
[2.EC2を構築し、IAMロールをアタッチする（CloudWatchAgentとSSM権限の付与）](https://qiita.com/tonkatsu_oishi/items/1851eddb094a45f189be)←いまここ
[3.EC2に対してCloudWatchAgentをインストールする](https://qiita.com/tonkatsu_oishi/items/114ab3342bcd7ec48afe)
4.CloudWatchAgentのconfigファイルを設定し、CPU・メモリ・プロセスなどのメトリクスを取得する
4.CloudWatchAgentのconfigファイルを設定し、CPU・メモリ・プロセスなどのメトリクスを取得する
　　　[Linux用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動](https://qiita.com/tonkatsu_oishi/items/ec163751cc7f644f9cae)
　　[Windows用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動](https://qiita.com/tonkatsu_oishi/items/7abed083f1d5f1b45a7f)
5.[SNSトピックの作成](https://qiita.com/tonkatsu_oishi/items/3fa4c6c8de52d9678c11)
6.[CloudWatchAgentで取得したメトリクスに対してCloudWatchAlarmを設定する](https://qiita.com/tonkatsu_oishi/items/3fa4c6c8de52d9678c11)

構成図確認
改めて構成図を確認します。
前回の記事にて、プライベートサブネット上にCloudWatchAgent・SSMにて使用するVPCエンドポイントを作成作成しました。
今回はプライベートサブネット上に構築したEC2に対してIAMロールをアタッチし、SSMによる接続確認を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/cae1bd16-f3f4-8030-f531-e373abd5c818.png)

## IAMユーザーの作成
EC2の構築方法については[別記事](https://qiita.com/tonkatsu_oishi/items/aabddfa6b54f1a29d4af)をご参照ください。
今回はプライベートサブネット上に既存のEC2インスタンスに対して、IAMロールをアタッチします。

## 用語の確認
具体的な構築手順に入る前に、この記事で利用するAWSリソースについて簡単に確認します。

### AWS Systems Manager(SSM)
[SSM](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html)はAWSリソースの管理ツールです。
SSMを利用することでAWSリソースに対して起動停止、コマンド実行、OS更新や接続など様々な操作を行うことができます。
Linux、Windowsなど複数のOSが対応しています。（[SSMで対応しているOS](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/operating-systems-and-machine-types.html)）

### SSMパラメータストア
[SSMパラメータストア](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-parameter-store.html)はSSMの機能の中の一つです。
階層型のストレージとなっており、パスワード、データベース文字列や設定ファイルなどの情報を保存できます。

### IAM(AWS Identity and Access Management)
[IAM](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html)は、AWSリソースへのアクセス管理を行うためのサービスです。
IAMポリシーによりアクセス権限の定義を行います。
自分でIAMポリシーの定義を行うこともできますが、デフォルトの状態でも、AWSにより事前に定義されているAWSマネージドIAMポリシーが利用できます。
定義したIAMポリシーは、IAMユーザー、IAMグループやIAMロールへと紐づけることが可能です。
IAMユーザーは、AWSアカウント上で利用できるユーザーのことです。ユーザーは特定のユーザーに一意に関連づきます。
IAMグループは、IAMユーザーをひとまとめにできるグループです。
IAMロールはIAMユーザーと少し似ています。
IAMユーザーは特定の人に紐づくのに対して、IAMロールはAWSリソースや他のAWSアカウントに紐づけ、アクセス許可を与えることが可能です。

## VPCエンドポイントの作成（事前準備）
プライベートサブネット上のEC2へSSMによる接続を行う場合は、下記三つのVPCエンドポイントが必要となります。

■SSMによるEC2ログインに必要なエンドポイント
・ssm.region.amazonaws.com
・ssmmessages.region.amazonaws.com
・ec2messages.region.amazonaws.com

具体的なVPCエンドポイント作成手順については、前回の記事をご参照ください。


### IAMロールの作成
まずはEC2インスタンス用のIAMロールを作成します。
IAMロールに紐づけるAWSマネージドのIAMポリシーは下記となります。

■CloudWatch関連の権限（どちらか一つ）
・CloudWatchAgentServerPolicy
・CloudWatchAgentAdminPolicy

※CloudWatchAgentServerPolicyとCloudWatchAgentAdminPolicyは、どちらもCloudwatchの利用権限が付与されています。
ただし、CloudWatchAgentAdminPolicyにはCloudwatchの権限に加え、Systems Managerの「GetParameter」「PutParameter」の権限が付与されています。
これにより、EC2内のCloudWatchAgentでConfigファイルを作成した際に、SSMのパラメータストア上にConfigファイルの内容を保存することができるようになります。

■SSM関連の権限
AmazonSSMManagedInstanceCore

IAMのサービス画面へ移動し、左メニューから「ロール」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/07156fa4-3fcc-ce12-72c8-da5fb4a9baac.png)

IAMロールの一覧が用事されます。
右上の「ロールの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2554325f-5f4a-c187-4d68-bea59ba3ca96.png)

IAMロールの作成画面が表示されます。
今回はEC2インスタンスがIAMロールを利用するため、
「信頼されたエンティティタイプ」には「AWSのサービス」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/3e3cebdf-706b-11b2-10c5-efaef60fc205.png)

「サービスまたはユースケース」のプルダウンメニューから、「EC2」を選択します。
「EC2」のチェックボックスにチェックを入れ、「次へ」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/a2c94ef2-ca67-1e4d-ba4f-b98e750550f7.png)

IAMポリシーの追加画面が表示されます。
テキストボックスに「CloudWatchAgentAdminPolicy（もしくはCloudWatchAgentServerPolicy）」と入力し、エンターキーを押下します。
表示されたIAMポリシーのチェックボックスにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/94eedb64-8598-50c3-9681-7093dc290ee0.png)

テキストボックスに入力した文字列を削除し、今度は「AmazonSSMManagedInstanceCore」と入力し、エンターキーを押下します。
表示されたIAMポリシーのチェックボックスにチェックを入れ、「次へ」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/cd6c24f2-4eba-3356-74b8-0250d7506591.png)

ロール名の設定・確認画面が表示されます。
「ロール名」のテキストボックスにロール名を入力し、下へスクロールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/ac35e32e-36ad-3733-d55a-a81452466de3.png)

信頼されたエンティティについては変更せず、下へスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5867e345-73c6-f370-bdc6-906d6fb4072c.png)

CloudWatchAgentAdminPolicy（もしくはCloudWatchAgentServerPolicy）・AmazonSSMManagedInstanceCoreのIAMポリシーが設定されていることを確認します。
IAMロールへタグを設定する場合は、「タグを追加」セクションにて設定が可能です。

IAMロール名・IAMポリシー・タグの設定が確認出来たら、「ロールの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/fb53f8f6-4de9-4eba-6d4e-7956eca555fa.png)

IAMロールが作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/6f17f0c8-5da4-8533-c5a7-6ffbf866b51e.png)

## EC2へのIAMロールのアタッチ
作成したIAMロールをEC2へアタッチします。
EC2のトップページへ移動し、左メニューから「インスタンス」を押下します。

インスタンスの一覧が表示されたら、IAMロールをアタッチしたいインスタンスのチェックボックスにチェックを入れ、「アクション」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/67fe0db0-636d-0010-7273-4c3993458bd0.png)

展開されたメニューの中から「セキュリティ」を押下し、さらに「IAMロールを変更」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/9aa9a20e-8a44-cdee-4d6f-93334fe18ae5.png)

IAMロールの変更画面が表示されます。
プルダウンメニューから先ほど作成したIAMロールを選択し、「IAMロールの変更」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/0ae73c1f-5449-9534-0464-07439fdbdf55.png)

IAMロールがインスタンスにアタッチされたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/d13289c6-543e-2111-cf56-2aff222da4ad.png)

## EC2へのSSMエージェントのインストールについて
SSMを利用してEC2へ接続するには、EC2内にSSMAgentをインストールする必要があります。
ただし、2017 年 9 月以降のAmazonLinuxAMIを利用して作成したインスタンスには、あらかじめSSMAgentがインストールされています。（[参考](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ami-preinstalled-agent.html)）
Windowsサーバーの場合は、Windows Server 2016、2019、2022のインスタンスと、2016 年 11 月以降にAmazonから公開された Windows Server 2008-2012 R2のAMIを利用して作成したインスタンスには、あらかじめSSMAgentがインストールされています。（[参考](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-win.html)）

それ以外のOSを利用してEC2を構築した場合は、SSMエージェントのインストールを行う必要があります。
例えば下記のようなコマンドでSSMAgentのインストールが行えます。
※コマンド内のS3URLで指定している「region」の部分は、利用するリージョンのリージョンコードを入れて実行してください。
参考：[リージョン](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions)

#### Amazon Linuxの場合のインストールコマンド
```
sudo yum install -y https://s3.region.amazonaws.com/amazon-ssm-region/latest/linux_amd64/amazon-ssm-agent.rpm
```

#### SUSELinuxの場合のインストールコマンド
```
sudo zypper install amazon-ssm-agent
```
参考：[Linux 用 EC2 インスタンスに手動で SSM Agent をインストールする](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html)

#### Windows Serverの場合のインストールコマンド（PowerShellにて実行）
```
[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
$progressPreference = 'silentlyContinue'
Invoke-WebRequest `
    https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.exe `
    -OutFile $env:USERPROFILE\Desktop\SSMAgent_latest.exe
```
参考：[Windows Server 用 EC2 インスタンスに手動で SSM Agent をインストールする](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-win.html)

※SSMAgentのインストールを行う際は、S3へのアクセスが発生します。
プライベートサブネット上のEC2へSSMAgentのインストールを行う場合は、S3用のVPCエンドポイント構築・NATGateway構築などの対応が必要となります。NATGatewayの構築方法は、[こちらの記事](https://qiita.com/tonkatsu_oishi/items/ee5d7f64a43ba7deb671)をご参照ください。VPCエンドポイントの作成については、前回の記事をご参照ください。VPCエンドポイントの作成時に「サービス」の検索ボックスに「S3」と入力し、表示された中から「Gateway」型の「com.amazonaws.ap-northeast-1.s3」を選択しVPCエンドポイントを作成します。ゲートウェイ型の VPC エンドポイントであればデータ処理料金や時間単位料金は発生しません。
参考：[Amazon VPC の料金](https://aws.amazon.com/jp/vpc/pricing/)

## SSMにてサーバーへターミナル接続する
IAMロールの設定・SSMAgentのインストールの対応が完了したら、SSMを利用してサーバーへログインできるようになります。

EC2一覧から接続したいEC2のチェックボックスにチェックを入れ、「接続」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/cf998742-e702-f3ef-edc6-8e2886995abe.png)

「インスタンスに接続」の画面が表示されます。
「セッションマネージャー」のタブへ移動し、「接続」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2eaf3aec-afb3-787a-5873-c66ac70e6787.png)


サーバーにログインできると、ターミナル上からコマンドが実行できるようになります。
Windowsサーバーの場合は、コマンドプロンプトのターミナルが表示されます。
右上の「終了」ボタンを押下すると接続を終了することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/055f1ef4-1c5a-d741-838c-939bc573f211.png)

## フリートマネージャーにてサーバーへRDP接続する
Windowsサーバーの場合は、SystemsManagerのフリートマネージャーを利用するとサーバーへのRDP接続が行えます。
SystemsManagerのトップページへ移動し、左メニューから「フリートマネージャー」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/0e477c3a-8ec6-2525-1b1e-5db3612c8eff.png)
フリートマネージャーのトップページが表示されます。「使用を開始する」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/4de4237b-15e6-03f3-dd36-83c0bd7730cb.png)
フリートマネージャーにて接続可能なインスタンスが一覧で表示されています。
接続したいインスタンスのチェックボックスにチェックを入れます。左上の「ノードアクション」のメニューを展開し、「接続」「リモートデスクトップで接続」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/d1e9a80b-b76a-d203-1d98-b68a1060212a.png)
ログイン情報の入力画面が表示されます。
Windowsサーバーのログイン情報を入力し、「Connect」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/48062787-e3d3-91e6-9ace-9a32e8a44b35.png)


※WindowsのEC2にてAdministratorの接続情報を取得する手順は[こちら](https://qiita.com/tonkatsu_oishi/items/80d86fa0145e37896147#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AEadministrator%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B)をご参照ください。
フリートマネージャーからサーバーへRDP接続が行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/b43427da-6999-d10a-e4d1-9e9ecd04b16c.png)
接続を終了したい場合は、左上の「アクション」から「セッションの終了」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/0c7c6805-afb1-38f4-1d17-702831559998.png)


ここまでお読みいただきありがとうございました。
次回はサーバーへCloudWatchAgentをインストールする手順についてご紹介します。