EC2 RHEL9にSession Manager経由で接続を試してみた

# はじめに
メンバーの一人が構築したサーバーに自分のユーザーがないため、サーバーにSSH接続出来ないことがあります。
そういう時に役に立つのがSession Manager経由で接続です。

AWSはOSによってSSM Agentがデフォルトで入っていない場合があります。
EC2 RHEL9にSession Manager経由で接続を試してみたため、記事にしました。

RHEL9はデフォルトでSSM Agentが入っていません。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-rhel.html


# 接続方法

### SSMのロールを作成する
サービス >> IAM >> 左ペインのロールを選択する。
[ロールを作成]をクリックする。
以下の設定でロールを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/c036af80-fe2c-6ce7-24f4-9387c8c7007b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/34769ab6-f177-fc47-2a9d-708592a88395.png)

### EC2にロールを割り当てる
サービス >> EC2 >> インスタンスをクリックする。
対象のEC2にチェックを入れて[インスタンスの状態] >> セキュリティ >> IAMロールを変更をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/4b0a3425-8d36-7913-322c-662061244d56.png)

作成したロールを選択して[IAMロールの更新]をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/d3be3d1c-2475-ce54-ba21-1f843f164eb1.png)

### EC2にセッションマネージャに接続を試す
接続ボタンをクリックしてセッションマネージャを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/000add49-0659-c62a-1859-8c4a2a6d9784.png)

セッションマネージャの接続ボタンが非活性になっているため、押せない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/ca9c9760-3be2-39ec-719d-e89246c50621.png)


### サーバーに入ってSSM Agentをインストールする
```
# sudo dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
```

```
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)                                           48 MB/s |  27 MB     00:00
Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)                                              39 MB/s |  15 MB     00:00
Red Hat Enterprise Linux 9 Client Configuration                                                              32 kB/s | 3.7 kB     00:00
amazon-ssm-agent.rpm                                                                                        4.7 MB/s |  25 MB     00:05
Dependencies resolved.
============================================================================================================================================
 Package                              Architecture               Version                             Repository                        Size
============================================================================================================================================
Installing:
 amazon-ssm-agent                     x86_64                     3.2.1798.0-1                        @commandline                      25 M

Transaction Summary
============================================================================================================================================
Install  1 Package

Total size: 25 M
Installed size: 105 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: amazon-ssm-agent-3.2.1798.0-1.x86_64                                                                               1/1
  Preparing        :                                                                                                                    1/1
  Running scriptlet: amazon-ssm-agent-3.2.1798.0-1.x86_64                                                                               1/1
  Installing       : amazon-ssm-agent-3.2.1798.0-1.x86_64                                                                               1/1
  Running scriptlet: amazon-ssm-agent-3.2.1798.0-1.x86_64                                                                               1/1
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-ssm-agent.service → /etc/systemd/system/amazon-ssm-agent.service.

  Verifying        : amazon-ssm-agent-3.2.1798.0-1.x86_64                                                                               1/1
Installed products updated.

Installed:
  amazon-ssm-agent-3.2.1798.0-1.x86_64

Complete!

```

### サーバーに入ってSSM Agentのサービスのステータスを確認する。
```
# systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
     Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-11-25 00:57:20 UTC; 39s ago
   Main PID: 4011 (amazon-ssm-agen)
      Tasks: 16 (limit: 4269)
     Memory: 27.9M
        CPU: 422ms
     CGroup: /system.slice/amazon-ssm-agent.service
             tq4011 /usr/bin/amazon-ssm-agent
             mq4081 /usr/bin/ssm-agent-worker

Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [EC2Identity] EC2 registratio>
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [amazon-ssm-agent] Registrati>
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [CredentialRefresher] credent>
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [CredentialRefresher] Startin>
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO EC2RoleProvider Successfully >
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [CredentialRefresher] Credent>
Nov 25 00:57:20 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:20 INFO [CredentialRefresher] Next cr>
Nov 25 00:57:21 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:21 INFO [amazon-ssm-agent] [LongRunni>
Nov 25 00:57:21 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:21 INFO [amazon-ssm-agent] [LongRunni>
Nov 25 00:57:21 ip-10-0-5-31.ap-northeast-1.compute.internal amazon-ssm-agent[4011]: 2023-11-25 00:57:21 INFO [amazon-ssm-agent] [LongRunni
```
### 再度、EC2にセッションマネージャに接続を試す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/eea88465-9827-bfb4-eacf-aa77721cd9f9.png)

セッションマネージャタブを選択して[接続]をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/e434d342-d4ba-d9f4-66c7-a61e908074c2.png)

接続出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/08921bcc-f6e5-25e4-a5b5-1424cf00ce0b.png)



#### 補足
##### セッションマネージャにて新しいユーザーと鍵を設定する
##### testユーザー作成
```
# useradd test
```
##### フォルダへ移動する
```
# cd /home/test
```
##### ec2-userの.sshフォルダをコピーする
※今回のみ鍵はec2-userと同じにする
```
# cp -p -r /home/ec2-user/.ssh .
```
##### .sshフォルダの権限をtestに変更する
```
# chown -R test:test .ssh
```
```
# cd /home/ec2-user/.ssh
# ls -tlr
total 4
-rw-------. 1 test test 96 Nov 25 00:47 authorized_keys
```
##### sudoの権限を付与する
以下のコマンドを実行してsudoの設定を確認する。
sudoはwheelグループが許可されていることを確認する。
```
# visudo
```
```
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
```


