Mengirim konten aman dan tidak aman melalui nama host yang sama

Mengirim konten HTTP dan HTTPS melalui nama host yang sama saat menggunakan Cloud CDN adalah hal yang umum. Meskipun banyak browser menerapkan penggunaan Transport Layer Security (TLS) dan tidak mengizinkan pengiriman konten yang tidak aman, masih ada kasus penggunaan saat pengiriman yang tidak aman dan pengiriman yang aman harus diizinkan melalui nama host yang sama. Artikel ini membahas cara mendapatkan fungsi ini menggunakan Cloud CDN.

Tantangan

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

  1. Mengarahkan ke nama domain milik CDN, menggunakan data CNAME DNS.
  2. Merutekan traffic ke sebagian 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 memerlukan konstruksi data A (untuk IPv4) dan/atau AAAA (untuk IPv6) dalam 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, hal ini dapat menyebabkan Anda memiliki dua alamat IP untuk instance Cloud CDN. Karena alamat IP data A atau AAAA yang sama digunakan untuk HTTP dan HTTPS, kasus ini tidak dapat ditangani dengan benar di DNS.

Solusi

Saat mengirimkan 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 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 dengan www.example.com di Cloud DNS.

  • Saat mengonfigurasi Load Balancer Aplikasi eksternal, konfigurasi frontend menyertakan 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 Cloud CDN yang tidak ada, load balancer mendistribusikan permintaan ke asal backend, berdasarkan setelan yang ditentukan di peta URL load balancer.

Langkah 1: Mencadangkan alamat IP eksternal global

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

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

Konsol

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

    Buka halaman Alamat IP eksternal

  2. Klik Reserve static address untuk memesan alamat IPv4.
  3. Tetapkan Nama 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, seperti yang 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 informasi selengkapnya, lihat Mereservasi alamat IP eksternal statis baru.

Langkah 2: Tautkan alamat IP yang dicadangkan ke load balancer

Bagian ini menunjukkan cara menetapkan alamat IP ke load balancer Anda. Petunjuk menyeluruh untuk menyiapkan load balancer berada di luar cakupan artikel ini. Untuk contoh penyiapan, lihat Membuat load balancer HTTPS.

Bagian konfigurasi frontend memungkinkan Anda 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, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-http.
  5. Pada kolom Protocol, pilih HTTP.
  6. Tetapkam Versi IP ke IPv4.
  7. Di IP address, pilih ipv4-address, yang telah Anda buat sebelumnya.
  8. Pastikan Port ditetapkan ke 80 untuk mengizinkan traffic HTTP.
  9. Klik Done.

Mengonfigurasi aturan penerusan HTTPS

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

    Buka halaman Load balancing

  2. Pilih load balancer, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-https.
  5. Pada kolom Protocol, pilih HTTPS.
  6. Tetapkam Versi IP ke IPv4.
  7. Di IP address, pilih ipv4-address, yang telah Anda buat sebelumnya.
  8. Pastikan Port ditetapkan ke 443 untuk mengizinkan traffic HTTP.
  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 sertifikat saya atau Buat sertifikat yang dikelola Google.
    4. Jika Anda memilih Upload my certificate, selesaikan langkah-langkah berikut.
      1. Isi Name www-ssl-cert.
      2. Di kolom yang sesuai, upload Sertifikat kunci publik (file .crt), Rantai sertifikat (file .csr), dan Kunci pribadi (file .key).
      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.

Tinjau dan selesaikan

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

gcloud

  1. Buat proxy HTTP target untuk merutekan permintaan ke peta URL Anda.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Buat proxy HTTPS target untuk merutekan permintaan ke peta URL Anda. Proxy merupakan bagian dari load balancer yang menyimpan sertifikat SSL untuk Load Balancing HTTPS, sehingga Anda juga 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 setiap 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 beberapa menit untuk menerapkan konfigurasi Anda di seluruh dunia.

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

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

Sekarang, Anda dapat menayangkan 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 menerima permintaan, lalu mengalihkannya ke load balancer HTTPS. Hal ini dilakukan dengan menggunakan hal berikut:

  • Aturan penerusan dengan alamat IP eksternal yang dicadangkan yang sama dengan yang digunakan load balancer HTTPS Anda, seperti yang ditunjukkan di halaman ini.
  • Proxy HTTP target, seperti yang ditampilkan 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 atau hubungi kami melalui saluran Slack Komunitas Google Cloud dan kirimkan catatan di saluran #cloud-cdn.

Apa langkah selanjutnya?