0

Belajar Cloud AWS – Mengakses RDS MySQL pada private subnet menggunakan Bastion Host

Bastion host merupakan sebuah server yang digunakan untuk memforward traffic dari eksternal (internet) ke internal network (private subnet). Bastion host bisa dibilang server penghubung antara jaringan eksternal dan internal.

Dengan bastion host kita bisa mengakses jaringan internal (private subnet) dalam cloud AWS yang tidak bisa diakses secara langsung dari internet.

Contohnya database, yang biasanya ditaruh di private subnet. Database hanya bisa diakses dari dalam jaringan internal saja. Untuk bisa diakses dari internet, kita bisa gunakan bastion host sebagai penghubung ke jaringan internal.

Contoh Kasus

Disini kita akan buat bastion host agar user bisa mengakses RDS (Relational Database Service) MySQL yang berada pada private subnet.

Bastion Host aws

Penjelasan:

  • User ingin mengakses RDS MySQL (warna hijau) yang berada di Private Subnet
  • User tidak bisa langsung mengakses MySQL tersebut, karena server MySQLnya berada di jaringan private (private subnet)
  • Solusinya, user harus connect dulu ke bastion host (warna biru) yang ada di public subnet melalui internet gateway AWS
  • Kemudian bastion host ini akan meneruskan request user ke server MySQL tersebut. Disini bastion host bertindak sebagai penghubung antara user dengan server yang ingin diakses

Tujuan dibuat Bastion Host

  • Menyediakan akses ke jaringan private dari internet
  • Sebagai firewall mengecek semua request dari internet sebelum masuk ke internal network

Cara membuat Bastion Host

Untuk membuat bastion host, kita memerlukan sebuah server EC2 yang berada di public subnet. Jadi kita buat dulu servernya.

Membuat Server EC2 untuk Bastion Host

  • Masuk ke dashboard EC2
  • Pada kanan atas, klik tombol Launch instances untuk membuat server
  • Masukkan:
    • Name and tags: Bastion host server
    • Application & OS Images: Pilih Ubuntu (Saya menggunakan Ubuntu 22.04) dan architecture 64-bit (x86)
    • Instance Type: t3.micro
    • Key Pair: Buat keypairnya dengan mengklik create new key pair (ini digunakan untuk login ke server nanti menggunakan SSH & konfigurasi bastion host). Buat keypairnya menggunakan RSA dengan format .pem / .ppk. Download file keypair/private key tersebut (misal bastion-host.pem)
    • Network settings, Klik edit
      • Pilih VPC yang sama dengan RDS MySQL berada
      • Pada subnet, pilih subnet yang public
      • Create Security group
        • Pada Inbound rules, pastikan port 22 sudah ditambahkan dengan protocol TCP, source 0.0.0.0/0. Nantinya user akan menggunakan port ini melalui bastion host untuk connect ke RDS MySQL, menggunakan metode MySQL SSH Tunnel dari sisi client
    • Klik Lauch Instance

Bastion Host aws

Konfigurasi Bastion Host

Setelah server EC2 untuk bastion host sudah terbuat, sekarang kita tinggal setup.

  • Masuk ke server bastion host melalui SSH
ssh -i test-bastion.pem ubuntu@54.209.86.229
  • Jika sudah masuk, jalankan command berikut untuk memforward traffic dari internet ke server RDS MySQL menggunakaan SSH port forwarding
ssh -i bastion-host.pem -fN -l ubuntu -L 3306:database-1-test.ccqx7r3uxszg.us-east-1.rds.amazonaws.com:3306 54.209.86.229 -v

Penjelasan:

  • bastion-host.pem = private key server bastion host
  • -fN = (f) menjalankan ssh di background, (N) jangan jalankan remote command
  • -l ubuntu = username server bastion host
  • -L 3306:database-1-test.ccqx7r3uxszg.us-east-1.rds.amazonaws.com:3306 54.209.86.229
    • Port 3306 merupakan local port bastion host
    • database-1-test.ccqx7r3uxszg.us-east-1.rds.amazonaws.com dan 3306 merupakan URL endpoint & port pada RDS MySQL
    • IP 54.209.86.229 merupakan IP public server bastion host
  • -v = tampilkan debug mode diterminal

Jika setelah menjalankan command tersebut ada pertanyaan seperti ini, masukkan yes

Are you sure you want to continue connecting (yes/no/[fingerprint])?

Jika berhasil tampilannya akan seperti ini:

bastion host pada AWS

Test Koneksi MySQL melalui server bastion host

Sekarang kita coba connect ke RDS MySQL tersebut melalui server bastion host. Caranya dengan menggunakan metode MySQL SSH Tunnel.

Disini saya menggunakan HeidiSQL untuk mengetestnya. Jika menggunakan navicat atau MySQL Client lainnya harusnya tidak banyak perbedaan.

  • Buat koneksi baru di heidiSQL, saya beri nama test – bastion host
  • Pada Network Type, pilih MariaDB or MySQL (SSH Tunnel)
  • Hostname/IP: 127.0.0.1
  • username: masukkan username MySQL
  • password: masukkan password MySQL
  • port: masukkan port MySQL
  • Pada tab SSH tunnel, konfigurasikan:
    • SSH executable: plink.exe
    • SSH host + port: 54.209.86.229 + 22
    • Username: username pada server bastion host
    • Private key file: masukkan private key pada server bastion host (bastion-host.ppk)
    • Port: 3306 – port local bastion host
bastion host pada AWS, Msql ssh tunnel

Jika berhasil login ke mysql, maka tampilannya akan seperti ini:

bastion host pada AWS

Dan jika kita cek di server bastionnya, akan ada log port forwardingnya


Catatan

Untuk mengconvert .pem ke .ppk bisa menggunakan command berikut:

sudo apt-get update
sudo apt install putty-tools
puttygen bastion-host.pem -O private -o bastion-host.ppk

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.