Men-deploy sertifikat global yang dikelola Google dengan otorisasi DNS


Tutorial ini akan memandu Anda melalui proses deployment sertifikat menggunakan sertifikat yang dikelola Google dengan otorisasi DNS sebagai contohnya.

Load balancer berikut mendukung sertifikat yang dikelola Google dengan otorisasi DNS:

  • Load Balancer Aplikasi eksternal global
  • Load Balancer Aplikasi Klasik
  • Load Balancer Aplikasi internal lintas region
  • Load Balancer Jaringan proxy eksternal global

Untuk membandingkan jenis otorisasi domain yang didukung, lihat Otorisasi domain.

Jika Anda ingin memigrasikan sertifikat yang ada ke Certificate Manager, ikuti langkah-langkah dalam Memigrasikan sertifikat ke Pengelola Sertifikat.

Tujuan

Tutorial ini menunjukkan kepada Anda cara menyelesaikan tugas-tugas berikut:

  • Buat sertifikat yang dikelola Google dan diterbitkan oleh certificate authority yang dipercaya secara publik dengan otorisasi DNS menggunakan Certificate Manager.
  • Deploy sertifikat ke load balancer yang didukung menggunakan proxy HTTPS target.

Untuk informasi selengkapnya tentang proses deployment sertifikat, lihat Ringkasan deployment.

Sebelum memulai

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

    Buka pemilih project

  2. Gcloud CLI versi 465.0.0 atau yang lebih baru diperlukan untuk men-deploy sertifikat. Untuk memeriksa versi CLI gcloud, jalankan perintah berikut:

    gcloud --version
    
  3. Untuk mengupdate gcloud CLI, jalankan perintah berikut.

    gcloud components update
    
  4. Pastikan Anda memiliki peran berikut untuk menyelesaikan tugas dalam tutorial ini:

    • Pemilik Pengelola Sertifikat: Diperlukan untuk membuat dan mengelola resource Certificate Manager.
    • Admin Load Balancer Compute atau Admin Jaringan Compute: Diperlukan untuk membuat dan mengelola proxy target HTTPS.
    • Administrator DNS: Diperlukan jika Anda ingin menggunakan Cloud DNS sebagai solusi DNS.

    Untuk informasi selengkapnya, lihat referensi berikut:

Buat sertifikat yang dikelola Google dengan otorisasi DNS

Selesaikan langkah-langkah di bagian ini untuk membuat otorisasi DNS dan sertifikat yang dikelola Google yang merujuk pada otorisasi DNS tersebut.

Membuat otorisasi DNS

Buat otorisasi DNS seperti yang dijelaskan di bagian ini. Jika Anda membuat otorisasi DNS untuk sertifikat karakter pengganti, seperti *.myorg.example.com, konfigurasikan otorisasi DNS untuk domain induk—misalnya, myorg.example.com.

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Untuk menggunakan otorisasi DNS per project (Preview), jalankan perintah berikut:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME" \
   --type="PER_PROJECT_RECORD"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Ganti kode berikut:

  • AUTHORIZATION_NAME: nama otorisasi DNS.
  • DOMAIN_NAME: nama domain tempat Anda membuat otorisasi DNS ini. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com.

Perintah menampilkan output yang mirip dengan berikut ini. Gunakan data CNAME dari output untuk menambahkan ke konfigurasi DNS Anda.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
name: _acme-challenge.myorg.example.com.
type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

Untuk membuat otorisasi DNS, Anda dapat menggunakan resource google_certificate_manager_dns_authorization.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Tambahkan data CNAME ke konfigurasi DNS Anda

Jika Anda menggunakan Google Cloud untuk mengelola DNS, selesaikan langkah-langkah di bagian ini. Jika tidak, baca dokumentasi untuk solusi DNS pihak ketiga Anda.

Sebelum menyelesaikan langkah-langkah di bagian ini, pastikan Anda telah membuat zona DNS publik.

Saat Anda membuat otorisasi DNS, perintah gcloud CLI akan menampilkan data CNAME yang sesuai. Anda harus menambahkan data CNAME ini ke konfigurasi DNS di zona DNS domain target sebagai berikut:

gcloud

  1. Mulai transaksi data DNS:
  gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"

Ganti DNS_ZONE_NAME dengan nama zona DNS target.

  1. Tambahkan data CNAME ke zona DNS target:
  gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"

Ganti kode berikut:

  • CNAME_RECORD: nilai data lengkap dari data CNAME yang ditampilkan oleh perintah Google Cloud CLI yang membuat otorisasi DNS yang sesuai.
  • DOMAIN_NAME: nama domain target. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com. Anda juga harus menyertakan titik di akhir setelah nama domain target.
  • DNS_ZONE_NAME: nama zona DNS target.

