חתימה על אישור שרת והעלאה שלו

כשיוצרים אשכול מסדי נתונים, נוצר אישור שרת שנחתם על ידי CA ברירת המחדל של GDC ומוגדר לשימוש על ידי שרת מסד הנתונים. כדי לחתום על אישור למסד הנתונים שלכם ולהעלות אותו, אם הוא הונפק על ידי PKI משלכם, צריך לבצע את הפעולות הבאות. כדי להשתמש בתכונה הזו, מנפיק ברירת המחדל של הארגון חייב להיות במצב 'שימוש באישור משלכם'.

API

  1. אחרי שיוצרים את אשכול מסדי הנתונים והוא מוכן, שומרים את בקשת חתימת האישור שנוצרה כקובץ.

    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. יוצרים קובץ של תוספים ל-CSR שמכיל את ה-SAN של אשכול מסד הנתונים.

    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. בעזרת קובץ ה-CSR וקובץ התוסף, יוצרים את האישור שחתום על ידי רשות האישורים. בדוגמת הקוד נעשה שימוש ב-openssl, אבל אפשר לבצע את השלב הזה גם באמצעות כלים אחרים.

    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. מעדכנים את משאב האישור עם האישור החתום ואישור ה-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. מוודאים שהאישור הגיע למצב מוכן אחרי ההעלאה.

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

    הפלט אמור להיראות כך:

    {
      "lastTransitionTime": "2024-05-03T08:42:10Z",
      "message": "Certificate is issued",
      "observedGeneration": 2,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    

מחליפים את מה שכתוב בשדות הבאים:

  • DBCLUSTER_NAME: השם של אשכול מסד הנתונים.
  • USER_PROJECT: השם של פרויקט המשתמש שבו נוצר אשכול מסד הנתונים.
  • CA_CERTIFICATE_FILE: הנתיב לקובץ אישור ה-CA של מסד הנתונים.
  • CA_PRIVATE_KEY_FILE: הנתיב לקובץ המפתח הפרטי של רשות האישורים של מסד הנתונים.