Serverzertifikat signieren und hochladen

Wenn Sie einen Datenbankcluster erstellen, wird ein Serverzertifikat generiert, das von der Standard-GDC-Zertifizierungsstelle signiert und für die Verwendung durch Ihren Datenbankserver konfiguriert wird. Führen Sie die folgenden Schritte aus, um ein von Ihrer eigenen PKI ausgestelltes Zertifikat für Ihre Datenbank zu signieren und hochzuladen. Der Standardaussteller Ihrer Organisation muss sich im BYO-Zertifikatsmodus befinden, damit Sie diese Funktion nutzen können.

API

  1. Nachdem Sie den Datenbankcluster erstellt haben und er bereit ist, speichern Sie die generierte Anfrage für die Zertifikatsunterzeichnung als Datei.

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o jsonpath='{.status.byoCertStatus.csrStatus.csr}' \
    | base64 -d > DBCLUSTER_NAME.csr
    
  2. Erstellen Sie eine CSR-Erweiterungsdatei mit den SANs für Ihr Datenbankcluster.

    export SAN=$(openssl req -in DBCLUSTER_NAME.csr -noout -text | grep 'DNS:' | sed -s 's/^[ ]*//')
    
    echo "keyUsage=digitalSignature,keyEncipherment
    extendedKeyUsage=serverAuth,clientAuth
    subjectAltName=${SAN:?}" > DBCLUSTER_NAME-csr.ext
    
  3. Generieren Sie mit der CSR- und der Erweiterungsdatei das von Ihrer Zertifizierungsstelle signierte Zertifikat. Im Codebeispiel wird openssl verwendet, dieser Schritt kann aber auch mit anderen Tools ausgeführt werden.

    openssl x509 -req -in DBCLUSTER_NAME.csr -days 365 \
    -CA CA_CERTIFICATE_FILE -CAkey CA_PRIVATE_KEY_FILE \
    -CAcreateserial -extfile DBCLUSTER_NAME-csr.ext  \
    -out DBCLUSTER_NAME-signed.crt
    
  4. Aktualisieren Sie die Zertifikatsressource mit dem signierten Zertifikat und dem CA-Zertifikat.

    echo "spec:
      byoCertificate:
        certificate: $(base64 -w0 DBCLUSTER_NAME-signed.crt)
        ca: $(base64 -w0 CA_CERTIFICATE_FILE)" > patch.txt
    
    kubectl patch certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT --patch-file patch.txt --type='merge'
    
  5. Prüfen Sie, ob das Zertifikat nach dem Upload den Status „Bereit“ erreicht hat.

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o json | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    Die Ausgabe sollte in etwa so aussehen:

    {
      "lastTransitionTime": "2024-05-03T08:42:10Z",
      "message": "Certificate is issued",
      "observedGeneration": 2,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  6. Nur wenn Sie eine Oracle-Datenbank verwenden, müssen Sie den Datenbankcluster beenden und neu starten, damit die SSL-Konfiguration des Listeners neu geladen wird.

Ersetzen Sie Folgendes:

  • DBENGINE_SHORT_NAME: der abgekürzte Name der Datenbank-Engine. Dies ist eine von al (AlloyDB Omni), pg (PostgreSQL) oder ora (Oracle).
  • DBCLUSTER_NAME: der Name des Datenbankclusters.
  • USER_PROJECT: Der Name des Nutzerprojekts, in dem der Datenbankcluster erstellt wurde.
  • CA_CERTIFICATE_FILE: der Pfad zur Zertifikatsdatei der Datenbank-CA.
  • CA_PRIVATE_KEY_FILE: Der Pfad zur privaten Schlüsseldatei der Datenbank-CA.