Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

以上です。
参考になれば幸いです。

hayao_k
インフラ大好きです。2019 & 2020 APN AWS Top Engineers に選出いただきました。 掲載内容は個人の見解であり、所属する企業を代表するものではありません。
saison_information_systems
モード1(守りのIT)・モード2(攻めのIT)を兼ね備えたバイモーダル・インテグレーターとしてデータ連携プラットフォームのHULFTシリーズ, リンケージサービス, 流通ITサービス, フィナンシャルITサービスを提供します。
https://home.saison.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした