Cuando creas un clúster de base de datos, se genera y configura un certificado de servidor firmado por la AC de GDC predeterminada para que lo use tu servidor de base de datos. Para firmar y subir un certificado para tu base de datos que emita tu propia PKI, sigue este procedimiento. El emisor predeterminado de tu organización debe estar en modo de certificado BYO para usar esta función.
API
Después de crear el clúster de base de datos y cuando esté listo, guarda la solicitud de firma de certificado generada como un archivo.
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 archivo de extensiones de CSR que contenga los SAN para tu clúster de bases de datos.
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
Con el CSR y el archivo de extensión, genera el certificado firmado por tu CA. En el muestra de código, se usa
openssl
, pero este paso se puede completar con otras herramientas.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
Actualiza el recurso del certificado con el certificado firmado y el certificado de la 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 que el certificado haya alcanzado el estado listo después de la carga.
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))'
El resultado debería ser similar al siguiente ejemplo:
{ "lastTransitionTime": "2024-05-03T08:42:10Z", "message": "Certificate is issued", "observedGeneration": 2, "reason": "Issued", "status": "True", "type": "Ready" }
Solo si usas una base de datos de Oracle, detén y reinicia el clúster de bases de datos para que se vuelva a cargar la configuración SSL del agente de escucha.
Reemplaza lo siguiente:
DBENGINE_SHORT_NAME
: Es el nombre abreviado del motor de base de datos. Puede seral
(AlloyDB Omni),pg
(PostgreSQL) oora
(Oracle).DBCLUSTER_NAME
: Es el nombre del clúster de la base de datos.USER_PROJECT
: Es el nombre del proyecto del usuario en el que se creó el clúster de la base de datos.CA_CERTIFICATE_FILE
: Es la ruta de acceso al archivo del certificado de la CA de la base de datos.CA_PRIVATE_KEY_FILE
: Es la ruta de acceso al archivo de claves privadas de la CA de la base de datos.