Auf dieser Seite wird beschrieben, wie Sie ein Zertifikat mit dem Certificate Authority Service anfordern.
Um Vertrauen und sichere Kommunikation in Ihrem Google Distributed Cloud-System (GDC) mit Air Gap zu schaffen, fordern Sie ein ACME-aktiviertes oder ‑deaktiviertes Zertifikat vom Certificate Authority Service an.
Hinweise
Bevor Sie ein Zertifikat anfordern können, müssen Sie die erforderlichen Berechtigungen und eine kubeconfig-Datei haben.
Erforderliche Berechtigungen
Bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die Rolle „CA Service Certificate Requester“ (certificate-authority-service-certificate-requester) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Anfordern eines Zertifikats benötigen. Weitere Informationen zu Rollen finden Sie unter Rollendefinitionen.
kubeconfig-Datei abrufen
So führen Sie Befehle für den Management API-Server aus:
Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.
Verwenden Sie den Pfad zur kubeconfig-Datei des Management API-Servers, um
MANAGEMENT_API_SERVER_KUBECONFIGin dieser Anleitung zu ersetzen.
Zertifikat über Zertifizierungsstelle mit aktiviertem ACME-Modus 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 CA ACME-Server-URL 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 kann.USER_PROJECT_NAMESPACE: Der Name des Namespace, in dem sich das Nutzerprojekt befindet.
Zertifikat über eine Zertifizierungsstelle anfordern, wenn der ACME-Modus deaktiviert ist
Wenn Sie eine Zertifikatsanfrage erstellen möchten, bei der der ACME-Modus deaktiviert ist, müssen Sie eine CertificateRequest-Ressource erstellen und auf Ihre Distributed Cloud-Air-Gap-Instanz anwenden. Dazu gibt es zwei mögliche Vorgehensweisen:
- Erstellen Sie eine
CertificateResourceund fügen Sie der Ressource eine CSR hinzu. - Erstellen Sie ein
CertificateResourcemit einem automatisch generierten privaten Schlüssel und geben Sie die Zertifikatskonfigurationen als benutzerdefinierte Werte an.
Zertifikat über eine 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 Anfrage zur Signierung des Zertifikats (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 des Zertifikats. USER_PROJECT_NAMESPACE Der Name des Namespace, in dem sich das Nutzerprojekt befindet. CA_NAME Der Name der Zertifizierungsstelle, die eine Stamm- oder untergeordnete CA sein kann. CSR Die Anfrage zur Zertifikatsignierung, die von der Zertifizierungsstelle signiert werden soll. SECRET_NAME Der Name des Kubernetes-Secrets, das den privaten Schlüssel und das signierte CA-Zertifikat enthält. Ersetzen Sie die folgenden optionalen Variablen:
Variable Beschreibung TEMPLATE_NAME Der Name der vordefinierten Zertifikatsvorlage, die Sie verwenden möchten. Eine Liste der verfügbaren Vorlagen und Details zu Konflikten finden Sie unter Vordefinierte Zertifikatsvorlagen. VALIDITY_START_TIME Zeit, ab der das Zertifikat als gültig gilt. 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 benutzerdefinierter Betreff, der im ausgestellten Zertifikat verwendet wird und die Betreffinformationen in der CSR überschreibt. Geben Sie diesen Wert als das rohe, ASN.1-DER-codierte 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 Zertifikatsanfrage 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))'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 Zertifikatssecrets 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'Die Ausgabe zeigt das
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 ausgewählten 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 des Zertifikats. USER_PROJECT_NAMESPACE Der Name des Namespace, in dem sich das Nutzerprojekt befindet. CA_NAME Der Name der Zertifizierungsstelle, die eine Stamm- oder untergeordnete CA sein kann. SECRET_NAME Der Name des Kubernetes-Secrets, das den privaten Schlüssel und das signierte CA-Zertifikat enthält. Ersetzen Sie die folgenden optionalen Variablen. Sie müssen mindestens eines der Felder aus dem
spec.certificateConfig.subjectConfig-Block der RessourceCertificateRequestangeben:Variable Beschreibung COMMON_NAME Der allgemeine Name des Zertifikats. ORGANIZATION Die Organisation, die im Zertifikat verwendet werden soll. LOCALITY Der Ort des Zertifikats. STATE Bundesland oder Provinz, das im Zertifikat verwendet werden soll. COUNTRY Das Land des Zertifikats. DNS_NAMES DNSNamesist eine Liste vondNSName subjectAltNames, die für das Zertifikat festgelegt werden sollen.IP_ADDRESS Eine Liste der ipAddress subjectAltNames, die für das Zertifikat festgelegt werden sollen.RFC822_NAMES Eine Liste der rfc822Name subjectAltNames, die für das Zertifikat festgelegt werden sollen.URIS Eine Liste der uniformResourceIdentifier subjectAltNames, die für das Zertifikat festgelegt werden sollen.TEMPLATE_NAME Der Name der vordefinierten Zertifikatsvorlage, die Sie verwenden möchten. Eine Liste der verfügbaren Vorlagen und Details zu Konflikten finden Sie unter Vordefinierte Zertifikatsvorlagen. VALIDITY_START_TIME Zeit, ab der das Zertifikat als gültig gilt. 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 benutzerdefinierter Betreff, der im ausgestellten Zertifikat verwendet wird und die Betreffinformationen in der CSR überschreibt. Geben Sie diesen Wert als das rohe, ASN.1-DER-codierte 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_KUBECONFIGPrüfen Sie, ob die Zertifikatsanfrage 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))'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 Zertifikatssecrets 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'Die Ausgabe zeigt das
SECRET_NAMEmit dem signierten Zertifikat:test-jwk-1
Zertifikatsanfragen auflisten
Mit dem Parameter certificaterequests können Sie alle CertificateRequest-Ressourcen auflisten:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests
Die Ausgabe sieht dann ungefähr so aus:
NAMESPACE NAME READY AGE
foo cert-req True 30s