Lihat contoh berikut:

  gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
      --name="_acme-challenge.myorg.example.com." \
      --ttl="30" \
      --type="CNAME" \
      --zone="myorg-example-com"
  
  1. Jalankan transaksi data DNS untuk menyimpan perubahan:
  gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
  

Ganti DNS_ZONE_NAME dengan nama zona DNS target.

Terraform

Untuk menambahkan data CNAME ke konfigurasi DNS, Anda dapat menggunakan resource google_dns_record_set.

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

Buat sertifikat yang dikelola Google yang merujuk pada otorisasi DNS

Untuk membuat sertifikat yang dikelola Google, yang merujuk ke otorisasi DNS yang Anda buat pada langkah sebelumnya, lakukan langkah berikut:

gcloud

Untuk Load Balancer Aplikasi eksternal Global, Load Balancer Aplikasi Klasik, atau Load Balancer Jaringan proxy eksternal global:

Jalankan perintah berikut:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
   --domains=DOMAIN_NAME \
   --dns-authorizations=AUTHORIZATION_NAME

Ganti kode berikut:

  • CERTIFICATE_NAME: nama unik sertifikat.
  • DOMAIN_NAME: domain target sertifikat. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com.
  • AUTHORIZATION_NAME: nama otorisasi DNS yang Anda buat untuk sertifikat ini.

Untuk membuat sertifikat yang dikelola Google dengan nama domain karakter pengganti, gunakan perintah berikut. Sertifikat nama domain karakter pengganti mencakup semua subdomain level pertama dari domain tertentu.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
   --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
   --dns-authorizations=AUTHORIZATION_NAME

Ganti kode berikut:

  • CERTIFICATE_NAME: nama unik sertifikat.
  • DOMAIN_NAME: domain target sertifikat. Awalan tanda bintang (*.) menandakan sertifikat karakter pengganti. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com.
  • AUTHORIZATION_NAME: nama otorisasi DNS yang Anda buat untuk sertifikat ini.

Untuk Load Balancer Aplikasi internal Lintas region:

Jalankan perintah berikut:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Ganti kode berikut:

  • CERTIFICATE_NAME: nama unik sertifikat.
  • DOMAIN_NAME: domain target sertifikat. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com.
  • AUTHORIZATION_NAME: nama otorisasi DNS yang Anda buat untuk sertifikat ini.

Untuk membuat sertifikat yang dikelola Google dengan nama domain karakter pengganti, gunakan perintah berikut. Sertifikat nama domain karakter pengganti mencakup semua subdomain level pertama dari domain tertentu.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Ganti kode berikut:

  • CERTIFICATE_NAME: nama unik sertifikat.
  • DOMAIN_NAME: domain target sertifikat. Awalan tanda bintang (*.) menandakan sertifikat karakter pengganti. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com.
  • AUTHORIZATION_NAME: nama otorisasi DNS yang Anda buat untuk sertifikat ini.

Terraform

Gunakan referensi google_certificate_manager_certificate.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

Memastikan sertifikat aktif

Gunakan perintah berikut untuk memverifikasi bahwa sertifikat aktif sebelum men-deploy-nya ke load balancer Anda. Diperlukan waktu hingga beberapa jam agar status sertifikat berubah menjadi ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Ganti CERTIFICATE_NAME dengan nama target sertifikat yang dikelola Google.

Perintah akan menampilkan output yang mirip dengan berikut ini:

certificatePem: myPEM
createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  domains:
  -   myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
scope: myScope
sanDnsnames:
-   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Men-deploy sertifikat ke load balancer

Bagian ini akan memandu Anda melakukan langkah-langkah yang diperlukan untuk men-deploy sertifikat yang dikelola Google ke load balancer.

Sebelum melanjutkan dengan tugas di bagian ini, pastikan Anda telah menyelesaikan tugas yang tercantum di bagian Membuat sertifikat yang dikelola Google dengan otorisasi DNS.

Bergantung pada jenis load balancer, Anda dapat men-deploy sertifikat sebagai berikut:

Men-deploy sertifikat menggunakan peta sertifikat

Bagian ini menjelaskan langkah-langkah untuk men-deploy sertifikat menggunakan peta sertifikat.

Membuat peta sertifikat

Buat peta sertifikat yang merujuk ke entri peta sertifikat yang terkait dengan sertifikat Anda:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Ganti CERTIFICATE_MAP_NAME dengan nama peta sertifikat target.

Terraform

Untuk membuat peta sertifikat, Anda dapat menggunakan resource google_certificate_manager_certificate_map.

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

