概要
ローカルマシンからプライベートサブネット内のEC2インスタンスへポートフォーワーディング接続を行い、ローカルマシンにインストールされた「pgAdmin 4」を使用して、Aurora PostgreSQLへ接続する手順について記載します。
前提
- ローカルマシンにAWS CLIがインストール済みである事。
- ローカルマシンにアクセスキー・シークレットキーおよび環境変数「AWS_PROFILE」が設定済みである事。
- ローカルマシンにpgAdmin 4がインストール済みである事。
- EC2インスタンスにSSMエージェントがインストール済みである事。
- EC2インスタンスにIAMポリシー「AmazonEC2RoleforSSM」がアタッチ済みである事。
準備
以下のリンクからSessionManagerPluginのダウンロード、またはコマンドを実行してローカルマシンにセッションマネージャー用プラグインをセットアップ
Windowsの場合
Macの場合
$ brew install --cask session-manager-plugin
$ session-manager-plugin --version
1.2.463.0
VPCエンドポイントの作成
EC2インスタンスが属するプライベートサブネットに以下のVPCエンドポイント群を作成
- ssm.<AWSリージョン>.amazonaws.com
- ssmmessages.<AWSリージョン>.amazonaws.com
- ec2messages.<AWSリージョン>.amazonaws.com
秘密鍵・公開鍵の作成
以下のコマンドで秘密鍵および公開鍵を生成、.sshディレクトリに配置
$ ssh-keygen -t rsa -b 4096
$ mv ~/.ssh/id_rsa ~/.ssh/<秘密鍵名>.pem ← 任意の秘密鍵名に変更
$ mv ~/.ssh/id_rsa.pub ~/.ssh/<公開鍵名>.pub ← 任意の公開鍵名に変更
上記コマンドはmacOS環境に最適化されています。ご利用のOSに合わせてコマンドを適宜変更してください。
パーミッション変更
以下のコマンドで秘密鍵のパーミッションを変更
$ chmod 600 ~/.ssh/<秘密鍵名>.pem
$ chmod 600 ~/.ssh/<公開鍵名>.pub
上記コマンドはmacOS環境に最適化されています。ご利用のOSに合わせてコマンドを適宜変更してください。
SSH用のコンフィグ設定
以下の構文を".ssh/config"の末尾に記載
host i-* mi-*
User <OSユーザー名>
Hostname %h
Port 22
ProxyCommand sh -c "aws ec2-instance-connect send-ssh-public-key --instance-id %h --availability-zone ap-northeast-1a --instance-os-user <OSユーザー名> --ssh-public-key file://~/.ssh/<公開鍵名>.pub && aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
IdentityFile ~/.ssh/<秘密鍵名>.pem
上記コマンドの例ではAZ「ap-northeast-1a」を指定していますが、EC2インスタンスの存在するAZに合わせて変更してください。
ポートフォーワーディング接続
以下のコマンドでAurora PostgreSQLにポートフォーワーディング接続します。
$ ssh -fNL 15432:<接続先DBエンドポイント>:5432 -i "~/.ssh/<秘密鍵名>.pem" <EC2インスタンスID>
上記コマンドの例ではローカルマシンのポートは「15432」でリッスン、接続先DBエンドポイントへはポート「5432」で接続しています。
pgAdmin 4の接続設定
ローカルマシンにインストールした「pgAdmin 4」を起動して、以下の画像の通り「Host name/address」に「localhost」、「Port」に「15432」を入力、Saveを実行して下さい。
Connectionタブ |
---|
ポートフォーワーディング切断
以下のコマンドでポートフォーワーディングを実行しているSSHのプロセスIDを特定して、killコマンドを実行するとSSHポートフォーワーディングを切断できます。
$ ps -ef | grep -v grep | grep '\-fNL'
11677692 <プロセス番号> 1 0 4:33PM ?? 0:00.01 ssh -fNL 15432:<接続先DBエンドポイント>:5432 -i ~/.ssh/<秘密鍵名>.pem <インスタンスID>
$ kill <プロセス番号>
上記コマンドはmacOS環境に最適化されています。ご利用のOSに合わせてコマンドを適宜変更してください。