Memigrasikan sertifikat pihak ketiga ke Pengelola Sertifikat


Tutorial ini menunjukkan cara memigrasikan sertifikat pihak ketiga ke load balancer Google Cloud menggunakan Pengelola Sertifikat.

Untuk memigrasikan sertifikat pihak ketiga tanpa downtime, buat sertifikat yang dikelola Google dengan jumlah yang sama dengan sertifikat pihak ketiga Anda. Selanjutnya, gabungkan sertifikat ke dalam satu peta sertifikat, dan deploy peta sertifikat ke load balancer menggunakan DNS. Terakhir, perbarui data A dan AAAA DNS agar mengarah ke alamat IP load balancer.

Untuk menemukan daftar load balancer yang didukung, lihat Ringkasan Pengelola Sertifikat.

Tujuan

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

  • Membuat sertifikat yang dikelola Google dengan otorisasi DNS.
  • Buat satu peta sertifikat untuk semua sertifikat.
  • Men-deploy sertifikat ke load balancer menggunakan DNS.
  • Perbarui data A dan AAAA DNS agar mengarah ke alamat IP load balancer.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Peran yang diperlukan

Pastikan Anda memiliki peran berikut untuk menyelesaikan tugas dalam tutorial ini:

  • Pemilik Pengelola Sertifikat (roles/certificatemanager.owner): Wajib untuk membuat dan mengelola resource Pengelola Sertifikat.
  • Compute Load Balancer Admin (roles/compute.loadBalancerAdmin) atau Compute Network Admin (roles/compute.networkAdmin): Diperlukan untuk membuat dan mengelola proxy target HTTPS.
  • DNS Administrator (roles/dns.admin): Wajib jika Anda ingin menggunakan Cloud DNS sebagai solusi DNS Anda.

Untuk informasi selengkapnya, lihat referensi berikut:

Membuat sertifikat yang dikelola Google

Buat jumlah sertifikat yang dikelola Google dengan otorisasi DNS (direkomendasikan) atau sertifikat yang dikelola sendiri yang sama dengan sertifikat pihak ketiga. Sebelum membuat sertifikat, buat otorisasi DNS dan tambahkan data CNAME ke zona DNS otoritatif untuk domain Anda.

Bagian ini mencantumkan langkah-langkah dan perintah untuk membuat sertifikat global yang dikelola Google. Untuk membuat sertifikat yang dikelola Google secara regional atau lintas region, lihat Membuat sertifikat yang dikelola Google.

Membuat otorisasi DNS

Otorisasi DNS hanya mencakup satu nama domain. Anda harus membuat otorisasi DNS terpisah untuk setiap nama domain yang ingin digunakan dengan sertifikat target.

Jika Anda membuat otorisasi DNS untuk sertifikat karakter pengganti, seperti *.myorg.example.com, konfigurasi otorisasi DNS untuk domain induk—misalnya, myorg.example.com.

Konsol

Anda dapat membuat otorisasi DNS atau melampirkan otorisasi DNS yang ada saat membuat sertifikat. Untuk mengetahui informasi selengkapnya, lihat Membuat sertifikat yang dikelola Google yang merujuk pada otorisasi DNS.

gcloud

Untuk membuat otorisasi DNS, gunakan perintah certificate-manager dns-authorizations create:

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

Ganti kode berikut:

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

Sertifikat global yang dikelola Google menggunakan FIXED_RECORD sebagai jenis otorisasi DNS default. Untuk menggunakan otorisasi DNS PER_PROJECT_RECORD, jalankan perintah berikut:

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

Setelah membuat otorisasi DNS, verifikasi dengan perintah certificate-manager dns-authorizations describe:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME \

Outputnya mirip dengan yang berikut ini. Dalam output, temukan baris dnsResourceRecord dan dapatkan data CNAME (data, name, dan type) untuk ditambahkan 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.

API

