見出し画像

AWS Session Manager経由でEC2とRDSに接続してみた

そろそろVPNから脱却したいと思っていたが、なかなか時間が取れず、後回し後回しになっていた。
世の中はゼロトラストだと言って、境界防御を卒業しているのに。。。

ということで、今回試しにSession Managerを使ったEC2とRDSへの接続を試したのでメモしておく。

やりたいこと

シンプルに、以下のようにローカルマシンからSession Managerを経由して、EC2サーバとRDSインスタンスへ接続する。

SessionManagerを経由したAWSリソースへの接続

接続方法

  1. SessionManagerで踏み台サーバへ接続し、各EC2インスタンスへssh接続する。

  2. RDSインスタンスへはMysql Workbenchを使って接続する。

こんな具合になる。ポイントはRDSへのローカルアプリ(Mysql Workbench)からの接続が特殊といえば特殊だ。

接続方法1SessionManagerで踏み台サーバへ接続し、各EC2インスタンスへssh接続する。

  • 前提条件を満たす

公式ドキュメントにもまとまっているが、案外、前提条件が多い。

接続元となるローカルマシンにも、AWS CLI、SessionManager用のプラグインを導入する必要がる。詳細は、以下の公式ページを参照する。

  • 環境設定を行う。

前提条件を満たした上で、コマンドラインで以下のような環境設定を行う。

C:\Users\username> aws configure
AWS Access Key ID [None]: (自身のIAMユーザーの「アクセスキーID」を入力)
AWS Secret Access Key [None]: (自身のIAMユーザーの「シークレットアクセスキー」を入力)
Default region name [None]: (自身のリージョンを入力、東京だったら「ap-northeast-1」を入力)
Default output format [None]: json
  • Sessionトークンを取得する。

以下のコマンドでトークンを取得する。

C:\Users\username> aws sts get-session-token --serial-number arn:aws:iam::(アカウントID):mfa/(ユーザ名) --token-code (MFA端末のOTP)
  • EC2サーバへ接続する。

以下のコマンドで接続先サーバへ接続する。

C:\Users\username> aws ssm start-session --target (インスタンスID) --region (リージョン名)

Starting session with SessionId:(ユーザ名)-xxxxxxxxxxxxxxxx
sh-4.2$

前提条件がややこしいだけで、実際に整ってきたら接続は非常にシンプルだ。
ここまで来たら、各サーバへのsshは通常のやり方でOK。

接続方法2RDSインスタンスへはMysql Workbenchを使って接続する。

上記のような状態が作れていれば、基本的に追加の前提条件などはない。
ただ、Mysql Workbenchのようなクライアントツールからの接続を行うにはポートフォワードを利用することになるが、今年に入ってSessionManagerがリモートポートフォワードに対応したらしい。

つまり、以下のような図で表すことができる。

リモートポートフォワードを利用したRDSへの接続

これによって、プライベートネットワークにあるRDSに直接接続できる。
コマンドは以下の通り。
ただ、WindowsとMac環境ではコマンドが異なるので、注意が必要。実はここで、Mac用コマンドを投げまくって少々ハマった。

C:\Users\username> aws ssm start-session --target (EC2インスタンスID) --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters host="(RDSエンドポイント)",portNumber="3306",localPortNumber="3306"

Starting session with SessionId: (ユーザID)-xxxxxxxxxxxxxxxx
Port 3306 opened for sessionId (ユーザID)-xxxxxxxxxxxxxxxx
Waiting for connections...

コマンドプロンプトが上記の状態になったらすでにポートフォワードは開始されている状態となる。
あとはローカルのMysql Workbenchを立ち上げて、localhostに対して接続を行えば、AWSのプライベートネットワークにあるRDSに接続できる。
これは素晴らしい!!

この記事が気に入ったらサポートをしてみませんか?