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
Buat resource
CertificateRequest
dan simpan sebagai file YAML bernamacert-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. 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.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" }
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
Buat resource
CertificateRequest
dan simpan sebagai file YAML bernamacert-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 daftardNSName 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.Terapkan resource kustom ke instance Distributed Cloud Anda:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
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" }
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