Skip to content

A tool for direct access to resources in AWS VPC subnets from local PCs through port forwarding to remote hosts by AWS SSM.

License

Notifications You must be signed in to change notification settings

go-to-k/bastion-tunnel

Repository files navigation

bastion-tunnel

解説記事をブログに載せております。→ECS FargateでSSMセッションマネージャーのリモートホストのポートフォワード環境を構築する

【概要】

AWSのサブネット(プライベート含む)内にあるリソースに、リモートホストへのポートフォワードを通して、ローカルPC(Mac)から直接アクセス(トンネリング)するためのツール。

例えば、ローカルPCのターミナルから、プライベートサブネット内のEC2・RDS・AuroraなどのMySQLやPostgreSQLに直接アクセスしたりできるようになります。

【アーキテクチャ】

architecture

【前提(ローカルPC環境)】

Macを想定しています。

以下のインストールをしてください。

AWS CLI (v2)

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

sudo installer -pkg ./AWSCLIV2.pkg -target /

Session Manager プラグイン

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

jq

brew install jq

【デプロイ】

VPC、サブネット情報を埋める

  • 03_deploy_ecs.shVPC_IDSUBNET_ID1SUBNET_ID2に自環境のVPC情報を記入する
    VPC_ID="vpc-*****************"
    SUBNET_ID1="subnet-*****************"
    SUBNET_ID2="subnet-*****************"

デプロイする

【使い方】

■初期化(初回のみ)

本リポジトリをクローンしてリポジトリの直下に移動し、以下コマンドを叩くことで、本ツールスクリプトのパスが通ります。

(ツールを叩く際にパスを指定せず、コマンドとして使用できるようになります。)

cd bastion-tunnel
sh init.sh

# どのパスでも以下コマンドが叩けるようになります
tunnel

■スクリプト内で接続先情報を埋めておく(任意)

  • tunnel.shで接続先のRDSなどのホストやポートを記入しておくと、オプションなしでも決めたターゲットにアクセスできて便利です。(コマンド実行時のオプションでも指定可能です。)
    • LOCAL_DB_PORT="13306"
    • TARGET_DB_PORT="3306"
    • TARGET_HOST="abcde.cluster-1234567890.ap-northeast-1.rds.amazonaws.com"

■トンネルコマンド(毎回)

  • コマンド
    • tunnel
  • オプション
    • -p : AWSプロファイル
      • デフォルト : 空
    • -l : ローカルポート
      • デフォルト : 13306
    • -t : ターゲットポート(リモートポート)
      • デフォルト : 3306
    • -h : ターゲットホスト
      • デフォルト : abcde.cluster-1234567890.ap-northeast-1.rds.amazonaws.com
    • -r : ECSを構築したAWSリージョン
      • デフォルト : ap-northeast-1
## デフォルト値
### ローカルポート:13306
### ターゲットポート:3306

# デフォルトのAWSクレデンシャル(プロファイル)を使う場合
tunnel

# AWSプロファイルを指定する場合
tunnel -p profile

# ローカルポートを13306から変える場合
tunnel -l 15432

# ターゲットポートを3306から変える場合(PostgreSQLなど)
tunnel -t 5432

# ターゲットのホストを指定する場合
tunnel -h fghij.cluster-1234567890.ap-northeast-1.rds.amazonaws.com

# リージョンを東京リージョン以外でデプロイした場合
tunnel -r us-east-1

# オプションは複数指定可能
tunnel -l 15432 -t 5432 -p profile


# 数秒待つとリモートホストへのポートフォワードがされ、DBなどへの接続が可能になります
mysql -u my_user -p -h 127.0.0.1 -P13306

■自動切断

tunnelコマンド使用後、30分経過したら自動で切断されます。

都度tunnelコマンドを投げ直して下さい。

タイムアウト情報はsessionManagerRunShell.jsonファイルで変更できます。

  • idleSessionTimeout
  • maxSessionDuration

■接続ログ

./tunnel_logs直下にログが溜まります。

また、tunnelコマンドを叩いた際に、1日以上前に作られたログファイルは自動で削除されます。

    • 2022_0607_171808.log
    • 2022_0607_174822.log
    
    Starting session with SessionId: goto-06dc86f29feabc116
    Port 13306 opened for sessionId goto-06dc86f29feabc116.
    Waiting for connections...
    
    Connection accepted for session [goto-06dc86f29feabc116]
    

About

A tool for direct access to resources in AWS VPC subnets from local PCs through port forwarding to remote hosts by AWS SSM.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published