0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VPC内のDBアクセスするため踏み台(BASTION)サーバをawscliで用意

Last updated at Posted at 2019-02-06

こちらの資料を参考しながらこの手順を用意しました。
https://docs.aws.amazon.com/quickstart/latest/linux-bastion/

  1. 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
    
  2. 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で絞るべき

  3. 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"
    
  4. 現状の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)
    
  5. 踏み台用の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}
    
  6. 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があるように接続する

  1. 自分のPCからTunnel貼る:

    postgresqlを使用例

    # LOCAL_PORT:REMOTE_ADDRESS:REMOTE_PORT
    ssh -nNT -L 5432:{VPC内のRDSIPADDRESS}:5432 -i ~/.ssh/bastion.pem ubuntu@{IP ADDRESS} &
    
  2. 自分のPCからDBにへ接続:

    pgcli postgresに接続できる簡易CLI

    pgcli -h 127.0.0.1 -p 5433 -d annotation_tool -U readonly -W
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?