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

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

今更ながらこれやってみる

セッションマネージャーが SSH と SCP のトンネリングサポートを開始

これができることで

セキュリティグループで SSH 22番ポートを開ける必要がなくなり、踏み台も不要、 EIP も不要になるので、コスト削減につながりますよね。

前提

今回の手順は Client: Mac, Server: Amazon Linux 2 で実施する場合。

Client

Server

  • ssm agent 2.3.672.0以上
  • AmazonEC2RoleforSSM の IAM Role がインスタンスにアタッチされていること

Client の設定

awscli

適宜、前提バージョンの awscli をインストール/アップデートする。

Session Manager Plugin

バージョン確認

$ session-manager-plugin --version

インストール/アップデート

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin 

(オプション) AWS CLI 用の Session Manager Plugin をインストールする

SSH ファイルの設定

適当に名前つけて設定入れる。

~/.ssh/config
Host matsu-test
      Hostname i-XXXXXXXXXXXX
      User ec2-user
      IdentityFile ~/.ssh/matsu-test.pem
      ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

Server の設定

SSM エージェントをインストールする

SSM エージェント プリインストールされた AMI

SSM エージェント は、次の Amazon マシンイメージ (AMI) にデフォルトで事前インストールされています。とのこと。

  • 2016 年 11 月以降に公開された Windows Server 2003-2012 R2 AMI
  • Windows Server 2016 および 2019
  • Amazon Linux
  • Amazon Linux 2
  • Ubuntu Server 16.04
  • Ubuntu Server 18.04

SSM エージェント の使用

手動でインストールするなら

ssm-agent がインストール可能な下記の Linux OS

  • Amazon Linux および Amazon Linux 2
  • Ubuntu Server
  • Red Hat Enterprise Linux (RHEL)
  • CentOS
  • SUSE Linux Enterprise Server (SLES) 12
  • Raspbian

Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールする

SSM エージェントをアップデートする

バージョン確認

$ rpm -qi amazon-ssm-agent

起動時にインターネットにアクセスできるインスタンスなら

userdata に入れちゃう。

userdata
#!/bin/bash
yum update -y
yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

手動でアップデートするならこれだけ。

$ yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

セキュリティグループ

SSH 22番ポートを開けなくて良い。

SSH してみる

$ ssh matsu-test
The authenticity of host 'i-06a06ac4cebcc5301 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:3ZAr+OF/DACbhOWrOUxzjmwM/OFOhTQHUwxAAwVbDaI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'i-06a06ac4cebcc5301' (ECDSA) to the list of known hosts.

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

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-4-2-202 ~]$

SCP でファイル転送

普通にできる。

$ scp test.txt matsu-test:~/
test.txt                                                                                                                    100%    0     0.0KB/s   00:00

$ ssh matsu-test
Last login: Fri Nov 15 02:40:28 2019 from localhost

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

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

$ ll
合計 0
-rw-r--r-- 1 ec2-user ec2-user 0 11月 15 02:46 test.txt

PostgreSQL にポートフォワード

RDS PostgreSQL に対してポートフォワードし、ローカル環境から PostgreSQL に接続してみる。

RDS エンドポイントの 5432 ポートを ローカルの 9999 ポートに向ける。

$ ssh matsu-test -L 9999:matsuki-postgre.XXXXXXXXX.ap-northeast-1.rds.amazonaws.com:5432

ローカル環境から PostgreSQL に接続してみる。

$ psql -h 127.0.0.1 -p 9999 -U postgres
Password for user postgres:
psql (11.5)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=>

OK

Private なインスタンスの場合

Private Subnet に配置されたインスタンスはインターネット接続できないため、 Session Manager を利用できないが、 NAT GW を作成することで、インターネット向けの通信を通すことができるのでこれでいける。

NAT GWがなくても VPC エンドポイントがあればいける

VPC の設定確認

VPC の DNS 解決 および DNS ホスト名 を有効化する。

VPC エンドポイントを作成

以下を作成。

  • com.amazonaws.ap-northeast-1.ssm
  • com.amazonaws.ap-northeast-1.ssmmessages
  • com.amazonaws.ap-northeast-1.ec2messages

セキュリティグループ設定

インスタンスから VPC エンドポイントの SG への https (443) アクセスを許可する。
※VPC エンドポイントの SG をインスタンスと同じ SG で作成していれば、該当 SG 自身を全て許可するように設定すれば良い。

ステップ 6: (オプション) プライベートクラウドエンドポントの作成

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
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