こちらの資料を参考しながらこの手順を用意しました。
https://docs.aws.amazon.com/quickstart/latest/linux-bastion/
-
keypair 用意
ないなら、EC2へアクセスできるようにKeyPairを作成します。
aws ec2 create-key-pair --key-name bastion-keypair --region ap-northeast-1
ローカルでPrivate Key
bastion.pem
を用意vi ~/.ssh/bastion.pem {上記で出力されたPRIVATE KEY情報をファイルに書き込む} # ファイル権限更新 sudo chmod 400 ~/.ssh/bastion.pem
-
Bastion用のSecurity Groupを作成
# Create security group aws ec2 create-security-group --group-name bastion-sg --vpc-id {使用するVPCID} --description "security group for basition instance(s) for acting as a intermediate jump of point for rds acccess"
注意:CIDRを適切なIPで絞るべき
-
SSHアクセスを許可
# Add authorization for ssh(port 22) to ingress aws ec2 authorize-security-group-ingress \ --group-id $(aws ec2 describe-security-groups --query 'SecurityGroups[?GroupName==`bastion-sg`].GroupId' --output text) \ --protocol tcp \ --port 22 \ --cidr "0.0.0.0/0"
-
現状のRDS Security Groupとの通信を許可
export EXISTING_RDS_SECURITY_GROUPID={RDS Security Group ID } aws ec2 authorize-security-group-ingress --group-id ${EXISTING_RDS_SECURITY_GROUPID} \ --protocol tcp \ --port 5432 \ --cidr "0.0.0.0/0" \ --source-group $(aws ec2 describe-security-groups --query 'SecurityGroups[?starts_with(GroupName, `bastion-sg`)].GroupId' --output text)
-
踏み台用のEC2を作成
ami-0f63c02167ca94956: Ubuntu 18.04 LTS
aws ec2 run-instances --image-id ami-0f63c02167ca94956 --count 1 --instance-type t2.micro --key-name bastion-keypair --security-group-ids $(aws ec2 describe-security-groups --query 'SecurityGroups[?starts_with(GroupName, `bastion-sg`)].GroupId' --output text) --subnet-id {PUBLIC SUBNET ID} --associate-public-ip-address # 出たインスタンスIDを使って、用意されるまで待つ aws ec2 wait instance-status-ok --instance-ids {INSTANCE ID}
-
SSHで踏み台(BASTION)サーバへアクセスして、DBに接続します。
# IPを取得 aws ec2 describe-instances --instance-id {INSTANCE_ID} --query "Reservations[*].Instances[*].PublicIpAddress" --output=text ssh -i ~/.ssh/bastion.pem ubuntu@{IP ADDRESS}
SSHで踏み台(BASTION)サーバにインストールしたいライブラリー・ツール
# Pythonツール系インストールできるように準備 sudo apt update sudo apt install python3-distutils curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py sudo python3 get-pip.py sudo apt install build-essential # python headersを取得(パッケージをビルド時に使用される) sudo apt install python3-dev # DBへ接続確認ために sudo python3 -m pip install pgcli
SSH Tunnelにより、同じPCにDBがあるように接続する
-
自分のPCからTunnel貼る:
postgresqlを使用例
# LOCAL_PORT:REMOTE_ADDRESS:REMOTE_PORT ssh -nNT -L 5432:{VPC内のRDSIPADDRESS}:5432 -i ~/.ssh/bastion.pem ubuntu@{IP ADDRESS} &
-
自分のPCからDBにへ接続:
pgcli postgresに接続できる簡易CLI
pgcli -h 127.0.0.1 -p 5433 -d annotation_tool -U readonly -W