Quando crei un cluster di database, viene generato e configurato un certificato del server firmato dalla CA GDC predefinita per l'utilizzo da parte del server di database. Per firmare e caricare un certificato per il tuo database emesso dalla tua PKI, segui questa procedura. Per utilizzare questa funzionalità, l'emittente predefinita della tua organizzazione deve essere in modalità BYO certificate.
API
Dopo aver creato il cluster di database e quando è pronto, salva la richiesta di firma del certificato generata come file.
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
Crea un file di estensioni CSR contenente i SAN per il cluster di database.
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
Utilizzando il file CSR e di estensione, genera il certificato firmato dalla tua CA. L'esempio di codice utilizza
openssl
, ma questo passaggio può essere completato con altri strumenti.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
Aggiorna la risorsa del certificato con il certificato firmato e il certificato CA.
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'
Verifica che il certificato abbia raggiunto lo stato Pronto dopo il caricamento.
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))'
L'output dovrebbe essere simile al seguente:
{ "lastTransitionTime": "2024-05-03T08:42:10Z", "message": "Certificate is issued", "observedGeneration": 2, "reason": "Issued", "status": "True", "type": "Ready" }
Solo se utilizzi un database Oracle, arresta e riavvia il cluster di database in modo che la configurazione SSL del listener venga ricaricata.
Sostituisci quanto segue:
DBENGINE_SHORT_NAME
: il nome abbreviato del motore del database. Si tratta di uno dei seguenti:al
(AlloyDB Omni),pg
(PostgreSQL) oora
(Oracle).DBCLUSTER_NAME
: il nome del cluster di database.USER_PROJECT
: il nome del progetto utente in cui è stato creato il cluster di database.CA_CERTIFICATE_FILE
: il percorso del file del certificato CA del database.CA_PRIVATE_KEY_FILE
: il percorso del file della chiave privata della CA del database.