Lorsque vous créez un cluster de bases de données, un certificat de serveur signé par la CA GDC par défaut est généré et configuré pour être utilisé par votre serveur de base de données. Pour signer et importer un certificat pour votre base de données émis par votre propre PKI, procédez comme suit. L'émetteur par défaut de votre organisation doit être en mode "Apportez votre propre certificat" pour que vous puissiez utiliser cette fonctionnalité.
API
Une fois le cluster de bases de données créé et prêt, enregistrez la demande de signature de certificat générée dans un fichier.
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.csrCréez un fichier d'extensions CSR contenant les SAN pour votre cluster de bases de données.
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À l'aide du fichier CSR et du fichier d'extension, générez le certificat signé par votre CA. L'exemple de code utilise
openssl, mais cette étape peut être effectuée avec d'autres outils.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.crtMettez à jour la ressource de certificat avec le certificat signé et le certificat CA.
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'Vérifiez que le certificat a atteint l'état "Prêt" après l'importation.
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))'La sortie devrait ressembler à ce qui suit :
{ "lastTransitionTime": "2024-05-03T08:42:10Z", "message": "Certificate is issued", "observedGeneration": 2, "reason": "Issued", "status": "True", "type": "Ready" }
Remplacez les éléments suivants :
DBCLUSTER_NAME: nom du cluster de bases de données.USER_PROJECT: nom du projet utilisateur dans lequel le cluster de bases de données a été créé.CA_CERTIFICATE_FILE: chemin d'accès au fichier de certificat CA de la base de données.CA_PRIVATE_KEY_FILE: chemin d'accès au fichier de clé privée CA de la base de données.