Mengirimkan konten aman dan tidak aman melalui nama host yang sama

Umumnya, konten HTTP dan HTTPS ditayangkan melalui nama host yang sama saat menggunakan Cloud CDN. Meskipun banyak browser menerapkan penggunaan Transport Layer Security (TLS) dan tidak mengizinkan penayangan konten yang tidak aman, masih ada kasus penggunaan yang mewajibkan diizinkannya penayangan yang tidak aman dan yang aman melalui nama host yang sama. Artikel ini membahas cara mencapai fungsionalitas ini menggunakan Cloud CDN.

Tantangan

Saat klien membuat koneksi dengan server edge CDN, protokol penayangan pengguna akhir akan dinegosiasikan. Sebagian besar platform CDN konvensional akan mengarahkan traffic ke jejak penayangan masing-masing dengan:

  1. Mengarah ke nama domain milik CDN, menggunakan data CNAME DNS.
  2. Merutekan traffic ke subset server yang mendukung negosiasi TLS untuk nama domain tersebut.

Karena Cloud CDN terintegrasi dengan Cloud Load Balancing, pendekatan Cloud CDN berbeda dengan pendekatan CDN konvensional. Cloud CDN memanfaatkan alamat IP Anycast dari Load Balancer Aplikasi eksternal. Saat mengonfigurasi Cloud CDN, Anda memiliki alamat IP tertentu untuk mengarahkan traffic. Hal ini mensyaratkan konstruksi data A (untuk IPv4) dan/atau AAAA (untuk IPv6) di data DNS Anda, bukan data CNAME dengan nilai nama host.

Secara default, saat mengonfigurasi frontend load balancer,Google Cloud akan menetapkan alamat IP sementara secara dinamis. Karena Anda perlu mengonfigurasi konfigurasi HTTP dan HTTPS secara terpisah, Anda dapat memiliki dua alamat IP untuk instance Cloud CDN. Karena alamat IP data A atau AAAA yang sama digunakan baik untuk HTTP maupun HTTPS, kasus ini tidak mungkin dapat ditangani dengan benar di DNS.

Solusi

Saat menayangkan konten aman dan tidak aman melalui nama host yang sama, klien akan diarahkan ke server edge yang dapat menegosiasikan HTTP atau HTTPS. Agar dapat berfungsi dengan Cloud CDN, Anda dapat mencadangkan alamat IP dan mengikat alamat IP yang dicadangkan tersebut ke konfigurasi frontend HTTP dan HTTPS di Load Balancer Aplikasi eksternal.

HTTP dan HTTPS melalui domain yang sama
HTTP dan HTTPS melalui domain yang sama

Dalam diagram:

  • permintaan masuk untuk www.example.com berasal dari klien yang menggunakan HTTP/2, HTTPS, dan HTTP.
  • Dua alamat IP dicadangkan, satu untuk IPv4 dan satu untuk IPv6:

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • Kedua alamat IP ini terikat ke www.example.com di Cloud DNS.

  • Saat mengonfigurasi Load Balancer Aplikasi eksternal, konfigurasi frontend mencakup empat aturan penerusan yang menggunakan alamat IP yang dicadangkan:

    Nama Protokol IP:Port
    ipv4-http HTTP 34.95.111.204:80
    ipv4-https HTTPS 34.95.111.204:443
    ipv6-http HTTP [2600:1901:0:b13e::]:80
    ipv6-https HTTPS [2600:1901:0:b13e::]:443
  • Untuk cache tidak ditemukan Cloud CDN, load balancer mendistribusikan permintaan ke server asal backend, berdasarkan setelan yang ditentukan dalam peta URL load balancer.

Langkah 1: Mencadangkan alamat IP eksternal global

Buat alamat IPv4 atau IPv6 (atau keduanya). Untuk mendukung penentuan alamat IPv4 dan IPv6, Anda harus membuat satu alamat IPv4 dan satu alamat IPv6.

Di data DNS Anda, buat data A (atau AAAA) untuk mengarahkan traffic ke alamat IP yang dicadangkan ini.

Konsol

  1. Di Konsol Google Cloud , buka halaman External IP addresses.

    Buka halaman External IP addresses

  2. Klik Reserve static address untuk mencadangkan alamat IPv4.
  3. Tetapkan Name untuk ipv4-address.
  4. Tetapkan paket Jaringan ke Premium.
  5. Tetapkan IP version ke IPv4.
  6. Tetapkan Type ke Global.
  7. Klik Reserve.

Load balancer menggunakan jaringan Paket Premium, sebagaimana diperlukan saat Cloud CDN diaktifkan.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Ulangi langkah ini untuk IPv6.

Untuk mengetahui informasi selengkapnya, baca bagian Mencadangkan alamat IP eksternal statis baru.

Langkah 2: Mengikat alamat IP yang dicadangkan ke load balancer

Bagian ini berisi petunjuk cara menetapkan alamat IP ke load balancer Anda. Petunjuk menyeluruh untuk menyiapkan load balancer tidak termasuk dalam cakupan artikel ini. Untuk mengetahui contoh penyiapan, baca bagian Membuat load balancer HTTPS.

