Ao criar um cluster de banco de dados, um certificado de servidor assinado pela CA padrão do GDC é gerado e configurado para uso pelo servidor de banco de dados. Para assinar e fazer upload de um certificado para seu banco de dados emitido pela sua própria ICP, siga este procedimento. O emissor padrão da sua organização precisa estar no modo de certificado BYO para usar esse recurso.
API
Depois de criar o cluster de banco de dados e ele estiver pronto, salve a solicitação de assinatura de certificado gerada como um arquivo.
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
Crie um arquivo de extensões de CSR que contenha os SANs do cluster de banco de dados.
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
Usando o arquivo de CSR e extensão, gere o certificado assinado pela sua CA. O exemplo de código usa
openssl
, mas essa etapa pode ser concluída com outras ferramentas.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
Atualize o recurso de certificado com o certificado assinado e o certificado da 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'
Verifique se o certificado atingiu o estado "pronto" após o upload.
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))'
A saída será semelhante a esta:
{ "lastTransitionTime": "2024-05-03T08:42:10Z", "message": "Certificate is issued", "observedGeneration": 2, "reason": "Issued", "status": "True", "type": "Ready" }
Somente se você estiver usando um banco de dados Oracle, pare e reinicie o cluster de banco de dados para que a configuração SSL do listener seja recarregada.
Substitua:
DBENGINE_SHORT_NAME
: o nome abreviado do mecanismo de banco de dados. Uma das seguintes opções:al
(AlloyDB Omni),pg
(PostgreSQL) ouora
(Oracle).DBCLUSTER_NAME
: o nome do cluster de banco de dados.USER_PROJECT
: o nome do projeto do usuário em que o cluster de banco de dados foi criado.CA_CERTIFICATE_FILE
: o caminho para o arquivo de certificado da CA do banco de dados.CA_PRIVATE_KEY_FILE
: o caminho para o arquivo de chave privada da CA do banco de dados.