Untuk membuat otorisasi DNS, buat permintaan POST ke metode dnsAuthorizations.create:

POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}

Ganti kode berikut:

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

Buat sertifikat yang dikelola Google yang merujuk pada otorisasi DNS

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

Konsol

  1. Di konsol Google Cloud, buka halaman Certificate Manager.

    Buka Certificate Manager

  2. Di tab Certificates, klik Add Certificate.

  3. Di kolom Nama sertifikat, masukkan nama unik untuk sertifikat.

  4. Opsional: Di kolom Deskripsi, masukkan deskripsi untuk sertifikat. Deskripsi memungkinkan Anda mengidentifikasi sertifikat.

  5. Untuk Location, pilih Global.

  6. Untuk Cakupan, pilih Default.

  7. Untuk Certificate type, pilih Create Google-managed certificate.

  8. Untuk Jenis Certificate Authority, pilih Publik.

  9. Di kolom Domain Names, tentukan daftar nama domain sertifikat yang dipisahkan koma. Setiap nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com. Nama domain juga dapat berupa nama domain karakter pengganti, seperti *.example.com.

  10. Untuk Jenis otorisasi, pilih Otorisasi DNS.

    Halaman ini mencantumkan otorisasi DNS nama domain. Jika nama domain tidak memiliki otorisasi DNS terkait, ikuti langkah-langkah berikut untuk membuatnya:

    1. Klik Buat otorisasi DNS yang tidak ada.
    2. Di kolom DNS authorization name, tentukan nama otorisasi DNS. Jenis otorisasi DNS default adalah FIXED_RECORD. Untuk menggunakan otorisasi DNS per project, centang kotak Per project authorization.
    3. Klik Create DNS authorization.
  11. Di kolom Labels, tentukan label yang akan dikaitkan dengan sertifikat. Untuk menambahkan label, klik Tambahkan label, lalu tentukan kunci dan nilai untuk label Anda.

  12. Klik Create.

    Sertifikat baru akan muncul dalam daftar sertifikat.

gcloud

Untuk membuat sertifikat global yang dikelola Google dengan otorisasi DNS, jalankan perintah certificate-manager certificates create dengan flag dns-authorizations:

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

Ganti kode berikut:

  • CERTIFICATE_NAME: nama sertifikat.
  • DOMAIN_NAME: nama domain target. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com, atau domain karakter pengganti, seperti *.myorg.example.com. Awalan titik tanda bintang (*.) menandakan sertifikat karakter pengganti.
  • AUTHORIZATION_NAMES: daftar nama otorisasi DNS yang Anda buat untuk sertifikat, yang dipisahkan koma.

Terraform

Gunakan resource 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
  }
}

API

Buat sertifikat dengan membuat permintaan POST ke metode certificates.create sebagai berikut:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
 }
}

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud.
  • CERTIFICATE_NAME: nama sertifikat.
  • DOMAIN_NAME: nama domain target. Nama domain harus berupa nama domain yang sepenuhnya memenuhi syarat, seperti myorg.example.com, atau domain karakter pengganti, seperti *.myorg.example.com. Awalan titik bintang (*.) menandakan sertifikat karakter pengganti.
  • AUTHORIZATION_NAMES: daftar nama otorisasi DNS yang dipisahkan koma.

Tambahkan data CNAME ke konfigurasi DNS Anda

Jika Anda menggunakan solusi DNS pihak ketiga untuk mengelola DNS, lihat dokumentasi untuk menambahkan data CNAME ke konfigurasi DNS. Jika Anda menggunakan Google Cloud untuk mengelola DNS, selesaikan langkah-langkah di bagian ini.

Konsol

