Mengonfigurasi sertifikat SSL/TLS

Halaman ini menjelaskan cara menerapkan enkripsi SSL/TLS untuk instance guna memastikan bahwa semua koneksi dienkripsi. Anda juga dapat mempelajari lebih lanjut cara Cloud SQL menggunakan sertifikat SSL/TLS yang dikelola sendiri untuk terhubung ke instance Cloud SQL dengan aman.

Ringkasan

Cloud SQL membuat sertifikat server secara otomatis saat Anda membuat instance. Sebaiknya menerapkan semua koneksi untuk menggunakan SSL/TLS.

SQL Server hanya menjalankan verifikasi sertifikat jika permintaan klien secara eksplisit menentukan bahwa diperlukan koneksi terenkripsi. Dalam hal ini, sertifikat server harus diinstal di komputer klien. Jika tidak, klien dapat terhubung dengan bebas tanpa perubahan tambahan pada string atau sertifikat koneksinya, meskipun Anda mengonfigurasi instance dengan sslMode ditetapkan ke ENCRYPTED_ONLY.

Untuk mengetahui informasi selengkapnya, baca bagian Mengaktifkan koneksi terenkripsi ke Database Engine dalam dokumentasi SQL Server.

Jika Anda menerapkan SSL untuk instance, instance tersebut harus dimulai ulang. Mulai ulang mungkin juga diperlukan setelah Anda mengubah sertifikat SSL/TLS. Jika perlu dimulai ulang, Cloud SQL akan otomatis memulai ulang instance untuk Anda. Memulai ulang instance dapat menyebabkan periode nonaktif.

Menerapkan enkripsi SSL/TLS

Anda dapat menggunakan setelan mode SSL untuk menerapkan enkripsi SSL dengan cara berikut:

  • Mengizinkan koneksi non-SSL/non-TLS dan SSL/TLS. Ini adalah setelan defaultnya.

  • Hanya izinkan koneksi yang dienkripsi dengan SSL/TLS.

Jika Anda memilih Izinkan koneksi non-SSL/non-TLS dan SSL/TLS untuk instance Cloud SQL, koneksi SSL/TLS akan diterima, serta koneksi yang tidak dienkripsi dan tidak aman. Jika Anda tidak mewajibkan SSL/TLS untuk semua koneksi, koneksi yang tidak dienkripsi tetap diizinkan. Oleh karena itu, jika Anda mengakses instance menggunakan IP publik, sebaiknya terapkan SSL untuk semua koneksi.

Anda dapat terhubung langsung ke instance menggunakan sertifikat SSL/TLS, atau Anda dapat terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Connector. Jika Anda terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Connector, koneksi tersebut akan otomatis dienkripsi dengan SSL/TLS. Dengan Proxy Auth Cloud SQL dan Konektor Cloud SQL, identitas klien dan server juga akan otomatis diverifikasi, apa pun setelan mode SSL.

Penerapan SSL memastikan bahwa semua koneksi dienkripsi.

Untuk mengaktifkan requiring SSL/TLS, lakukan hal berikut:

Konsol

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

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Overview instance, klik nama instance.
  3. Klik Connections dari menu navigasi SQL.
  4. Pilih tab Keamanan.
  5. Pilih salah satu opsi berikut:
    • Mengizinkan traffic jaringan yang tidak dienkripsi (tidak direkomendasikan)
    • Hanya izinkan koneksi SSL. Opsi ini hanya mengizinkan koneksi yang menggunakan enkripsi SSL/TLS.

gcloud

   gcloud sql instances patch INSTANCE_NAME \
   --ssl-mode=SSL_ENFORCEMENT_MODE
  

Ganti SSL_ENFORCEMENT_MODE dengan salah satu opsi berikut:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED mengizinkan koneksi non-SSL/non-TLS dan SSL/TLS. Ini adalah nilai defaultnya.
  • ENCRYPTED_ONLY hanya mengizinkan koneksi yang dienkripsi dengan SSL/TLS.

Terraform

Untuk menerapkan enkripsi SSL/TLS, gunakan resource Terraform:

resource "google_sql_database_instance" "sqlserver_instance" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ssl_mode = "ENCRYPTED_ONLY"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Menerapkan perubahan

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST v1

  1. Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project
    • SSL_ENFORCEMENT_MODE: Gunakan salah satu opsi berikut:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: mengizinkan koneksi non-SSL/non-TLS dan SSL/TLS.
      • ENCRYPTED_ONLY: hanya mengizinkan koneksi yang dienkripsi dengan SSL/TLS.
    • INSTANCE_ID: ID instance

    Metode HTTP dan URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

    Meminta isi JSON:

    
    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