Bagian konfigurasi frontend dapat Anda gunakan untuk memilih protokol yang digunakan antara klien dan load balancer.

Dalam contoh ini, Anda menggunakan HTTP dan HTTPS antara klien dan load balancer, sehingga Anda memerlukan satu atau beberapa resource sertifikat SSL untuk mengonfigurasi proxy.

Konsol

Mengonfigurasi aturan penerusan HTTP

  1. Di Konsol Google Cloud , buka halaman Load balancing.

    Buka halaman Load balancing

  2. Pilih load balancer Anda, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-http.
  5. Di kolom Protocol, pilih HTTP.
  6. Tetapkan IP version ke IPv4.
  7. Di IP address, pilih ipv4-address, yang Anda buat sebelumnya.
  8. Pastikan Port ditetapkan ke 80 untuk mengizinkan traffic HTTPS.
  9. Klik Done.

Mengonfigurasi aturan penerusan HTTPS

  1. Di Konsol Google Cloud , buka halaman Load balancing.

    Buka halaman Load balancing

  2. Pilih load balancer Anda, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-https.
  5. Di kolom Protocol, pilih HTTPS.
  6. Tetapkan IP version ke IPv4.
  7. Di IP address, pilih ipv4-address, yang Anda buat sebelumnya.
  8. Pastikan Port ditetapkan ke 443 untuk mengizinkan traffic HTTPS.
  9. Klik menu drop-down Certificate.
    1. Jika Anda sudah memiliki resource sertifikat SSL yang dikelola sendiri yang ingin digunakan sebagai sertifikat SSL utama, pilih sertifikat tersebut dari menu drop-down.
    2. Jika tidak, pilih Create a new certificate.
    3. Pilih Upload my certificate atau Create Google managed certificate.
    4. Jika Anda memilih Upload my certificate, selesaikan langkah-langkah ini.
      1. Isi Name untuk www-ssl-cert.
      2. Di kolom yang sesuai, upload Public key certificate (file .crt), Certificate chain (file .csr), dan Private key (file .key) Anda.
      3. Klik Create.
    5. Jika Anda memilih Create Google managed certificate, masukkan Domain.
    6. Untuk menambahkan resource sertifikat selain resource sertifikat SSL utama:
      1. Klik Add certificate.
      2. Pilih sertifikat dari daftar Certificates atau klik Create a new certificate, lalu ikuti petunjuk di atas.
  10. Klik Done.

Ulangi langkah-langkah ini untuk IPv6.

Meninjau dan memfinalisasi

  1. Di panel kiri, klik Review and finalize.
  2. Bandingkan setelan Anda dengan yang ingin Anda buat.
  3. Jika semuanya sudah benar, klik Update.

gcloud

  1. Buat proxy HTTP target untuk mengarahkan permintaan ke peta URL:

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Buat proxy HTTPS target untuk mengarahkan permintaan ke peta URL. Proxy ini merupakan bagian dari load balancer yang menampung sertifikat SSL untuk Load Balancing HTTPS, sehingga Anda juga akan memuat sertifikat pada langkah ini.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. Buat dua aturan penerusan global untuk mengarahkan permintaan masuk ke proxy, satu untuk tiap alamat IP yang Anda buat.

    • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
    • Untuk Load Balancer Aplikasi klasik, gunakan load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

Setelah membuat aturan penerusan global, mungkin perlu waktu beberapa menit hingga konfigurasi Anda dipropagasi di seluruh dunia.

Langkah 3: Membuat data A atau AAAA di file zona DNS Anda

Langkah terakhir dalam proses ini adalah membuat data A dan/atau AAAA di file zona DNS agar mengarah ke Cloud CDN di mana nilai nama host Anda akan merespons dengan alamat IP yang dicadangkan yang Anda tetapkan di load balancer.

Sekarang, Anda dapat menyajikan HTTP dan HTTPS melalui nama host yang sama melalui Cloud CDN.

Opsional: Mengalihkan HTTP ke HTTPS

Jika ingin mengalihkan permintaan HTTP ke load balancer HTTPS, Anda harus menambahkan load balancer HTTP parsial yang memiliki frontend, tetapi tidak memiliki backend. Frontend akan menerima permintaan, lalu mengalihkannya ke load balancer HTTPS. Hal ini dilakukan dengan menggunakan:

  • Aturan penerusan dengan alamat IP eksternal yang dicadangkan dan sama dengan yang digunakan load balancer HTTPS Anda, seperti yang ditunjukkan di halaman ini.
  • Proxy HTTP target, seperti yang ditunjukkan di halaman ini.
  • Peta URL yang mengalihkan traffic ke load balancer HTTPS.

Mendapatkan dukungan

Jika ada pertanyaan tentang Google Cloud dan Cloud CDN, hubungi Tim penjualan Google Cloud Anda atau hubungi kami melalui saluran Community SlackGoogle Cloud, dan posting pesan di saluran #cloud-cdn.

Apa langkah selanjutnya?