Zertifikat anfordern

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 herzustellen, fordern Sie ein ACME-aktiviertes oder ‑deaktiviertes Zertifikat vom Certificate Authority Service an.

Hinweise

Bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die Rolle „Certificate Authority Service Admin“ (certificate-authority-service-admin) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Anfordern eines Zertifikats benötigen.

kubeconfig-Datei abrufen

Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:

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_KUBECONFIG in 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, bei der 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 CertificateResource und fügen Sie der Ressource eine CSR hinzu.
  • Erstellen Sie ein CertificateResource mit einem automatisch generierten privaten Schlüssel von GDC und geben Sie die Zertifikatskonfigurationen als benutzerdefinierte Werte an.

Zertifikat über eine CSR anfordern

  1. Erstellen Sie eine CertificateRequest-Ressource und speichern Sie sie als YAML-Datei mit dem Namen cert-request.yaml. Erstellen Sie mit Ihrem privaten Schlüssel eine Anfrage für die Signierung des Zertifikats (Certificate Signing Request, CSR) und fügen Sie sie Ihrer Ressource hinzu:

    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
    

    Ersetzen 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 Zertifizierungsstelle sein kann.
    CSR Die Anfrage zur Zertifikatsignierung, die mit der Zertifizierungsstelle signiert werden soll.
    SECRET_NAME Der Name des Kubernetes-Secrets, das den privaten Schlüssel und das signierte CA-Zertifikat enthält.
  2. Wenden Sie die benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz an:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    Ersetzen Sie MANAGEMENT_API_SERVER_KUBECONFIG durch den Pfad zur kubeconfig-Datei des Management API-Servers.

  3. 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"
    }
    
  4. 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'
    

    Die Ausgabe zeigt das SECRET_NAME mit dem signierten Zertifikat:

    test-jwk-1
    

Zertifikat mit einem automatisch generierten Schlüssel anfordern

  1. Erstellen Sie eine CertificateRequest-Ressource und speichern Sie sie als YAML-Datei mit dem Namen cert-request.yaml. Geben Sie die ausgewählten Werte für das Zertifikat ein:

    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
    

    Ersetzen Sie COMMON_NAME durch den allgemeinen Namen des Zertifikats.

    Ersetzen Sie die folgenden optionalen Variablen. Sie müssen mindestens einen dieser Werte in die CertificateRequest-Ressource aufnehmen:

    Variable Beschreibung
    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 DNSNames ist eine Liste von dNSName 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.
  2. Wenden Sie die benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz an:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. 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"
    }
    
  4. 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'
    

    Die Ausgabe zeigt das SECRET_NAME mit dem signierten Zertifikat:

    test-jwk-1
    

Zertifikatsanfragen auflisten

Verwenden Sie den Parameter certificaterequests, um alle CertificateRequest-Ressourcen aufzulisten:

   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