Meminta sertifikat

Halaman ini menjelaskan langkah-langkah untuk meminta sertifikat menggunakan Certificate Authority Service.

Untuk membangun kepercayaan dan komunikasi yang aman dalam lingkungan air-gapped Google Distributed Cloud (GDC), minta sertifikat yang mendukung atau tidak mendukung ACME dari Certificate Authority Service.

Sebelum memulai

Sebelum Anda dapat meminta sertifikat, pastikan Anda memiliki izin yang diperlukan dan file kubeconfig.

Izin yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk meminta sertifikat, minta Admin IAM Organisasi Anda untuk memberi Anda peran CA Service Certificate Requester (certificate-authority-service-certificate-requester). Untuk mengetahui informasi selengkapnya tentang peran, lihat Definisi peran.

Dapatkan file kubeconfig

Untuk menjalankan perintah terhadap server Management API, lakukan hal berikut:

  1. Login dan buat file kubeconfig untuk server Management API jika Anda belum memilikinya.

  2. Gunakan jalur ke file kubeconfig server Management API untuk mengganti MANAGEMENT_API_SERVER_KUBECONFIG dalam petunjuk ini.

Meminta sertifikat menggunakan CA dengan mode ACME diaktifkan

Jika dihosting dalam mode ACME, Certificate Authority akan menampilkan URL server ACME dalam statusnya setelah siap.

Kumpulkan URL server ACME CA dari lingkungan Distributed Cloud Anda:

kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'

Ganti kode berikut:

  • CA_NAME: Nama CA, yang dapat berupa CA root atau sub-CA.
  • USER_PROJECT_NAMESPACE: Nama namespace tempat project pengguna berada.

Meminta sertifikat menggunakan CA dengan mode ACME dinonaktifkan

Untuk membuat permintaan sertifikat dengan mode ACME dinonaktifkan, Anda harus membuat dan menerapkan resource CertificateRequest ke instance Distributed Cloud yang terisolasi dari internet. Ada dua cara untuk melakukannya:

  • Buat CertificateResource dan sertakan CSR dalam resource.
  • Buat CertificateResource menggunakan kunci pribadi yang dibuat otomatis GDC dan berikan konfigurasi sertifikat sebagai nilai kustom.

Meminta sertifikat menggunakan CSR

  1. Buat resource CertificateRequest dan simpan sebagai file YAML bernama cert-request.yaml. Gunakan kunci pribadi Anda untuk membuat Permintaan Penandatanganan Sertifikat (CSR) dan tambahkan ke resource Anda.

    Atau, Anda dapat menerbitkan sertifikat dengan serangkaian parameter X.509 yang telah dikonfigurasi sebelumnya dengan memasukkan nama template ke dalam kolom certificateTemplate.

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      csr: CSR
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    Ganti variabel berikut:

    Variabel Deskripsi
    CERT_REQ_NAME Nama sertifikat.
    USER_PROJECT_NAMESPACE Nama namespace tempat project pengguna berada.
    CA_NAME Nama CA, yang dapat berupa CA root atau sub-CA.
    CSR Permintaan Penandatanganan Sertifikat untuk menandatangani menggunakan CA.
    SECRET_NAME Nama Secret Kubernetes yang menyimpan kunci pribadi dan sertifikat CA yang ditandatangani.

    Ganti variabel opsional berikut:

    Variabel Deskripsi
    TEMPLATE_NAME Nama template sertifikat standar yang ingin Anda gunakan. Untuk melihat daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat standar.
    VALIDITY_START_TIME Waktu mulai sertifikat dianggap valid. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ (misalnya, 2025-10-19T21:45:30Z). Jika tidak ditetapkan, sertifikat akan valid segera setelah diterbitkan.
    VALIDITY_END_TIME Waktu saat masa berlaku sertifikat berakhir. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ (misalnya, 2026-01-17T18:25:40Z). Jika tidak ditetapkan, masa berlaku sertifikat akan berakhir 90 hari setelah waktu dimulainya.
    SUBJECT_OVERRIDE Subjek kustom yang akan digunakan dalam sertifikat yang diterbitkan, menggantikan informasi subjek dalam CSR. Berikan nilai ini sebagai subjek X.509 yang dienkode DER ASN.1 mentah.
  2. Terapkan resource kustom ke instance Distributed Cloud Anda:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    Ganti MANAGEMENT_API_SERVER_KUBECONFIG dengan jalur ke file kubeconfig server Management API.

  3. Verifikasi kesiapan permintaan sertifikat:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    Outputnya mirip dengan hal berikut ini:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Dapatkan nama rahasia sertifikat:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    Output menampilkan SECRET_NAME yang berisi sertifikat yang ditandatangani:

    test-jwk-1
    

