In diesem Dokument werden die Schritte zum Anfordern eines Zertifikats mit dem Certificate Authority Service (CAS) beschrieben.
Wenn Sie Vertrauen aufbauen und die Kommunikation in Ihrer Google Distributed Cloud (GDC) mit Air Gap sichern möchten, fordern Sie ein ACME-aktiviertes oder ‑deaktiviertes Zertifikat vom Certificate Authority Service an.
Dieses Dokument richtet sich an Zielgruppen in der Gruppe der Anwendungsoperatoren, z. B. Anwendungsentwickler oder Data Scientists, die Zertifikatslebenszyklen in ihrem Projekt verwalten. Weitere Informationen finden Sie unter Dokumentation zu Zielgruppen für GDC mit Air Gap.
Hinweis
Bevor Sie ein Zertifikat anfordern können, müssen Sie die erforderlichen Berechtigungen anfordern und Ihre Umgebung vorbereiten.
IAM-Rollen anfordern
Wenn Sie Zertifikatanfragen erstellen, ansehen und löschen möchten, bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die Rolle CA Service Certificate Requester (certificate-authority-service-certificate-requester) im Projektnamespace der Zertifizierungsstelle zuzuweisen.
Umgebung vorbereiten
Laden Sie die gdcloud CLI herunter und installieren Sie sie, falls noch nicht geschehen.
Generieren Sie eine kubeconfig-Datei um den
kubectlZugriff zu konfigurieren.
Zertifikat mit aktivierter ACME-Funktion von der Zertifizierungsstelle anfordern
Wenn die Zertifizierungsstelle im ACME-Modus gehostet wird, gibt sie die ACME-Server-URL in ihrem Status aus, nachdem sie bereit ist.
Rufen Sie die ACME-Server-URL der Zertifizierungsstelle aus Ihrer Distributed Cloud-Umgebung ab:
kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'
Ersetzen Sie Folgendes:
CA_NAME: der Name der Zertifizierungsstelle, die eine Stamm- oder untergeordnete Zertifizierungsstelle sein kannUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindet
Zertifikat mit deaktivierter ACME-Funktion von der Zertifizierungsstelle anfordern
Wenn Sie eine Zertifikatanfrage mit deaktivierter ACME-Funktion erstellen möchten, müssen Sie eine CertificateRequest-Ressource erstellen und auf Ihre Distributed Cloud-Instanz mit Air Gap anwenden. Dazu gibt es zwei mögliche Vorgehensweisen:
- Erstellen Sie eine
CertificateResourceund fügen Sie der Ressource eine CSR hinzu. - Erstellen Sie eine
CertificateResourcemit einem automatisch generierten privaten GDC-Schlüssel und geben Sie die Zertifikatkonfigurationen als benutzerdefinierte Werte an.
Zertifikat mit einer CSR anfordern
Erstellen Sie eine
CertificateRequest-Ressource und speichern Sie sie als YAML-Datei mit dem Namencert-request.yaml. Erstellen Sie mit Ihrem privaten Schlüssel eine Zertifikatsignierungsanfrage (Certificate Signing Request, CSR) und fügen Sie sie Ihrer Ressource hinzu.Optional können Sie das Zertifikat mit einem vorkonfigurierten Satz von X.509-Parametern ausstellen, indem Sie den Namen der Vorlage in das Feld
certificateTemplateeingeben.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_OVERRIDEErsetzen Sie die folgenden Variablen:
Variable Beschreibung CERT_REQ_NAME der Name der CertificateRequest-RessourceUSER_PROJECT_NAMESPACE der Name des Namespaces, in dem sich das Nutzerprojekt befindet CA_NAME der Name der Zertifizierungsstelle, die eine Stamm- oder untergeordnete Zertifizierungsstelle sein kann CSR die Zertifikatsignierungsanfrage, die mit der Zertifizierungsstelle signiert werden soll SECRET_NAME der Name des Kubernetes-Secrets, das den privaten Schlüssel und signierte CA-Zertifikat enthält Ersetzen Sie die folgenden optionalen Variablen:
Variable Beschreibung TEMPLATE_NAME der Name der vordefinierten Zertifikatvorlage, die Sie verwenden möchten. Eine Liste der verfügbaren Vorlagen und Details zu Konflikten finden Sie unter Vordefinierte Zertifikatvorlagen. VALIDITY_START_TIME der Zeitpunkt, ab dem das Zertifikat gültig ist. Dieser Wert muss das Format YYYY-MM-DDTHH:MM:SSZhaben (z. B.2025-10-19T21:45:30Z). Wenn er nicht festgelegt ist, ist das Zertifikat sofort nach der Ausstellung gültig .VALIDITY_END_TIME der Zeitpunkt, zu dem das Zertifikat abläuft. Dieser Wert muss das Format YYYY-MM-DDTHH:MM:SSZhaben (z. B.2026-01-17T18:25:40Z). Wenn er nicht festgelegt ist, läuft das Zertifikat 90 Tage nach dem Startzeitpunkt ab.SUBJECT_OVERRIDE ein benutzerdefiniertes Subjekt, das im ausgestellten Zertifikat verwendet werden soll und die Subjektinformationen in der CSR überschreibt. Geben Sie diesen Wert als rohes, ASN.1 DER-codiertes X.509-Subjekt an. Wenden Sie die benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz an:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGErsetzen Sie
MANAGEMENT_API_SERVER_KUBECONFIGdurch den Pfad zur kubeconfig-Datei des Management API-Servers.Prüfen Sie, ob die Zertifikatanfrage bereit ist:
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))'Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindetCERT_REQ_NAME: der Name derCertificateRequest-Ressource
Die Ausgabe sieht etwa so aus:
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }Rufen Sie den Namen des Zertifikat-Secrets ab:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindetCERT_REQ_NAME: der Name derCertificateRequest-Ressource
Die Ausgabe zeigt den
SECRET_NAMEmit dem signierten Zertifikat:test-jwk-1
Zertifikat mit einem automatisch generierten Schlüssel anfordern
Erstellen Sie eine
CertificateRequest-Ressource und speichern Sie sie als YAML-Datei mit dem Namencert-request.yaml. Geben Sie die gewünschten Werte für das Zertifikat ein.Optional können Sie das Zertifikat mit einem vorkonfigurierten Satz von X.509-Parametern ausstellen, indem Sie den Namen der Vorlage in das Feld
certificateTemplateeingeben.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_OVERRIDEErsetzen Sie die folgenden Variablen:
Variable Beschreibung CERT_REQ_NAME der Name der CertificateRequest-RessourceUSER_PROJECT_NAMESPACE der Name des Namespaces, in dem sich das Nutzerprojekt befindet CA_NAME der Name der Zertifizierungsstelle, die eine Stamm- oder untergeordnete Zertifizierungsstelle sein kann SECRET_NAME der Name des Kubernetes-Secrets, das den privaten Schlüssel und signierte CA-Zertifikat enthält Ersetzen Sie die folgenden optionalen Variablen. Sie müssen mindestens eines der Felder aus dem Block
spec.certificateConfig.subjectConfigderCertificateRequest-Ressource angeben:Variable Beschreibung COMMON_NAME der allgemeine Name des Zertifikats ORGANIZATION die Organisation, die im Zertifikat verwendet werden soll LOCALITY der Ort des Zertifikats STATE das Bundesland oder die Provinz, das bzw. die im Zertifikat verwendet werden soll COUNTRY das Land des Zertifikats DNS_NAMES eine Liste von dNSName subjectAltNames, die im Zertifikat festgelegt werden sollenIP_ADDRESS eine Liste von ipAddress subjectAltNames, die im Zertifikat festgelegt werden sollenRFC822_NAMES eine Liste von rfc822Name subjectAltNames, die im Zertifikat festgelegt werden sollenURIS eine Liste von uniformResourceIdentifier subjectAltNames, die im Zertifikat festgelegt werden sollenTEMPLATE_NAME der Name der vordefinierten Zertifikatvorlage, die Sie verwenden möchten. Eine Liste der verfügbaren Vorlagen und Details zu Konflikten finden Sie unter Vordefinierte Zertifikatvorlagen. VALIDITY_START_TIME der Zeitpunkt, ab dem das Zertifikat gültig ist. Dieser Wert muss das Format YYYY-MM-DDTHH:MM:SSZhaben (z. B.2025-10-19T21:45:30Z). Wenn er nicht festgelegt ist, ist das Zertifikat sofort nach der Ausstellung gültig .VALIDITY_END_TIME der Zeitpunkt, zu dem das Zertifikat abläuft. Dieser Wert muss das Format YYYY-MM-DDTHH:MM:SSZhaben (z. B.2026-01-17T18:25:40Z). Wenn er nicht festgelegt ist, läuft das Zertifikat 90 Tage nach dem Startzeitpunkt ab.SUBJECT_OVERRIDE ein benutzerdefiniertes Subjekt, das im ausgestellten Zertifikat verwendet werden soll und die Subjektinformationen in der CSR überschreibt. Geben Sie diesen Wert als rohes, ASN.1 DER-codiertes X.509-Subjekt an. Wenden Sie die benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz an:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGErsetzen Sie
MANAGEMENT_API_SERVER_KUBECONFIGdurch den Pfad zur kubeconfig-Datei des Management API-Servers.Prüfen Sie, ob die Zertifikatanfrage bereit ist:
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))'Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindetCERT_REQ_NAME: der Name derCertificateRequest-Ressource
Die Ausgabe sieht etwa so aus:
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }Rufen Sie den Namen des Zertifikat-Secrets ab:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindetCERT_REQ_NAME: der Name derCertificateRequest-Ressource
Die Ausgabe zeigt den
SECRET_NAMEmit dem signierten Zertifikat:test-jwk-1
Zertifikatanfragen auflisten
Verwenden Sie den Parameter certificaterequests, um alle CertificateRequest-Ressourcen aufzulisten:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindet
Im Folgenden sehen Sie einen Beispielbefehl mit dem Namespace agtest-project:
kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig -n agtest-project get certificaterequest.pki.security.gdc.goog
Die erwartete Ausgabe sieht in etwa so aus:
NAME READY AGE
test-externalca-subca-cert-req-with-csr True 17h
test-externalca-subca-cert-req-with-csr-override True 17h
Zertifikat löschen
Wenn Sie ein Zertifikat löschen möchten, müssen Sie die entsprechende benutzerdefinierte CertificateRequest-Ressource löschen. Durch diese Aktion wird die Ressource aus der CAS-Datenbank entfernt.
Suchen Sie den Namen der
CertificateRequest, die Sie löschen möchten. Sie können Zertifikatanfragen auflisten, um den Namen zu finden.Löschen Sie die
CertificateRequest-Ressource:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE delete certificaterequest.pki.security.gdc.goog/CERT_REQ_NAMEErsetzen Sie Folgendes:
MANAGEMENT_API_SERVER_KUBECONFIG: der Pfad zur kubeconfig-Datei des Management API-ServersUSER_PROJECT_NAMESPACE: der Name des Namespaces, in dem sich das Nutzerprojekt befindetCERT_REQ_NAME: der Name derCertificateRequest-Ressource
Limits und Bereinigung von Zertifikatanfragen
Um die Systemstabilität aufrechtzuerhalten und eine hohe Ressourcennutzung zu vermeiden, erzwingt CAS Limits für die Anzahl der benutzerdefinierten CertificateRequest-Ressourcen und bietet eine optionale automatische Bereinigungsfunktion.
Kontingent für Zertifikatanfragen
CAS erzwingt ein Kontingent für die Anzahl der benutzerdefinierten CertificateRequest-Ressourcen pro Organisation. Das Standardlimit liegt bei 5.000. Das Überschreiten dieses Limits kann die Leistung von CAS und Management API Server beeinträchtigen.
Wenn sich die Gesamtzahl der CertificateRequest-Ressourcen dem Kontingent nähert (z. B. bei 80% und 90% des Limits), werden in der Befehlsausgabe Warnungen angezeigt, wenn Sie neue Anfragen erstellen. Wenn Sie versuchen, eine CertificateRequest zu erstellen, nachdem das Kontingent erreicht wurde, wird die Anfrage abgelehnt.
Möglicherweise wird eine Fehlermeldung wie die folgende angezeigt:
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
Wenn dieser Fehler auftritt, müssen Sie möglicherweise alte oder unnötige
RessourcenCertificateRequest löschen. Wenn Sie das Kontingent anpassen möchten, wenden Sie sich an ein Mitglied der Gruppe der Infrastrukturoperatoren in Ihrer Organisation. Diese können das Kontingent überschreiben, indem sie der Anleitung im
Runbook
PLATAUTH-G2102folgen.
Automatische Bereinigung
Sie können die automatische Bereinigung aktivieren, um abgelaufene CertificateRequest-Ressourcen zu löschen. Mit dieser Funktion können Ressourcen freigegeben werden, indem sie nach einer konfigurierbaren Kulanzfrist entfernt werden. Die Kulanzfrist definiert die Zeit zwischen dem Ablauf eines Zertifikats und dem Löschen der CertificateRequest-Ressource.
Die automatische Bereinigung ist standardmäßig deaktiviert. Ein Mitglied der Gruppe der Infrastruktur operatoren in Ihrer Organisation kann diese Funktion aktivieren und die Kulanzfrist konfigurieren , indem es der Anleitung im Runbook PLATAUTH-G2103 folgt. Die Funktion bleibt deaktiviert, wenn die Kulanzfrist nicht festgelegt oder auf null gesetzt ist.