Wenn Sie einen Datenbankcluster erstellen, wird ein Serverzertifikat generiert, das von der Standard-GDC-CA 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 verwenden können.
API
Nachdem Sie den Datenbankcluster erstellt haben und er bereit ist, speichern Sie die generierte Zertifikatsignierungsanfrage als Datei.
kubectl get certificate.pki.security.gdc.goog \ dbs-pg-cert-request-DBCLUSTER_NAME \ -n USER_PROJECT -o jsonpath='{.status.byoCertStatus.csrStatus.csr}' \ | base64 -d > DBCLUSTER_NAME.csrErstellen Sie eine CSR-Erweiterungsdatei mit den SANs für Ihren 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.extGenerieren Sie mit der CSR- und der Erweiterungsdatei das von Ihrer CA signierte Zertifikat. Im Codebeispiel wird
opensslverwendet, 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.crtAktualisieren 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.txtkubectl patch certificate.pki.security.gdc.goog \ dbs-pg-cert-request-DBCLUSTER_NAME \ -n USER_PROJECT --patch-file patch.txt --type='merge'Prüfen Sie, ob das Zertifikat nach dem Upload den Status „Bereit“ erreicht hat.
kubectl get certificate.pki.security.gdc.goog \ dbs-pg-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" }
Ersetzen Sie Folgendes:
DBCLUSTER_NAME: der Name des Datenbankclusters.USER_PROJECT: der Name des Nutzerprojekts, in dem der Datenbankcluster erstellt wurde.CA_CERTIFICATE_FILE: der Pfad zur CA-Zertifikatsdatei der Datenbank.CA_PRIVATE_KEY_FILE: der Pfad zur privaten Schlüsseldatei der Datenbank-CA.