Meminta sertifikat menggunakan kunci yang dibuat secara otomatis

  1. Buat resource CertificateRequest dan simpan sebagai file YAML bernama cert-request.yaml. Isi nilai yang dipilih untuk sertifikat.

    Atau, Anda dapat menerbitkan sertifikat dengan serangkaian parameter X.509 yang telah dikonfigurasi sebelumnya dengan memasukkan nama template ke dalam kolom certificateTemplate.

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      certificateConfig:
        subjectConfig:
          commonName: COMMON_NAME
          organization: ORGANIZATION
          locality: LOCALITY
          state: STATE
          country: COUNTRY
          dnsNames: 
          - DNS_NAMES
          ipAddresses:
          - IP_ADDRESSES
          rfc822Names:
          - RFC822NAMES
          uris:
          - URIS
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    Ganti variabel berikut:

    Variabel Deskripsi
    CERT_REQ_NAME Nama sertifikat.
    USER_PROJECT_NAMESPACE Nama namespace tempat project pengguna berada.
    CA_NAME Nama CA, yang dapat berupa CA root atau sub-CA.
    SECRET_NAME Nama Secret Kubernetes yang menyimpan kunci pribadi dan sertifikat CA yang ditandatangani.

    Ganti variabel opsional berikut. Anda harus menyertakan setidaknya salah satu kolom dari blok spec.certificateConfig.subjectConfig pada resource CertificateRequest:

    Variabel Deskripsi
    COMMON_NAME Nama umum sertifikat.
    ORGANIZATION Organisasi yang akan digunakan pada sertifikat.
    LOCALITY Lokalitas sertifikat.
    STATE Negara Bagian atau Provinsi yang akan digunakan pada sertifikat.
    COUNTRY Negara sertifikat.
    DNS_NAMES DNSNames adalah daftar dNSName subjectAltNames yang akan ditetapkan pada sertifikat.
    IP_ADDRESS Daftar ipAddress subjectAltNames yang akan ditetapkan pada sertifikat.
    RFC822_NAMES Daftar rfc822Name subjectAltNames yang akan ditetapkan pada sertifikat.
    URIS Daftar uniformResourceIdentifier subjectAltNames yang akan ditetapkan pada sertifikat.
    TEMPLATE_NAME Nama template sertifikat standar yang ingin Anda gunakan. Untuk melihat daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat standar.
    VALIDITY_START_TIME Waktu mulai sertifikat dianggap valid. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ (misalnya, 2025-10-19T21:45:30Z). Jika tidak ditetapkan, sertifikat akan valid segera setelah diterbitkan.
    VALIDITY_END_TIME Waktu saat masa berlaku sertifikat berakhir. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ (misalnya, 2026-01-17T18:25:40Z). Jika tidak ditetapkan, masa berlaku sertifikat akan berakhir 90 hari setelah waktu dimulainya.
    SUBJECT_OVERRIDE Subjek kustom yang akan digunakan dalam sertifikat yang diterbitkan, menggantikan informasi subjek dalam CSR. Berikan nilai ini sebagai subjek X.509 yang dienkode DER ASN.1 mentah.
  2. Terapkan resource kustom ke instance Distributed Cloud Anda:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. Verifikasi kesiapan permintaan sertifikat:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    Outputnya mirip dengan hal berikut ini:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Dapatkan nama rahasia sertifikat:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    Output menampilkan SECRET_NAME yang berisi sertifikat yang ditandatangani:

    test-jwk-1
    

Mencantumkan permintaan sertifikat

Gunakan parameter certificaterequests untuk mencantumkan semua resource CertificateRequest:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

Outputnya terlihat mirip dengan yang berikut ini:

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s