Root-Zertifizierungsstelle erstellen

In diesem Dokument werden die Schritte zum Erstellen einer Root-Zertifizierungsstelle (Root-CA) in Google Distributed Cloud (GDC) mit Air Gap beschrieben.

Eine Stammzertifizierungsstelle, die sich an der Spitze der Public-Key-Infrastruktur (PKI) befindet, stellt den Trust-Anchor für die PKI her. Damit Zertifikate innerhalb einer PKI verwendet werden können, müssen Geräte, Software und Komponenten der Stammzertifizierungsstelle vertrauen. Diese Konfiguration sorgt dafür, dass allen von der Stammzertifizierungsstelle ausgestellten Zertifikaten vertraut wird, wodurch auch der PKI selbst vertraut wird.

Dieses Dokument richtet sich an Zielgruppen innerhalb 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 eine Root-Zertifizierungsstelle erstellen können, müssen Sie die erforderlichen Berechtigungen anfordern und Ihre Umgebung vorbereiten.

IAM-Rollen anfordern

Wenn Sie eine Root-Zertifizierungsstelle erstellen, aktualisieren und löschen möchten, wenden Sie sich an Ihren IAM-Organisationsadministrator, um die Rolle Certificate Authority Service Admin (certificate-authority-service-admin) anzufordern.

Umgebung vorbereiten

Root-Zertifizierungsstelle erstellen

Wenn Sie eine Stamm-CA erstellen möchten, wenden Sie eine benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz mit Air Gap an.

  1. Erstellen Sie eine CertificateAuthority-Ressource und speichern Sie sie als YAML-Datei mit dem Namen root-ca.yaml:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateAuthority
    metadata:
      name: ROOT_CA_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      caProfile:
        commonName: COMMON_NAME
        duration: DURATION
        renewBefore: RENEW_BEFORE
        organizations:
        - ORGANIZATION
        organizationalUnits:
        - ORGANIZATIONAL_UNITS
        countries:
        - COUNTRIES
        localities:
        - LOCALTIES
        provinces:
        - PROVINCES
        streetAddresses:
        - STREET_ADDRESSES
        postalCodes:
        - POSTAL_CODES
      caCertificate:
        selfSignedCA: {}
      certificateProfile:
        keyUsage:
          - digitalSignature
          - keyCertSign
          - crlSign
        extendedKeyUsage:
          - EXTENDED_KEY_USAGE
      secretConfig:
        secretName: SECRET_NAME
        privateKeyConfig:
          algorithm: KEY_ALGORITHM
          size: KEY_SIZE
      acme:
        enabled: ACME_ENABLED
    

    Ersetzen Sie die folgenden Variablen:

    Variable Beschreibung
    ROOT_CA_NAME Der Name der Stammzertifizierungsstelle.
    USER_PROJECT_NAMESPACE Der Name des Namespace, in dem sich das Nutzerprojekt befindet.
    COMMON_NAME Der allgemeine Name des CA-Zertifikats.
    DURATION Die angeforderte Lebensdauer des CA-Zertifikats. Geben Sie die Dauer in Stunden an (z. B. 1000h). Einheiten wie Tage (d) oder Jahre (y) werden nicht unterstützt.
    SECRET_NAME Der Name des Kubernetes-Secrets, das den privaten Schlüssel und das signierte CA-Zertifikat enthält.

    Die folgenden Variablen sind optionale Werte:

    Variable Beschreibung
    RENEW_BEFORE Die Rotationszeit, bevor das CA-Zertifikat abläuft.
    ORGANIZATION Organisation, die im Zertifikat verwendet werden soll.
    ORGANIZATIONAL_UNITS Organisationseinheiten, die im Zertifikat verwendet werden sollen.
    COUNTRIES Länder, die im Zertifikat verwendet werden sollen.
    LOCALITIES Städte, die im Zertifikat verwendet werden sollen.
    PROVINCES Bundesland oder Provinz, die im Zertifikat verwendet werden sollen.
    STREET_ADDRESSES Adressen, die auf dem Zertifikat verwendet werden sollen.
    POSTAL_CODES Postleitzahlen, die auf dem Zertifikat verwendet werden sollen.
    EXTENDED_KEY_USAGE Die erweiterte Schlüsselverwendung für das Zertifikat. Wenn angegeben, sind die zulässigen Werte serverAuth und clientAuth.
    KEY_ALGORITHYM Der für dieses Zertifikat verwendete Algorithmus für den privaten Schlüssel. Zulässige Werte sind RSA, Ed25519 oder ECDSA. Wenn die Größe nicht angegeben ist, wird standardmäßig 256 für ECDSA und 2048 für RSA verwendet. Die Schlüsselgröße wird für Ed25519 ignoriert.
    KEY_SIZE Die Größe des privaten Schlüssels für dieses Zertifikat in Bit hängt vom Algorithmus ab. RSA lässt 2048, 3072, 4096 oder 8192 zu (Standard: 2048). ECDSA lässt 256, 384 oder 521 zu (Standard: 256). Ed25519 ignoriert die Größe.
    ACME_ENABLED Wenn dieser Wert auf true gesetzt ist, wird die Zertifizierungsstelle im ACME-Modus ausgeführt und die ACME-Server-URL ausgegeben. Anschließend können Sie den ACME-Client und das ACME-Protokoll verwenden, um Zertifikate zu verwalten.

  2. Wenden Sie die benutzerdefinierte Ressource auf Ihre Distributed Cloud-Instanz an:

    kubectl apply -f root-ca.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 die Bereitschaft der Root-CA. Es dauert normalerweise etwa 40 Minuten, bis die Zertifizierungsstelle bereit ist:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME -ojson | jq -r ' 
    .status.conditions[] | select( .type as $id | "Ready" | index($id))
    

    Die Ausgabe sieht dann ungefähr so aus:

    {
      "lastTransitionTime": "2025-01-24T17:09:19Z",
      "message": "CA reconciled",
      "observedGeneration": 2,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

Zertifizierungsstellen auflisten

So listen Sie alle Certificate Authority Service-Ressourcen in Ihrer Distributed Cloud-Instanz mit Air Gap auf:

Verwenden Sie den Parameter certificateauthorities, um alle CertificateAuthority-Ressourcen aufzulisten:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

Die Ausgabe sieht dann ungefähr so aus:

   NAMESPACE    NAME              READY   REASON   AGE
   foo          root-ca           True    Ready    7h24m
   foo          sub-ca            True    Ready    7h24m