Menyiapkan akses klien melalui alamat IP pribadi ke MySQL di Compute Engine


Tutorial ini membahas proses menjalankan database MySQL di jaringan pribadi di Google Cloud untuk memungkinkan akses jarak jauh yang aman ke database tersebut menggunakan Compute Engine.

Gunakan tutorial ini jika Anda ingin menginstal database MySQL sendiri di Compute Engine, tetapi ingin membatasi akses hanya untuk klien MySQL resmi yang juga berjalan di Compute Engine. Anda mungkin ingin mengelola instance MySQL sendiri daripada menggunakan layanan terkelola, karena instance lintas region, penggunaan parameter lanjutan, dan kebutuhan performa tertentu.

Tutorial ini menjelaskan cara mengonfigurasi aplikasi server MySQL untuk menerima traffic jarak jauh dari klien MySQL yang diinstal pada instance Compute Engine di jaringan pribadi yang sama.

Untuk mengetahui informasi tentang cara memilih opsi deployment MySQL yang tepat, lihat Cara menginstal MySQL di Compute Engine.

Tutorial ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:

  • Perintah Linux dasar
  • Ubuntu-server 18.04
  • MySQL 5.7
  • Compute Engine

Arsitektur

Dalam tutorial ini, Anda akan men-deploy dua instance Compute Engine. Satu instance adalah server dan instance lainnya adalah klien seperti yang ditunjukkan dalam diagram berikut:

Arsitektur dua instance yang di-deploy

Tujuan

  • Membuat instance Compute Engine dan menginstal server MySQL.
  • Membuat instance Compute Engine dan menginstal klien MySQL.
  • Mengonfigurasi server MySQL untuk akses jarak jauh.
  • Menghapus akses publik ke server MySQL.
  • Terhubung ke MySQL dari jarak jauh.
  • Membuat aturan firewall Kontrol Layanan VPC.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Compute Engine
  • Cloud Storage

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Compute Engine API.

    Enable the API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the Compute Engine API.

    Enable the API

Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Lihat Pembersihan untuk mengetahui detail selengkapnya.

Membuat instance Compute Engine

Buat dua instance untuk MySQL—klien dan instance server.

