🔐
Session Manager経由でSSH接続する方法
今回は Session Manager を使って EC2 に SSH 接続する方法をご紹介します。
対象の EC2 がパブリックサブネットにいる場合(Internet Gateway がある場合)と、プライベートサブネット上にいる場合の 2 種類の設定方法を記載します。
- 構成図(まず左のパブリックサブネットからやってみて、その後プライベートサブネットでやってみます)
パブリックサブネットでやってみる
- IAM ロールを作っておく。
-
AmazonSSMManagedInstanceCore
のポリシーを含むロールを作成します。
-
- 対象の EC2 を選択し、
アクション -> セキュリティ -> IAMロールを変更
をクリックして今作ったロールを割り当てます。
- EC2 から SSM と通信できているか確認します。(以下は telnet で確認する例。)
EC2上のターミナル
telnet ssm.ap-northeast-1.amazonaws.com 443
telnet ec2messages.ap-northeast-1.amazonaws.com 443
telnet ssmmessages.ap-northeast-1.amazonaws.com 443
# 成功した接続の例)
root@111800186:~$ telnet ssm.us-east-1.amazonaws.com 443
Trying 52.46.141.158...
Connected to ssm.us-east-1.amazonaws.com.
Escape character is '^]'.
Telnet を終了するには、Ctrl キーを押しながら、] キーを押します。quit と入力し、Enter キーを押します。
参考:Amazon EC2 インスタンスが Systems Manager コンソールの [マネージドインスタンス] に表示されない理由のトラブルシューティング
- ローカルマシンに Session Manager プラグインをインストールします(以下は MacOS での例)。
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/session-manager-plugin.pkg" -o "session-manager-plugin.pkg"
sudo installer -pkg session-manager-plugin.pkg -target /
sudo ln -s /usr/local/sessionmanagerplugin/bin/session-manager-plugin /usr/local/bin/session-manager-plugin
参考:(オプション) AWS CLI 用の Session Manager プラグインをインストールする - AWS Systems Manager
- ひとまず Session Manager で接続してみます。
% aws ssm start-session --target i-XXXXXXXXXXXXXXX
Starting session with SessionId: awscli-user-XXXXXXXXXXXXXXXXX
sh-4.2$
-
System Manager -> Session Manager
の画面で以下のようにセッションができていたら OK
- ssh を Session Manager 経由にするために、ローカルマシンの
.ssh/config
に以下を追記します。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
- ssh で接続してみます。接続するホスト名はインスタンス ID を指定します。
% ssh ec2-user@i-XXXXXXXXXXXXXXX -i .ssh/<your key>
The authenticity of host 'i-XXXXXXXXXXXXXXX (<no hostip for proxy command>)' can't be established.
ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:43: XXX.XXX.XXX.XXX
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'i-XXXXXXXXXXXXXXX' (ED25519) to the list of known hosts.
Last failed login: Wed Feb 23 13:47:13 UTC 2022 on pts/0
There was 1 failed login attempt since the last successful login.
Last login: Wed Feb 23 13:31:02 2022 from xxxxxxxx.xxxxxx.xx.xxxx.jp
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-142 ~]$
- 試しに Port:22 を閉じてみます。
- 再度接続してみて、ちゃんと接続されることを確認。
% ssh ec2-user@i-XXXXXXXXXXXXXXX -i .ssh/<your key>
Last login: Wed Feb 23 13:49:33 2022 from localhost
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-142 ~]$
これでパブリックサブネットの場合は完了。
プライベートサブネットにしてみる
以下の公式ドキュメントにしたがって実施します。
ステップ 6: (オプション) AWS PrivateLink を使用して Session Manager の VPC エンドポイントを設定する - AWS Systems Manager
- 先に VPC の DNS ホスト名有効化しておきます。
- DNS ホスト名の有効化を行ったあと、プライベート VPC からのアクセスを確認するために EC2 を一旦停止して、VPC からインターネットゲートウェイをデタッチします。
- EC2 のセキュリティグループのインバウンドルールで
タイプ : HTTPS
、ソース : カスタム -> VPCのCIDR
を追加します。
- 次にエンドポイントを 3 つ作成します。
- まず ssm のエンドポイントに対して作成します。
VPC -> エンドポイント -> エンドポイントを作成
をクリックし、適当に名前をつけサービスカテゴリ
をAWSのサービス
にします。
- まず ssm のエンドポイントに対して作成します。
- サービス選択画面で
com.amazonaws.ap-northeast-1.ssm
を選択します。(リージョンが異なる場合は該当のリージョンを選択)
- EC2 が存在する VPC を選択し AZ を選択、サブネットを選択します。
- セキュリティグループを選択し、
エンドポイントを作成
をクリックします。
- 同様にしてあと 2 つ作成します。サービス:
com.amazonaws.ap-northeast-1.ec2messages
- サービス:
com.amazonaws.ap-northeast-1.ssmmessages
- 再度接続してみて、ちゃんと接続されることを確認します。
% ssh ec2-user@i-XXXXXXXXXXXXXXX -i .ssh/<your key>
Last login: Wed Feb 23 13:49:33 2022 from localhost
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-142 ~]$
これでプライベートサブネットからもアクセス可能となりました 🎉
Discussion