REST v1beta4

  1. Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project
    • SSL_ENFORCEMENT_MODE: Gunakan salah satu opsi berikut:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: mengizinkan koneksi non-SSL/non-TLS dan SSL/TLS.
      • ENCRYPTED_ONLY: hanya mengizinkan koneksi yang dienkripsi dengan SSL/TLS.
    • INSTANCE_ID: ID instance

    Metode HTTP dan URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

    Meminta isi JSON:

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Sertifikat Server

Cloud SQL membuat sertifikat server secara otomatis saat Anda membuat instance. Selama sertifikat server valid, Anda tidak perlu mengelola sertifikat server secara aktif. Cloud SQL memungkinkan Anda memilih di antara tiga hierarki certificate authority (CA) yang berbeda. Hierarki CA yang Anda pilih akan menjadi mode CA server instance. Jika Anda menggunakan CA per instance sebagai mode CA server untuk instance, sertifikat server memiliki tanggal habis masa berlaku 10 tahun. Jika Anda menggunakan CA bersama atau CA yang dikelola pelanggan sebagai mode CA server untuk instance, sertifikat server memiliki tanggal habis masa berlaku 1 tahun*. Setelah tanggal habis masa berlaku, sertifikat server tidak lagi valid, dan klien tidak dapat lagi membuat koneksi yang aman ke instance Anda menggunakan sertifikat tersebut. Jika klien dikonfigurasi untuk memverifikasi CA atau memverifikasi nama host di sertifikat server, koneksi klien tersebut ke instance Cloud SQL dengan sertifikat server yang sudah tidak berlaku akan gagal. Untuk mencegah gangguan pada koneksi klien, rotasi sertifikat server sebelum masa berlaku sertifikat berakhir. Anda akan diberi tahu secara berkala bahwa sertifikat server hampir habis masa berlakunya. Notifikasi dikirim dalam jumlah hari sebagai berikut sebelum tanggal habis masa berlaku: 90, 30, 10, 2, dan 1.

  • Untuk CA yang dikelola pelanggan, tanggal habis masa berlaku sertifikat server Anda mungkin lebih singkat dari 1 tahun jika Anda memilih tanggal habis masa berlaku yang lebih singkat untuk periode validitas CA.

Mencantumkan dan membuat sertifikat server

Untuk melihat detail sertifikat server di konsol Google Cloud, buka halaman Koneksi, lalu klik tab Keamanan.

Dalam tabel sertifikat, Anda dapat melihat detail berikut:

  • Status Sertifikat:Mendatang, Aktif, atau Sebelumnya
    • Mendatang: Sertifikat tersedia untuk digunakan, tetapi tidak aktif. Untuk mengaktifkan sertifikat, gunakan prosedur rotasi.
    • Aktif: Sertifikat sedang digunakan.
    • Sebelumnya: Sertifikat tidak lagi digunakan. Untuk mengaktifkan sertifikat, gunakan prosedur rollback.
  • Created: Tanggal dan waktu sertifikat dibuat
  • Berakhir: Tanggal dan waktu masa berlaku sertifikat habis

Sebelum masa berlaku sertifikat aktif berakhir, Anda dapat membuat sertifikat baru secara manual.

Konsol

Untuk instance yang menggunakan sertifikat server yang ditandatangani sendiri (CA per instance):

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

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Overview instance, klik nama instance.
  3. Klik Connections dari menu navigasi SQL.
  4. Pilih tab Keamanan.
  5. Buka bagian Manage server CA certificates.
  6. Klik untuk meluaskan Kelola sertifikat.
  7. Klik Create new CA certificate.

Sertifikat CA server baru akan muncul di slot Mendatang. Jika Anda ingin segera melakukan rotasi ke sertifikat CA server baru, lanjutkan dengan rotasi sertifikat CA server dengan mengupdate klien dan menyelesaikan rotasi.

Untuk instance yang menggunakan sertifikat server yang dikeluarkan oleh CA bersama:

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

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Overview instance, klik nama instance.
  3. Klik Connections dari menu navigasi SQL.
  4. Pilih tab Keamanan.
  5. Buka bagian Manage server certificates.
  6. Klik untuk meluaskan Kelola sertifikat.
  7. Klik Create server certificate.

Sertifikat server baru akan muncul di slot Mendatang. Jika Anda ingin segera menggunakan sertifikat server baru, lanjutkan dengan rotasi sertifikat server dengan mengupdate klien dan menyelesaikan rotasi.

gcloud

Untuk instance yang menggunakan sertifikat server yang ditandatangani sendiri (CA per instance):

  1. Untuk mendapatkan informasi tentang sertifikat server, gunakan perintah sql ssl server-ca-certs list:
    gcloud sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
  2. Untuk membuat sertifikat server, gunakan perintah sql ssl server-ca-certs create:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Download informasi sertifikat ke file PEM lokal:
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  4. Perbarui semua klien Anda untuk menggunakan informasi baru dengan menyalin file yang didownload ke mesin host klien, menggantikan file server-ca.pem yang sudah ada.