Membuat entri peta sertifikat

Buat entri peta sertifikat dan kaitkan dengan sertifikat Anda serta peta sertifikat Anda:

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
   --map="CERTIFICATE_MAP_NAME" \
   --certificates="CERTIFICATE_NAME" \
   --hostname="HOSTNAME"

Ganti kode berikut:

  • CERTIFICATE_MAP_ENTRY_NAME: nama unik entri peta sertifikat
  • CERTIFICATE_MAP_NAME: nama peta sertifikat tempat entri peta sertifikat ini dilampirkan
  • CERTIFICATE_NAME: nama sertifikat yang ingin Anda kaitkan dengan entri peta sertifikat ini
  • HOSTNAME: nama host yang ingin Anda kaitkan dengan entri peta sertifikat ini

Terraform

Untuk membuat entri peta sertifikat, Anda dapat menggunakan resource google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

Memastikan entri peta sertifikat aktif

Gunakan perintah berikut untuk memverifikasi bahwa entri peta sertifikat aktif sebelum melampirkan peta sertifikat yang sesuai ke proxy target:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Ganti kode berikut:

  • CERTIFICATE_MAP_ENTRY_NAME: nama entri peta sertifikat target
  • CERTIFICATE_MAP_NAME: nama peta sertifikat tempat entri peta sertifikat ini dilampirkan

Perintah akan menampilkan output yang mirip dengan berikut ini:

createTime: '2021-09-06T10:01:56.229472109Z'
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

Lampirkan peta sertifikat ke proxy target

Lampirkan peta sertifikat yang dikonfigurasi ke proxy target:

gcloud

  1. Di konsol Google Cloud, buka halaman Target proxy.

    Buka Target proxy

  2. Perhatikan nama proxy target.

  3. Lampirkan peta sertifikat ke proxy target:

  gcloud compute target-https-proxies update PROXY_NAME \
      --certificate-map="CERTIFICATE_MAP_NAME" \
      --global
  

Ganti kode berikut:

  • PROXY_NAME: nama proxy target.
  • CERTIFICATE_MAP_NAME: nama peta sertifikat yang merujuk pada entri peta sertifikat Anda dan sertifikat terkait.

Terraform

Untuk melampirkan peta sertifikat ke proxy target, Anda dapat menggunakan resource google_compute_target_https_proxy.

Jika ada sertifikat TLS (SSL) yang dilampirkan langsung ke proxy, proxy akan memberikan preferensi ke sertifikat yang dirujuk oleh peta sertifikat daripada sertifikat TLS (SSL) yang dilampirkan secara langsung.

Lampirkan sertifikat secara langsung ke proxy target

Untuk melampirkan sertifikat secara langsung ke proxy, jalankan perintah berikut:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

Ganti kode berikut:

  • PROXY_NAME: nama unik proxy.
  • URL_MAP: nama peta URL. Anda telah membuat peta URL saat membuat load balancer.
  • CERTIFICATE_NAME: nama sertifikat.

Pembersihan

Untuk mengembalikan perubahan yang Anda buat dalam tutorial ini, selesaikan langkah-langkah berikut:

  1. Lepaskan peta sertifikat dari proxy.

    Sebelum Anda melepaskan peta sertifikat, perhatikan hal-hal berikut:

    • Jika ada sertifikat TLS (SSL) yang dilampirkan langsung ke proxy, melepaskan peta sertifikat akan menyebabkan proxy melanjutkan penggunaan sertifikat TLS (SSL) yang dilampirkan secara langsung tersebut.
    • Jika tidak ada sertifikat TLS (SSL) yang dilampirkan langsung ke proxy, peta sertifikat tidak dapat dilepas dari proxy. Anda harus terlebih dahulu melampirkan setidaknya satu sertifikat TLS (SSL) langsung ke proxy sebelum melepaskan peta sertifikat.

    Untuk melepaskan peta sertifikat, jalankan perintah berikut:

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    

    Ganti PROXY_NAME dengan nama proxy target.

  2. Hapus entri peta sertifikat dari peta sertifikat:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME"
    

    Ganti kode berikut:

    • CERTIFICATE_MAP_ENTRY_NAME: nama entri peta sertifikat target.
    • CERTIFICATE_MAP_NAME: nama peta sertifikat target.
  3. Hapus peta sertifikat:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Ganti CERTIFICATE_MAP_NAME dengan nama peta sertifikat target.

  4. Hapus sertifikat yang dikelola Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Ganti CERTIFICATE_NAME dengan nama sertifikat target.

  5. Hapus otorisasi DNS:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Ganti AUTHORIZATION_NAME dengan nama otorisasi DNS target.

Langkah selanjutnya