Membuat instance klien Compute Engine

  • Buat instance Compute Engine. Konfigurasikan instance sebagai berikut:
    • Beri nama instance my-client.
    • Tetapkan flag --zone ke zona tempat Anda ingin membuat instance.
    • Tetapkan tanda --image-project ke ubuntu-os-cloud.
    • Tetapkan tanda --image-family ke ubuntu-1804-lts.
    • Tetapkan --scopes flag ke https://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-client --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
  • Membuat instance server Compute Engine

  • Buat instance Compute Engine. Konfigurasikan instance sebagai berikut:
    • Beri nama instance my-server.
    • Tetapkan flag --zone ke zona tempat Anda ingin membuat instance.
    • Tetapkan tanda --image-project ke ubuntu-os-cloud.
    • Tetapkan tanda --image-family ke ubuntu-1804-lts.
    • Tetapkan --scopes flag ke https://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-server --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
  • Menginstal klien MySQL

    Langkah-langkah berikut menjelaskan cara menginstal MySQL pada instance Compute Engine.

    1. Untuk terhubung ke instance my-client, gunakan perintah ssh.
    2. Update pengelola paket apt-get.
      sudo apt-get update
      
    3. Instal paket klien MySQL.
      sudo apt-get -y install mysql-client-5.7

    Menginstal server MySQL

    Langkah-langkah berikut menjelaskan cara menginstal MySQL pada instance Compute Engine.

    1. Untuk terhubung ke instance my-server, gunakan perintah ssh.
    2. Update pengelola paket apt-get.
      sudo apt-get update
      
    3. Instal paket server MySQL.
      sudo apt-get -y install mysql-server-5.7

    Meningkatkan keamanan penginstalan MySQL

    Anda harus membuat sandi root untuk MySQL dan melakukan pemeliharaan keamanan dasar pada konfigurasi server MySQL Anda. Untuk mengetahui informasi selengkapnya, baca dokumentasi MySQL untuk mysql_secure_installation.

    1. Dalam sesi SSH ke instance my-server Anda, gunakan perintah berikut untuk meningkatkan keamanan penginstalan MySQL Anda.

      sudo mysql_secure_installation
      
    2. Tekan enter untuk melewati penyiapan plugin VALIDATE PASSWORD.

    3. Masukkan sandi root baru dua kali.

    4. Untuk menghapus pengguna anonim, masukkan Y dan tekan enter.

    5. Untuk mencegah login root jarak jauh, masukkan Y dan tekan enter.

    6. Untuk menghapus database pengujian, masukkan Y lalu tekan enter.

    7. Untuk memuat ulang tabel hak istimewa, masukkan Y lalu tekan enter.

    Mengonfigurasi server MySQL

    Sebelum dapat terhubung ke server MySQL dari jarak jauh, Anda perlu mengonfigurasinya untuk memproses alamat IP internalnya. Kemudian, Anda membuat akun pengguna non-root agar klien MySQL dapat terhubung ke server.

    Semua perintah klien MySQL harus menyertakan flag command line tertentu (misalnya, untuk mengautentikasi). Perintah MySQL di bagian ini mencakup flag berikut: --user untuk nama pengguna, -p untuk sandi, dan -e untuk menjalankan pernyataan yang diberikan dan segera keluar. Untuk mengetahui informasi selengkapnya, lihat Referensi opsi perintah MySQL 5.7.

    1. Di Cloud Shell, gunakan SSH untuk terhubung ke instance my-server.

    2. Update file konfigurasi /etc/mysql/mysql.conf.d/mysqld.cnf dengan informasi berikut:

      LOCAL_IP=$(curl  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \
          -H "Metadata-Flavor: Google")
      sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf
      
    3. Mulai ulang layanan MySQL untuk menerapkan perubahan ke server yang berjalan.

      sudo service mysql restart
      
    4. Pastikan server berjalan secara lokal. Ganti [ROOT_PASSWORD] dengan sandi root server MySQL yang Anda buat di langkah sebelumnya.

      sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
      

      Output-nya akan terlihat mirip dengan berikut ini:

      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      

    Membuat pengguna MySQL

    Terhubung dari jarak jauh karena pengguna root dinonaktifkan dengan perintah mysql_secure_installation sebelumnya. Anda harus membuat pengguna baru dengan izin yang diperlukan untuk memungkinkan koneksi jarak jauh.

    1. Di Cloud Shell, buat variabel lingkungan untuk alamat IP internal my-client.

      CLIENT_IP=$(gcloud compute instances describe my-client \
          --zone=ZONE \
          --format='value(networkInterfaces[0].networkIP)')
      
    2. Buat pengguna MySQL baru dengan sandi. Ganti [MY_PASSWORD] dengan sandi Anda, [ROOT_PASSWORD] dengan sandi pengguna root MySQL Anda.

      sudo mysql -uroot -p[ROOT_PASSWORD] \
          -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
      
    3. Berikan izin kepada pengguna MySQL baru untuk login ke server dari alamat IP internal my-client.

      sudo mysql -uroot -p[ROOT_PASSWORD] -e \
          "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \
          IDENTIFIED BY '[MY_PASSWORD]';"
      

    Hapus alamat IP eksternal untuk my-server

    Instance my-server tidak memerlukan alamat IP eksternal karena klien dapat mengakses my-server melalui alamat IP internal.

    • Untuk menghapus alamat IP eksternal, update setelan konfigurasi di Cloud Shell. Ganti [ZONE] dengan zona Google Cloud Anda.

      gcloud compute instances delete-access-config my-server \
          --access-config-name "external-nat" \
          --zone="ZONE"
      

    Memverifikasi akses jarak jauh dari instance klien ke server

    Langkah-langkah berikut menjelaskan cara terhubung ke server MySQL di my-server dari instance my-client Anda.

    1. Di Cloud Shell, gunakan SSH untuk terhubung ke instance my-client.
    2. Uji koneksi Anda dengan membuat daftar database.

      sudo mysql --host=my-server --user=TESTUSER \
          --password=[MY_PASSWORD] -e "SHOW DATABASES;"
      

      Output-nya akan tampak mirip dengan berikut ini:

      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      

    Langkah-langkah ini memverifikasi bahwa klien MySQL Anda berhasil terhubung ke server MySQL melalui alamat IP internal.

    Pertimbangan firewall dalam lingkungan produksi

    Konfigurasi jaringan default di Google Cloud mencakup aturan firewall, default-allow-internal, yang memungkinkan traffic internal antara instance Compute Engine pada berbagai port, termasuk port MySQL, port 3306. Di lingkungan non-default dengan jejak keamanan yang telah ditetapkan, Anda mungkin perlu membuat aturan firewall agar instance my-client Anda dapat berkomunikasi dengan instance my-server melalui jaringan. Jika tidak, kedua instance tidak dapat saling berkomunikasi.

    Anda dapat mendasarkan aturan firewall pada rentang atau tag alamat IP. Rentang alamat IP berguna jika Anda ingin memberikan akses ke berbagai alamat IP internal. Atau, jika Anda ingin memberikan akses ke instance tertentu di jaringan Anda, tag dapat memberikan solusi yang lebih fleksibel. Tag memudahkan Anda menambahkan klien baru tanpa memberikan akses ke berbagai alamat IP. Anda hanya perlu menetapkan tag yang sesuai ke instance klien MySQL yang baru. Misalnya, Anda dapat membuat aturan firewall baru yang mengizinkan traffic dari semua instance klien yang diberi tag dengan mysql-client.

    Untuk mendukung aturan firewall menggunakan tag, Anda dapat menetapkan tag yang sesuai ke VM my-client dan my-server di Cloud Shell.

    gcloud compute instances add-tags my-client --tags mysql-client --zone=ZONE
    
    gcloud compute instances add-tags my-server --tags mysql-server --zone=ZONE
    

    Menambahkan aturan firewall baru

    Langkah-langkah berikut menjelaskan cara membuat aturan firewall baru untuk memungkinkan instance dengan tag my-client berkomunikasi dengan instance yang memiliki tag my-server menggunakan port 3306.

    • Di Cloud Shell, buat aturan firewall untuk mengizinkan komunikasi dari mysql-client ke mysql-server.

      gcloud compute firewall-rules create "mysql-remote-access" \
          --allow tcp:3306 --source-tags "mysql-client" \
          --target-tags "mysql-server"
      

    Sekarang Anda dapat terhubung ke MySQL dari my-client.

    Mengakses pertimbangan dari klien eksternal

    Tutorial ini membahas akses dari klien MySQL ke server MySQL yang keduanya berjalan di Compute Engine. Akses dari klien yang tidak berjalan di Compute Engine berada di luar cakupan tutorial ini. Jika Anda perlu mengizinkan akses non-Compute Engine, ubah hal berikut:

    • Tambahkan alamat IP eksternal ke my-server untuk mengizinkan konektivitas eksternal.
    • Tambahkan alamat IP sumber klien eksternal ke aturan firewall.
    • Ubah akun TESTUSER, atau buat sebuah akun pengguna, yang terikat dengan alamat IP sumber klien eksternal Anda.

    Pembersihan

    Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project atau menghapus instance.

    Menghapus project

    Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    Untuk menghapus project:

    1. Di konsol Google Cloud, buka halaman Manage resource.

      Buka Manage resource

    2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
    3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

    Menghapus instance

    Untuk menghapus instance Compute Engine:

    1. Di konsol Google Cloud, buka halaman Instance VM.

      Buka VM instances

    2. Pilih kotak centang untuk instance my-server Anda.
    3. Untuk menghapus instance, klik Tindakan lainnya, klik Hapus, lalu ikuti petunjuknya.

    Langkah selanjutnya