Assine e carregue um certificado de servidor

Quando cria um cluster de base de dados, é gerado e configurado um certificado de servidor assinado pela CA do GDC predefinida para utilização pelo servidor de base de dados. Para assinar e carregar um certificado para a sua base de dados emitido pela sua própria ICP, siga o procedimento abaixo. O emissor predefinido da sua organização tem de estar no modo de certificado BYO para usar esta funcionalidade.

API

  1. Depois de criar o cluster da base de dados e este estar pronto, guarde o pedido de assinatura de certificado gerado como um ficheiro.

    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
    
  2. Crie um ficheiro de extensões CSR com os SANs para o cluster da base 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
    
  3. Com o CSR e o ficheiro de extensão, gere o certificado assinado pela sua CA. O exemplo de código usa openssl, mas este passo pode ser concluído 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
    
  4. 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'
    
  5. Confirme se o certificado atingiu um estado pronto após o carregamento.

    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))'
    

    O resultado deve ser semelhante ao seguinte:

    {
      "lastTransitionTime": "2024-05-03T08:42:10Z",
      "message": "Certificate is issued",
      "observedGeneration": 2,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  6. Apenas se estiver a usar uma base de dados Oracle, pare e reinicie o cluster da base de dados para que a configuração SSL do ouvinte seja recarregada.

Substitua o seguinte:

  • DBENGINE_SHORT_NAME: o nome abreviado do motor da base de dados. Este é um dos seguintes: al (AlloyDB Omni), pg (PostgreSQL) ou ora (Oracle).
  • DBCLUSTER_NAME: o nome do cluster da base de dados.
  • USER_PROJECT: o nome do projeto do utilizador onde o cluster de base de dados foi criado.
  • CA_CERTIFICATE_FILE: o caminho para o ficheiro do certificado da AC da base de dados.
  • CA_PRIVATE_KEY_FILE: o caminho para o ficheiro de chave privada da AC da base de dados.