Untuk membuat kumpulan data, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman DNS zones.

    Buka Cloud DNS zones

  2. Klik nama zona DNS tempat Anda ingin menambahkan data.

  3. Di halaman Zone details, klik Add standard.

  4. Di halaman Create record set, di kolom DNS name, masukkan subdomain zona DNS.

    Saat memasukkan nama subdomain, pastikan nama subdomain, termasuk teks berwarna abu-abu yang ditampilkan di kolom DNS name, cocok dengan nilai lengkap kolom dnsResourceRecord.name seperti yang ditampilkan di output perintah gcloud certificate-manager dns-authorizations describe.

    Lihat contoh berikut:

    • Jika nilai kolom dnsResourceRecord.name adalah _acme-challenge.myorg.example.com., dan teks berwarna abu-abu di kolom nama DNS adalah .example.com., masukkan _acme-challenge.myorg.

    • Jika nilai kolom dnsResourceRecord.name adalah _acme-challenge.myorg.example.com. , dan teks berwarna abu-abu di kolom nama DNS adalah .myorg.example.com., masukkan _acme-challenge.

    • Jika nilai kolom dnsResourceRecord.name adalah _acme-challenge_ujmmovf2vn55tgye.myorg.example.com., dan teks berwarna abu-abu di kolom Nama DNS adalah .myorg.example.com., masukkan _acme-challenge_ujmmovf2vn55tgye.

  5. Di kolom Resource record type, pilih CNAME.

  6. Di kolom TTL, masukkan nilai numerik positif untuk waktu data resource untuk aktif, yaitu jumlah waktu yang dapat disimpan dalam cache.

  7. Dari daftar TTL unit, pilih satuan waktu—misalnya, 30 minutes.

  8. Di kolom Canonical name, masukkan nilai lengkap kolom dnsResourceRecord.data seperti yang ditampilkan dalam output perintah gcloud certificate-manager dns-authorizations describe.

  9. Untuk memasukkan informasi tambahan, klik Tambahkan item.

  10. Klik Create.

gcloud

Saat Anda membuat otorisasi DNS, perintah gcloud CLI akan menampilkan data CNAME yang sesuai. Untuk menambahkan data CNAME ke konfigurasi DNS di zona DNS domain target, ikuti langkah-langkah berikut:

  1. Mulai transaksi data DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Ganti DNS_ZONE_NAME dengan nama zona DNS target.

  2. Tambahkan data CNAME ke zona DNS target:

    gcloud dns record-sets transaction add CNAME_RECORD \
        --name="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    Ganti kode berikut:

    • CNAME_RECORD: nilai data lengkap data CNAME yang ditampilkan oleh perintah Google Cloud CLI yang membuat otorisasi DNS yang sesuai.
    • VALIDATION_SUBDOMAIN_NAME: subdomain awalan zona DNS, seperti _acme-challenge. Anda dapat menyalin nama dari log perintah gcloud certificate-manager dns-authorizations describe, seperti yang dijelaskan dalam Membuat otorisasi DNS.
    • 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"
    
  3. 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]
}

Memverifikasi status sertifikat

Sebelum men-deploy sertifikat ke load balancer, pastikan sertifikat tersebut aktif. Diperlukan waktu beberapa menit agar status sertifikat berubah menjadi ACTIVE.

Konsol

  1. Di konsol Google Cloud, buka halaman Certificate Manager.

    Buka Certificate Manager

  2. Di tab Sertifikat, periksa kolom Status untuk sertifikat.

gcloud

Untuk memverifikasi status sertifikat, jalankan perintah berikut:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Ganti CERTIFICATE_NAME dengan nama sertifikat yang dikelola Google target.

Outputnya mirip dengan hal berikut ini:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
    - projects/myProject/locations/global/dnsAuthorizations/myCert
  domains:
  - myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  -   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Jika status sertifikat bukan ACTIVE setelah beberapa jam, pastikan Anda telah menambahkan data CNAME dengan benar ke konfigurasi DNS.

Untuk mengetahui langkah pemecahan masalah lainnya, lihat Memecahkan Masalah Pengelola Sertifikat.

Men-deploy sertifikat ke load balancer