Untuk instance yang menggunakan sertifikat server yang dikeluarkan oleh CA bersama (Pratinjau):

  1. Untuk mendapatkan informasi tentang sertifikat server, gunakan perintah sql ssl server-certs list:
    gcloud sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Untuk membuat sertifikat server, gunakan perintah sql ssl server-certs create:
    gcloud sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Download informasi sertifikat ke file PEM lokal:
    gcloud sql ssl server-certs list \
       --format="value(ca_cert.cert)" \
       --instance=INSTANCE_NAME > \
       FILE_PATH/FILE_NAME.pem
  4. Perbarui semua klien Anda untuk menggunakan informasi baru dengan menyalin file yang didownload ke mesin host klien, menggantikan file server-ca.pem yang sudah ada.

Terraform

Untuk memberikan informasi sertifikat server sebagai output, gunakan sumber data Terraform:

  1. Tambahkan kode berikut ke file konfigurasi Terraform Anda:
       data "google_sql_ca_certs" "ca_certs" {
         instance = google_sql_database_instance.default.name
       }
    
       locals {
         furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0]
         latest_ca_cert           = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time]
       }
    
       output "db_latest_ca_cert" {
         description = "Latest CA certificate used by the primary database server"
         value       = local.latest_ca_cert
         sensitive   = true
       }
       
  2. Untuk membuat file server-ca.pem, jalankan perintah berikut:
       terraform output db_latest_ca_cert > server-ca.pem
       

Menggunakan koneksi terenkripsi

Pelajari lebih lanjut cara SQL Server menggunakan koneksi terenkripsi.

Tentang verifikasi identitas server

Verifikasi identitas server bergantung pada konfigurasi hierarki otoritas sertifikasi (CA) server instance Cloud SQL Anda.

Untuk instance yang menggunakan CA per instance, memverifikasi CA juga memverifikasi identitas server karena setiap instance memiliki CA yang unik. Untuk instance yang menggunakan CA bersama (Pratinjau), memverifikasi nama host beserta memverifikasi CA diperlukan untuk verifikasi identitas server karena CA server dibagikan di seluruh instance.

Jika memiliki CA per instance, Anda dapat melakukan verifikasi identitas server berbasis nama DNS hanya untuk instance Private Service Connect. Jika memiliki CA bersama (Pratinjau), Anda dapat melakukan verifikasi identitas server berbasis nama DNS untuk semua jenis instance, yaitu Private Service Connect, akses layanan pribadi, dan instance IP publik.

Jika menggunakan CA yang dikelola pelanggan (Pratinjau), Anda dapat memverifikasi rantai kepercayaan CA dan melakukan verifikasi identitas server berbasis nama DNS untuk semua jenis instance yang menggunakan CA yang dikelola pelanggan untuk serverCAmode-nya.

Anda dapat melihat hierarki CA yang dikonfigurasi untuk instance Cloud SQL dengan melihat detail instance. Untuk mengetahui informasi selengkapnya, lihat Melihat informasi instance.

Mengaktifkan verifikasi identitas server

Jika Anda memilih CA bersama sebagai mode CA server instance Cloud SQL (Pratinjau), sebaiknya Anda juga mengaktifkan verifikasi identitas server. Instance yang menggunakan CA bersama sebagai mode CA server berisi nama DNS instance di kolom Subject Alternative Name (SAN) sertifikat server. Anda bisa mendapatkan nama DNS ini dengan menggunakan API pencarian instance dan menggunakan respons sebagai nama host untuk verifikasi identitas server. Anda perlu menyiapkan resolusi DNS untuk nama DNS.

Untuk mengaktifkan verifikasi identitas server, selesaikan langkah-langkah berikut:

  1. Ambil nama DNS.

    1. Untuk melihat informasi ringkasan tentang instance Cloud SQL, termasuk nama DNS instance tersebut, gunakan perintah gcloud sql instances describe:

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Lakukan penggantian berikut:

      • INSTANCE_NAME: nama instance Cloud SQL
      • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance
    2. Dalam respons, pastikan nama DNS muncul. Nama ini memiliki pola berikut:

      INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
      

      Contoh:

      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.

  2. Buat data DNS di zona DNS. Jika Anda terhubung secara pribadi, buat data DNS di zona DNS pribadi di jaringan Virtual Private Cloud (VPC) yang sesuai.

  3. Saat Anda terhubung ke instance Cloud SQL untuk SQL Server, konfigurasikan nama DNS atau alamat IP sebagai nama host. Kemudian, aktifkan verifikasi identitas server dengan menentukan tanda -N untuk sqlcmd atau dengan memilih opsi Encrypt Connection/Encryption di SSMS.

    Driver SQL Server lainnya memiliki flag atau konfigurasi yang serupa.

Langkah berikutnya