testユーザーをwheelグループに所属させる。
```
# usermod -G wheel test
```
testユーザーがwheelグループに所属したことを確認する。
```
# id test
uid=1002(test) gid=1002(test) groups=1002(test),10(wheel)
```
testユーザーにパスワード設定する
```
# passwd test
Changing password for user test.
New password:
Retype new password:
```
##### 作成したユーザーにログインを試す
ec2-userの秘密鍵とtestユーザーでSSH接続出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/76a4672b-e917-a1db-69fa-697205e25f15.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/944bc27b-66c2-fd33-6d26-537ecd1ef1d7.png)

### プライベートサブネットのEC2も同様にセッションマネージャで接続してみた
#### SSM Agentをインストールする
プライベートサブネットにあるEC2は外に出れないため、踏み台サーバーでssm agentのパッケージをダウンロードした
yumdownloaderコマンドは以下のサイトを参考にしました。
https://nandakagoodvibes.hatenablog.com/entry/2020/11/30/233046#:~:text=%E3%83%91%E3%83%83%E3%82%B1%E3%8[…]81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82

```
# yumdownloader --resolve --destdir /tmp https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
```
```
Last metadata expiration check: 0:27:53 ago on Sat 25 Nov 2023 01:40:47 AM UTC.
amazon-ssm-agent.rpm                                                                                        4.8 MB/s |  25 MB     00:05
[root@ip-10-0-5-31 tmp]#
```
プライベートサブネットのEC2にダウンロードしたrpmパッケージをコピーした
```
# scp -i 秘密鍵.pem /tmp/amazon-ssm-agent.rpm ec2-user@10.0.132.1:/tmp
```
```
amazon-ssm-agent.rpm                                                                                      100%   25MB 176.6MB/s   00:00
```
プライベートサブネットのEC2にSSH接続してコピーしたssm agentのパッケージをインストールした
```
# rpm -ivh /tmp/amazon-ssm-agent.rpm
```
```
warning: /tmp/amazon-ssm-agent.rpm: Header V4 RSA/SHA1 Signature, key ID 97dd04ed: NOKEY
Preparing...                          ################################# [100%]
        file /etc/amazon/ssm/RELEASENOTES.md from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/amazon-ssm-agent from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/ssm-agent-worker from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/ssm-cli from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/ssm-document-worker from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/ssm-session-logger from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
        file /usr/bin/ssm-session-worker from install of amazon-ssm-agent-3.2.1798.0-1.x86_64 conflicts with file from package amazon-ssm-agent-3.2.1705.0-1.amzn2.x86_64
```

SSM Agentのサービスのステータスを確認した
```
# systemctl status amazon-ssm-agent
```
```
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2023-11-25 01:39:32 UTC; 32min ago
 Main PID: 3128 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           mq3128 /usr/bin/amazon-ssm-agent

Nov 25 02:04:26 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: caused by: Post "https://ssm.ap-northeast-1.amaz...out
Nov 25 02:04:26 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:04:26 INFO [Registrar] sleeping fo...ion
Nov 25 02:09:23 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:09:23 INFO [EC2Identity] Checking ...nfo
Nov 25 02:09:23 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:09:23 INFO [EC2Identity] No regist...ion
Nov 25 02:09:24 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:09:23 INFO [EC2Identity] Found reg...eys
Nov 25 02:09:24 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:09:23 INFO [EC2Identity] Checking ...ing
Nov 25 02:09:24 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:09:23 INFO [EC2Identity] Registeri...ger
Nov 25 02:11:31 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:11:31 ERROR [Registrar] failed to ...led
Nov 25 02:11:31 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: caused by: Post "https://ssm.ap-northeast-1.amaz...out
Nov 25 02:11:31 ip-10-0-132-1.ap-northeast-1.compute.internal amazon-ssm-agent[3128]: 2023-11-25 02:11:31 INFO [Registrar] sleeping fo...ion
Hint: Some lines were ellipsized, use -l to show in full.
[root@ip-10-0-132-1 tmp]#
```
**セッションマネージャに接続できないことが判明しました。**
#### 今回はNatGatewayを作成しよう
踏み台サーバーがあるパブリックサブネットにNatGatewayを作成した。
その後、プライベートサブネットのルートテーブルにNatgateway経由で0.0.0.0(外に出る)設定を入れた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/c93a25e5-82ea-9f44-197b-efe99b7a0448.png)


セッションマネージャを開き、接続ボタンを押下した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/d7898785-326a-0eec-5660-ec002aada5e6.png)
接続出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/b6d17c3a-4f17-9b1c-0ca9-e5a17bbd2538.png)

# まとめ
セッションマネージャ経由でEC2に接続するにはSSM agentのパッケージが入っている必要があります。セッションマネージャはSSM Agentに接続出来るようにしないと使用出来ません。
手段の一つとしてプライベートサブネットにあるサーバーの場合はNatGatewayの使用する方法と
VPCエンドポイントを使用する方法があります。
NatGatewayは料金がかかるため、気になる方はVPCエンドポイントを使用をしてください。