Systems Manager  触ってみた。

## はじめに
SAAまで取得はしてみたものの触ったことないサービスが多くあり
色々触って知見を深めたいと思い、今回はSystems Manager(以下SSM)を触ってみました。
## 対象者
この記事は下記のような人を対象にしています。

- 駆け出しエンジニア
- AWS初学者
- SSMについて触ったことない方・知見がない方

## SSMとは
EC2やオンプレミスなどのサーバの運用の自動化や効率化、可視化なども行えるサービスです。
AWSサービスのEC2だけでなくオンプレミスにも使えます。

## 事前知識
SSMで利用するインスタンスのことを【マネージドインスタンス】と呼びます。
マネージドインスタンスにするには以下の条件があります。
・インスタンスに SSM Agent が導入されていること
・インスタンスから SSM API への経路 ( HTTPS のアウトバウンドトラフィック) が確保されていること
・インスタンスに適切な IAM Role が付与されていること

## 手順
①ロールの作成
②EC2インスタンス(マネージドインスタンス)の作成
③フリートマネージャーでリモート接続
④セッションマネージャーでシェルアクセス

## ロールの作成
SSMを利用する場合は、インスタンスがSSM APIにアクセスできる様にする必要があります。
そのためにロールを付与する必要がります。

①EC2 にロールを割り当てるので、「EC2」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/21f47db2-fb77-169e-2bbd-d10f45a25ee6.png)

②ポリシーに「AmazonSSMManagedInstanceCore」を選択し作成で完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/2de2f6d1-2acc-fbac-8d1c-cf9a4f2a7c42.png)

## EC2インスタンスの作成
SSMの対象となるマネージドインスタンスを作成します。
Amazon LinuxやWindowsにはSSMエージェントは事前にインストールされています。
なのでこのイメージに割くほど作成したロールを付与してSSMへのアクセスができ
条件が整います。
※画像は割愛します。
Amazon Linuxは「Amazon Linux 2 AMI (HVM), SSD Volume Type」
Windowsは「Microsoft Windows Server 2019 Base」
VPC・セキュリティグループはデフォルトでも大丈夫です。（パブリックサブネットに作ってください）

※私はマネージドインスタンスが表示されないということが発生していて
調べていると以下AWSの公式サイトでも同様の問題がありました。
[AWS公式ドラブルシューティング](https://aws.amazon.com/jp/premiumsupport/knowledge-center/systems-manager-ec2-instance-not-appear/)
[クラスメソッドさん](https://dev.classmethod.jp/articles/troubleshooting-ssm-session-manager-configuration/)

私の場合はパブリックサブネットではなくプライベートに作成してしまっていた為
インスタンスから SSM API への経路 ( HTTPS のアウトバウンドトラフィック)の確保がされているという
条件が満たしていませんでした。
プライベートサブネットに作成する場合はVPCエンドポイントなどを作成する必要があります。
[クラスメソッドさん解決策](https://dev.classmethod.jp/articles/tsnote-private-ec2-ssm-vpc-endpoint/)

## SSMマネージドインスタンスにRDP接続
作成したインスタンスがマネージドインスタンスの条件に満たしているので表示されています。
①windowにRDP接続をするためにノードアクション⇨RDPとの接続を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/6c74e33e-f248-59a3-8a07-1ded7eb2087f.png)

②設定したキーペアを使用して接続してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/b577a807-3427-8714-7961-52e810676bc4.png)

以下の画面が表示されたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/1db26643-2cb6-bace-7828-f34e83bc3490.png)

フリートマネージャーは SSM Agent を経由して RDP 接続を実現するため、インバウンドの SSH (TCP/22)、RDP (TCP/3389)のポート開放が必要ありません。
認証は IAM ユーザーの AWS マネジメントコンソールへのログインで行い、アクセス可能なサーバは IAM ポリシーで制御が可能です。


## セッションマネージャーでLinuxへのシェルアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/b43a1785-84fb-59a6-da49-3e98986f3bd8.png)
セッションマネージャーからLinuxのシェルにアクセスしコマンドを打ってみます。

```
sudo systemctl stop sshd.service
systemctl status sshd.service
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/c02879fb-2912-0686-9068-ca5c2bcefbe9.png)
sshdサービスが停止できたことが確認できました。

こちらもSSM Agent経由で直接シェルアクセスができました。

## プライベートサブネットに作成してみる
上記でプライベートサブネットにインスタンスを立ち上げてしまい
マネージドインスタンスとして表示されなかった問題について解決をします。

プライベートサブネットにあるインターネットアクセス出来ないEC2インスタンスをSSMで管理するには以下が必要になります。
・EC2インスタンスにSSMエージェントがインストールされていること
・SSMへのアクセスに必要なIAMロールがEC2インスタンスに関連付いていること
・VPCエンドポイントが設定されている

①同じ様に設定でプライベートサブネットにインスタンスを立ち上げます。
②VPCエンドポイントの作成でサービスカテゴリでAWSのサービスを選択し以下のサービスを選択し作成したインスタンスのあるサブネットを選択する。（この際VPCでDNS 名を有効化にチェック入れることを忘れない)
③マネージドインスタンスがあることを確認しセッションマネージャーでシェルにアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/931dd2fe-6eed-9f83-95dc-21ab58efa98a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621464/2349ee7d-cc3c-e3d2-7509-73599fdfc3b4.png)
sshdサービスが停止と開始のステータスを確認できました。
今回はプライベートサブネットに作成したインスタンスがSSM AgentからVPCエンドポイントを経由して直接シェルアクセスができました。

## 感想
SSM色々とあって使いこなせるとベンチだよなと思いますので
もっと触ってみようと思います。

## 参考記事
[AWS公式ドラブルシューティング](https://aws.amazon.com/jp/premiumsupport/knowledge-center/systems-manager-ec2-instance-not-appear/)
[クラスメソッドさん](https://dev.classmethod.jp/articles/troubleshooting-ssm-session-manager-configuration/)