Signer et importer un certificat de serveur

Lorsque vous créez un cluster de bases de données, un certificat de serveur signé par l'autorité de certification 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. Pour utiliser cette fonctionnalité, l'émetteur par défaut de votre organisation doit être en mode "Apporter votre propre certificat".

API

  1. Une fois le cluster de base 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-DBENGINE_SHORT_NAME-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 autorité de certification. 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 de l'autorité de certification.

    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. Vérifiez que le certificat est prêt après l'importation.

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

    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"
    }
    
  6. Si vous utilisez une base de données Oracle, arrêtez et redémarrez le cluster de base de données pour que la configuration SSL de l'écouteur soit rechargée.

Remplacez les éléments suivants :

  • DBENGINE_SHORT_NAME : nom abrégé du moteur de base de données. Il s'agit de l'une des valeurs suivantes : al (AlloyDB Omni), pg (PostgreSQL) ou ora (Oracle).
  • DBCLUSTER_NAME : nom du cluster de base 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 de l'autorité de certification de la base de données.
  • CA_PRIVATE_KEY_FILE : chemin d'accès au fichier de clé privée de l'autorité de certification de la base de données.