Skip to content

sekijum/bastion_tunnel

Repository files navigation

bastion-tunnel

【概要】

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

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published