![見出し画像](https://assets.st-note.com/production/uploads/images/95349688/rectangle_large_type_2_5e8c42bdbad4fc5b2fc26b9b835cd664.png?width=1200)
AWS Session Manager経由でEC2とRDSに接続してみた
そろそろVPNから脱却したいと思っていたが、なかなか時間が取れず、後回し後回しになっていた。
世の中はゼロトラストだと言って、境界防御を卒業しているのに。。。
ということで、今回試しにSession Managerを使ったEC2とRDSへの接続を試したのでメモしておく。
やりたいこと
シンプルに、以下のようにローカルマシンからSession Managerを経由して、EC2サーバとRDSインスタンスへ接続する。
![](https://assets.st-note.com/img/1668675929247-nkBM3u1oGe.png?width=1200)
接続方法
SessionManagerで踏み台サーバへ接続し、各EC2インスタンスへssh接続する。
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がリモートポートフォワードに対応したらしい。
つまり、以下のような図で表すことができる。
![](https://assets.st-note.com/img/1668689422642-ajBTnplaVt.png?width=1200)
これによって、プライベートネットワークにある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に接続できる。
これは素晴らしい!!
この記事が気に入ったらサポートをしてみませんか?