Untuk men-deploy sertifikat global yang dikelola Google, ikuti langkah-langkah di bagian ini dan deploy sertifikat menggunakan peta sertifikat.

Untuk men-deploy sertifikat yang dikelola Google ke Load Balancer Aplikasi eksternal regional atau Load Balancer Aplikasi internal regional, atau ke Load Balancer Aplikasi internal lintas-region, lampirkan langsung ke proxy target.

Membuat peta sertifikat

Buat peta sertifikat yang mereferensikan entri peta sertifikat yang terkait dengan sertifikat Anda:

gcloud

Untuk membuat peta sertifikat, gunakan perintah gcloud certificate-manager maps create:

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 dan peta sertifikat Anda:

gcloud

Untuk membuat entri peta sertifikat, gunakan perintah gcloud certificate-manager maps entries create:

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 entri peta sertifikat.
  • CERTIFICATE_MAP_NAME: nama peta sertifikat tempat entri peta sertifikat dilampirkan.
  • CERTIFICATE_NAME: nama sertifikat yang ingin Anda kaitkan dengan entri peta sertifikat.
  • HOSTNAME: nama host yang ingin Anda kaitkan dengan entri peta sertifikat.

    Jika Anda membuat sertifikat dengan domain karakter pengganti, tentukan juga nama host dengan karakter pengganti, seperti *.example.com.

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
}

Memverifikasi bahwa entri peta sertifikat aktif

Pastikan entri peta sertifikat aktif sebelum melampirkan peta sertifikat yang sesuai ke proxy target.

Untuk memverifikasi entri peta sertifikat, gunakan perintah gcloud certificate-manager maps entries describe:

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.
  • CERTIFICATE_NAME: nama sertifikat yang ingin Anda kaitkan dengan entri peta sertifikat.

Outputnya mirip dengan hal berikut ini:

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

Melampirkan peta sertifikat ke proxy target

Anda dapat melampirkan peta sertifikat ke proxy target baru atau proxy target yang ada.

gcloud

Untuk melampirkan peta sertifikat ke proxy target baru, gunakan perintah gcloud compute target-https-proxies create:

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global

Ganti kode berikut:

  • PROXY_NAME: nama proxy target.
  • CERTIFICATE_MAP_NAME: nama peta sertifikat yang mereferensikan entri peta sertifikat dan sertifikat terkait.
  • URL_MAP: nama peta URL

Untuk melampirkan peta sertifikat ke proxy HTTPS target yang ada, gunakan perintah gcloud compute target-https-proxies update. Jika Anda tidak mengetahui nama proxy target yang ada, buka halaman Proxy target dan catat nama proxy target.

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

Setelah membuat atau memperbarui proxy target, jalankan perintah berikut untuk memverifikasinya:

gcloud compute target-https-proxies list

Terraform

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

Saat mengonfigurasi proxy target, jika Anda melampirkan sertifikat TLS (SSL) secara langsung dan juga melalui peta sertifikat, proxy akan menggunakan sertifikat yang dirujuk oleh peta sertifikat dan mengabaikan sertifikat TLS (SSL) yang dilampirkan secara langsung.

Menguji sertifikat yang di-deploy

Untuk setiap sertifikat yang telah Anda deploy, uji konektivitas ke setiap domain yang tercakup dalam sertifikat di alamat IP load balancer menggunakan perintah berikut:

openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443

Ganti kode berikut:

  • DOMAIN_NAME: nama domain target
  • IP_ADDRESS: alamat IP load balancer Anda

Untuk mengetahui informasi selengkapnya tentang pengujian konektivitas, lihat Menguji dengan OpenSSL

Memperbarui data DNS

Alihkan traffic dari layanan pihak ketiga ke Cloud Load Balancing. Lihat Memperbarui data A dan AAAA DNS agar mengarah ke alamat IP load balancer.

Langkah selanjutnya