Dokumen ini menjelaskan langkah-langkah untuk meminta sertifikat menggunakan Certificate Authority Service (CAS).
Untuk membangun kepercayaan dan mengamankan komunikasi dalam Google Distributed Cloud (GDC) air-gapped Anda, minta sertifikat yang mengaktifkan atau menonaktifkan ACME dari Certificate Authority Service.
Dokumen ini ditujukan untuk audiens dalam grup operator aplikasi, seperti developer aplikasi atau ilmuwan data, yang mengelola siklus proses sertifikat dalam project mereka. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC air-gapped.
Sebelum memulai
Sebelum dapat meminta sertifikat, Anda harus meminta izin yang diperlukan dan menyiapkan lingkungan.
Meminta peran IAM
Untuk membuat, melihat, dan menghapus permintaan sertifikat, hubungi Admin IAM Organisasi Anda untuk memberi Anda peran CA Service Certificate Requester (certificate-authority-service-certificate-requester) di namespace project certificate authority.
Menyiapkan lingkungan Anda
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 CA root 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 air-gapped Anda. 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 Certificate Signing Request (CSR) dan tambahkan ke resource Anda.Secara opsional, 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 Certificate Signing Request yang akan 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 yang telah ditentukan sebelumnya yang ingin Anda gunakan. Untuk mengetahui daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat yang telah ditentukan sebelumnya. 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 langsung berlaku setelah diterbitkan.VALIDITY_END_TIME waktu saat sertifikat berakhir masa berlakunya. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ(misalnya,2026-01-17T18:25:40Z). Jika tidak ditetapkan, sertifikat akan berakhir masa berlakunya 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 ASN.1 DER. 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 otomatis
Buat resource
CertificateRequestdan simpan sebagai file YAML bernamacert-request.yaml. Isi nilai yang dipilih untuk sertifikat.Secara opsional, 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 yang telah ditentukan sebelumnya yang ingin Anda gunakan. Untuk mengetahui daftar template yang tersedia dan detail terkait konflik, lihat Template sertifikat yang telah ditentukan sebelumnya. 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 langsung berlaku setelah diterbitkan.VALIDITY_END_TIME waktu saat sertifikat berakhir masa berlakunya. Nilai ini harus dalam format YYYY-MM-DDTHH:MM:SSZ(misalnya,2026-01-17T18:25:40Z). Jika tidak ditetapkan, sertifikat akan berakhir masa berlakunya 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 ASN.1 DER. 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 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 hal 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 pada 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. Melebihi batas ini dapat menurunkan performa CAS dan Server Management API.
Saat jumlah total resource CertificateRequest mendekati kuota (misalnya, pada 80% dan 90% batas), Anda akan melihat peringatan dalam 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 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 Anda mengalami error ini, Anda mungkin perlu menghapus resource yang lama atau tidak diperlukan.CertificateRequest 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 masa berlakunya telah berakhir. Fitur ini membantu mengosongkan resource dengan menghapusnya setelah masa tenggang yang dapat dikonfigurasi. Masa tenggang menentukan jangka 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.