Dokumen ini menjelaskan langkah-langkah untuk meminta sertifikat menggunakan Certificate Authority Service (CAS).
Untuk membangun kepercayaan dan mengamankan komunikasi dalam Google Distributed Cloud (GDC) dengan air gap, minta sertifikat yang diaktifkan atau dinonaktifkan ACME dari Certificate Authority Service.
Dokumen ini ditujukan untuk audiens dalam grup operator aplikasi, seperti developer aplikasi atau data scientist, yang mengelola siklus proses sertifikat dalam project mereka. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.
Sebelum memulai
Sebelum dapat meminta sertifikat, Anda harus meminta izin yang diperlukan dan menyiapkan lingkungan Anda.
Meminta peran IAM
Untuk membuat, melihat, dan menghapus permintaan sertifikat, hubungi Admin Org IAM Anda untuk memberi Anda peran CA Service Certificate Requester (certificate-authority-service-certificate-requester) di namespace project certificate authority.
Menyiapkan lingkungan Anda
Download dan instal gdcloud CLI, jika Anda belum melakukannya.
Buat file kubeconfig untuk mengonfigurasi akses
kubectl.
Meminta sertifikat menggunakan CA dengan mode ACME diaktifkan
Jika certificate authority 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 root CA atau sub-CAUSER_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 dengan air-gap. Ada dua cara untuk melakukannya:
- Buat
CertificateResourcedan sertakan CSR dalam resource. - Buat
CertificateResourcemenggunakan kunci pribadi yang dibuat otomatis oleh GDC dan berikan konfigurasi sertifikat sebagai nilai kustom.
Meminta sertifikat menggunakan CSR
Buat resource
CertificateRequestdan simpan sebagai file YAML bernamacert-request.yaml. Gunakan kunci pribadi Anda untuk membuat Permintaan Penandatanganan Sertifikat (CSR) dan menambahkannya ke resource Anda.Atau, Anda dapat menerbitkan sertifikat dengan kumpulan 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_OVERRIDEGanti variabel berikut:
Variabel Deskripsi CERT_REQ_NAME nama resource CertificateRequestUSER_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 ditandatangani 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 mengetahui daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat yang telah ditetapkan. VALIDITY_START_TIME waktu saat sertifikat dianggap valid. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ(misalnya,2025-10-19T21:45:30Z). Jika tidak ditetapkan, sertifikat akan langsung valid setelah diterbitkan.VALIDITY_END_TIME waktu habis masa berlaku sertifikat. 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 mulainya.SUBJECT_OVERRIDE subjek kustom yang akan digunakan dalam sertifikat yang diterbitkan, yang menggantikan informasi subjek dalam CSR. Berikan nilai ini sebagai subjek X.509 mentah yang dienkode DER ASN.1. Terapkan resource kustom ke instance Distributed Cloud Anda:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGGanti
MANAGEMENT_API_SERVER_KUBECONFIGdengan 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))'Ganti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna beradaCERT_REQ_NAMEnama resourceCertificateRequest
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 secret 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'Ganti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna beradaCERT_REQ_NAMEnama resourceCertificateRequest
Output akan menampilkan
SECRET_NAMEyang berisi sertifikat yang ditandatangani:test-jwk-1
Meminta sertifikat menggunakan kunci yang dibuat secara otomatis
Buat resource
CertificateRequestdan simpan sebagai file YAML bernamacert-request.yaml. Isi nilai yang dipilih untuk sertifikat.Atau, Anda dapat menerbitkan sertifikat dengan kumpulan 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_OVERRIDEGanti variabel berikut:
Variabel Deskripsi CERT_REQ_NAME nama resource CertificateRequestUSER_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 satu kolom dari blok
spec.certificateConfig.subjectConfigresourceCertificateRequest: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 daftar dNSName subjectAltNamesyang akan ditetapkan pada sertifikatIP_ADDRESS daftar ipAddress subjectAltNamesyang akan ditetapkan pada sertifikatRFC822_NAMES daftar rfc822Name subjectAltNamesyang akan ditetapkan pada sertifikatURIS daftar uniformResourceIdentifier subjectAltNamesyang akan ditetapkan pada sertifikatTEMPLATE_NAME nama template sertifikat standar yang ingin Anda gunakan. Untuk mengetahui daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat yang telah ditetapkan. VALIDITY_START_TIME waktu saat sertifikat dianggap valid. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ(misalnya,2025-10-19T21:45:30Z). Jika tidak ditetapkan, sertifikat akan langsung valid setelah diterbitkan.VALIDITY_END_TIME waktu habis masa berlaku sertifikat. 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 mulainya.SUBJECT_OVERRIDE subjek kustom yang akan digunakan dalam sertifikat yang diterbitkan, yang menggantikan informasi subjek dalam CSR. Berikan nilai ini sebagai subjek X.509 mentah yang dienkode DER ASN.1. Terapkan resource kustom ke instance Distributed Cloud Anda:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGGanti
MANAGEMENT_API_SERVER_KUBECONFIGdengan 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))'Ganti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna beradaCERT_REQ_NAMEnama resourceCertificateRequest
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 secret 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'Ganti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna beradaCERT_REQ_NAME: nama resourceCertificateRequest
Output akan menampilkan
SECRET_NAMEyang 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 certificaterequest.pki.security.gdc.goog
Ganti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna berada
Berikut adalah contoh perintah yang menggunakan namespace agtest-project:
kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig -n agtest-project get certificaterequest.pki.security.gdc.goog
Output yang diharapkan mirip dengan berikut ini:
NAME READY AGE
test-externalca-subca-cert-req-with-csr True 17h
test-externalca-subca-cert-req-with-csr-override True 17h
Menghapus sertifikat
Untuk menghapus sertifikat, Anda harus menghapus resource kustom CertificateRequest yang sesuai. Tindakan ini akan menghapus resource dari database CAS.
Temukan nama
CertificateRequestyang ingin Anda hapus. Anda dapat mencantumkan permintaan sertifikat untuk membantu menemukan nama.Hapus resource
CertificateRequest:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE delete certificaterequest.pki.security.gdc.goog/CERT_REQ_NAMEGanti kode berikut:
MANAGEMENT_API_SERVER_KUBECONFIG: jalur ke file kubeconfig server Management APIUSER_PROJECT_NAMESPACE: nama namespace tempat project pengguna beradaCERT_REQ_NAME: nama resourceCertificateRequest
Batas dan pembersihan permintaan sertifikat
Untuk membantu menjaga stabilitas sistem dan mencegah penggunaan resource yang tinggi, CAS
menerapkan batas jumlah resource kustom CertificateRequest dan
menawarkan fitur pembersihan otomatis opsional.
Kuota permintaan sertifikat
CAS menerapkan kuota pada jumlah resource kustom CertificateRequest per organisasi, dengan batas default 5.000. Jika batas ini terlampaui, performa CAS dan Management API Server dapat menurun.
Saat total jumlah resource CertificateRequest mendekati kuota (misalnya, pada 80% dan 90% dari batas), Anda akan melihat peringatan di output perintah saat membuat permintaan baru. Jika Anda mencoba membuat
CertificateRequest setelah kuota tercapai, permintaan akan ditolak.
Anda mungkin melihat pesan error yang mirip dengan yang berikut ini:
Error from server (Forbidden): error when creating "cert-request.yaml":
admission webhook "certificaterequests.pki.security.gdc.goog" denied the
request: the number of certificate requests has exceeded the per organization
limit of {LIMIT}. Please refer to the guide PLATAUTH-G2102 for troubleshooting
this issue
Jika mengalami error ini, Anda mungkin perlu
menghapus resource CertificateRequest yang lama atau tidak diperlukan. Untuk menyesuaikan kuota, hubungi anggota grup operator infrastruktur dalam organisasi Anda. Mereka dapat mengganti kuota dengan mengikuti petunjuk dalam runbook PLATAUTH-G2102.
Pembersihan otomatis
Anda dapat mengaktifkan pembersihan otomatis untuk menghapus resource CertificateRequest yang sudah tidak berlaku. Fitur ini membantu mengosongkan resource dengan menghapusnya setelah
masa tenggang yang dapat dikonfigurasi. Masa tenggang menentukan durasi waktu antara masa berlaku sertifikat berakhir dan saat resource CertificateRequest dihapus.
Pembersihan otomatis dinonaktifkan secara default. Anggota grup operator infrastruktur dalam organisasi Anda dapat mengaktifkan fitur ini dan mengonfigurasi masa tenggang dengan mengikuti petunjuk dalam runbook PLATAUTH-G2103. Fitur ini akan tetap dinonaktifkan jika masa tenggang tidak ditetapkan atau ditetapkan ke nol.