Signer et importer un certificat de serveur

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

  1. 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.csr
    
  2. Cré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
    
  3. À 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.crt
    
  4. Mettez à 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.txt
    
    kubectl patch certificate.pki.security.gdc.goog \
    dbs-pg-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT --patch-file patch.txt --type='merge'
    
  5. 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.