Edited at

Session Manager で SSH/SCPをトンネリングしてEC2に接続する


はじめに

2019/7/9 に AWS Systems Manager Session Manager が SSHおよびSCP接続の

トンネリングをサポートしました。

これにより、踏み台サーバー等を使用せずに、Session Manager を介して対象のEC2や

マネージドインスタンスに接続することが可能になります。

Session Manager launches tunneling support for SSH and SCP

https://aws.amazon.com/about-aws/whats-new/2019/07/session-manager-launches-tunneling-support-for-ssh-and-scp/


やってみる

AWS Systems Manager 自体の説明は割愛させていただきます。


サーバー側の要件

SSM Agentのバージョンが 2.3.672.0 以上である必要があります。

バージョンが古い場合は、Systems Managerの Run Command を使用して

最新版にアップデートします。

image.png

コマンドの履歴でアップデートが正常終了していることを確認します。

image.png


クライアント側の要件

AWS CLI のバージョンが 1.16.12 以上である必要があります

その他に Session Manager Plugin のバージョンが 1.1.22.0 以上である必要があります

$ aws --version

aws-cli/1.16.195 Python/3.6.0 Windows/10 botocore/1.12.185

$ session-manager-plugin --version
1.1.23.0

バージョンが古い場合は以下のドキュメントに沿って最新版をインストールします。

(Optional) Install the Session Manager Plugin for the AWS CLI

https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

また使用するSSHクライアントが ProxyCommand をサポートしている必要があります。

私の環境はWindowsでしたので、OpenSSH + Git Bash を使用しました。

SSH の設定ファイル(~/.ssh/config)に以下の内容を追記します。

SSHコマンドで接続先ホスト名が i-(EC2インスタンス) または mi-(マネージドインスタンス)で

はじまる場合は aws ssm start-session コマンドを実行するという内容になっています。

# SSH over Session Manager

host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"


IAM ユーザーの要件

最低限、以下のドキュメントで紹介されているポリシーに記載された権限が必要となります。

Quickstart Default IAM Policies for Session Manager

https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html


接続する

SSHコマンドを実行する際にホスト名にインスタンスIDを指定すると以下のようにSSHで接続できます。

$ ssh -i ./my-key.pem ec2-user@i-0123456789abcdefg

Last login: Wed Jul 10 02:56:56 2019 from localhost

__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/

[ec2-user@ip-172-31-20-75 ~]$

Session Manger と SSM Agent を介して接続しているためだと思われますが、

接続元はlocalhost(127.0.0.1)になっています。

[ec2-user@ip-172-31-20-75 ~]$ sudo tail -3 /var/log/secure

Jul 10 04:26:20 ip-172-31-20-75 sshd[9269]: Accepted publickey for ec2-user from 127.0.0.1 port 41360 ssh2: RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx
Jul 10 04:26:20 ip-172-31-20-75 sshd[9269]: pam_unix(sshd:session): session opened for user ec2-user by (uid=0)
Jul 10 04:31:50 ip-172-31-20-75 sudo: ec2-user : TTY=pts/0 ; PWD=/home/ec2-user ; USER=root ; COMMAND=/bin/tail -3 /var/log/secure


メリット


セキュリティグループでSSHを許可する必要がない

SSM Agent を介して通信するため、EC2としてはアウトバウンド通信でSSMのエンドポイントと

通信できればよいです。そのためセキュリティグループのインバウンドルールで

SSHのポートを開けておく必要がありません。

最近利用可能になった EC2 Instance Connect では EC2 Instance Connect が利用する

IPアドレス範囲 をセキュリティグループに明示的に追加する必要があります。


SCPも利用できる

Systems Manager のシェルセッションでは仕組み上、SCPの転送には対応できていませんでした。

この機能を使うとSCPによるファイル転送を行うことができます。

$ scp -i ./my-key.pem ./test.txt ec2-user@i-0123456789abcdefg:/tmp/test.txt

test.txt 100% 769 38.0KB/s 00:00


対応OSの幅が広い

EC2 Instance Connect は 2019/7/9 時点 で対応OSが限られています。


  • Amazon Linux 2(任意のバージョン)

  • Ubuntu 16.04以降

Session Managerを使用したSSH接続の場合、SSM Agent をインストール可能な

以下のLinux環境であれば利用することができます。


  • Amazon Linux and Amazon Linux 2

  • Ubuntu Server

  • Red Hat Enterprise Linux (RHEL)

  • CentOS

  • SUSE Linux Enterprise Server (SLES) 12

  • Raspbian

Manually Install SSM Agent on Amazon EC2 Linux Instances

https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html

またSystems Managerを利用して管理されているオンプレミスの

マネージドインスタンスに対しても利用可能です。

ただしAdvanced-Instances Tierで登録されている必要があります。

Step 7: (Optional) Enable the Advanced-Instances Tier

https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html


参考

Step 7: (Optional) Enable SSH Session Manager Sessions

https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html

Starting a Session (SSH)

https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-ssh

EC2 Instance Connect の特徴や注意点についてまとめてみる

https://qiita.com/hayao_k/items/7b44ed1cd11651272985

以上です。

参考になれば幸いです。