はじめに
メンバーの一人が構築したサーバーに自分のユーザーがないため、サーバーに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 >> 左ペインのロールを選択する。
[ロールを作成]をクリックする。
以下の設定でロールを作成しました。
EC2にロールを割り当てる
サービス >> EC2 >> インスタンスをクリックする。
対象のEC2にチェックを入れて[インスタンスの状態] >> セキュリティ >> IAMロールを変更をクリックする。
作成したロールを選択して[IAMロールの更新]をクリックする。
EC2にセッションマネージャに接続を試す
セッションマネージャの接続ボタンが非活性になっているため、押せない。
サーバーに入って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にセッションマネージャに接続を試す
補足
セッションマネージャにて新しいユーザーと鍵を設定する
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接続出来ました。
プライベートサブネットの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(外に出る)設定を入れた。
セッションマネージャを開き、接続ボタンを押下した
接続出来ました。
まとめ
セッションマネージャ経由でEC2に接続するにはSSM agentのパッケージが入っている必要があります。セッションマネージャはSSM Agentに接続出来るようにしないと使用出来ません。
手段の一つとしてプライベートサブネットにあるサーバーの場合はNatGatewayの使用する方法と
VPCエンドポイントを使用する方法があります。
NatGatewayは料金がかかるため、気になる方はVPCエンドポイントを使用をしてください。