Meminta sertifikat

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

Untuk membangun kepercayaan dan komunikasi yang aman dalam GDC air-gapped (Google Distributed Cloud), minta sertifikat yang mendukung atau tidak mendukung ACME dari Layanan Otoritas Sertifikat.

Sebelum memulai

Untuk mendapatkan izin yang diperlukan untuk meminta sertifikat, minta Admin IAM Organisasi Anda untuk memberi Anda peran Admin Layanan Otoritas Sertifikat (certificate-authority-service-admin).

Dapatkan file kubeconfig

Untuk menjalankan perintah terhadap server Management API, pastikan Anda memiliki resource berikut:

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

Gunakan jalur ke file kubeconfig server Management API untuk menggantikan 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 air-gapped Anda. 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:

    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
      signedCertificateSecret: SECRET_NAME
    

    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.
  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:

    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
      signedCertificateSecret: SECRET_NAME
    

    Ganti COMMON_NAME dengan nama umum sertifikat.

    Ganti variabel opsional berikut. Anda harus menyertakan setidaknya salah satu nilai ini dalam resource CertificateRequest:

    Variabel Deskripsi
    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.
  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