שדרוג אישור האימות של החבילה

במאמר הזה מוסבר איך לשדרג את רשות אישורי הבסיס (CA) שמשמשת לאימות חבילות במכשיר עם פער אבטחה של Google Distributed Cloud ‏ (GDC)

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

לפני שמתחילים

כדי לשדרג את אישור האימות של החבילה, צריכות להיות לכם הרשאות זהות וגישה מתאימות:

  • מוודאים שיש לכם הרשאת כתיבה ל-ConfigMap‏ harbor-system/package-validation-root-certs.
  • צריך לבקש מאדמין האבטחה להקצות לכם את התפקיד 'שדרוג Debugger' (upgrade-debugger-cp).

אימות שנדרש שדרוג של האישור

לפני שמבצעים את הפעולה, צריך לוודא שנדרג את אישור האימות של החבילה. לשם כך, משווים את ה-ConfigMap הפעיל באשכול לאישור הבסיס העדכני ביותר של הסביבה הזמנית בחבילת השדרוג:

  1. מגדירים את משתנה הסביבה KUBECONFIG:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    מחליפים את PATH_TO_KUBECONFIG_FILE בנתיב לקובץ kubeconfig שהתקבל אחרי הפעלת הפקודה gdcloud auth login באשכול האדמין הבסיסי.

  2. כדי לבדוק אם נדרש שדרוג, משווים את ישות העוגן הנוכחית לישות העוגן העדכנית. הנתונים ConfigMap בכתובת harbor-system/package-validation-root-certs מושוים לישות העוגן האמינה המקומית:

    $ CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get cm package-validation-root-certs -n harbor-system -o jsonpath='{.data.ca\.crt}')
    
    $ LATEST_TRUST_ANCHOR=$(cat /root/release/staging_root_ca_certificate.crt)
    
    $ diff <( echo "$CURRENT_TRUST_ANCHOR" ) <( echo "$LATEST_TRUST_ANCHOR" ) && echo trust anchors are same  || echo trust anchors are different, upgrade required!
    

שדרוג האישור

אם נדרש שדרוג, מעדכנים את האובייקט ConfigMap שנמצא ב-harbor-system/package-validation-root-certs באשכול האדמין הבסיסי. כדי להשלים את המשימה הזו, צריכה להיות לכם הרשאת כתיבה ב-ConfigMap.

  1. מגדירים את משתנה הסביבה KUBECONFIG:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    מחליפים את PATH_TO_KUBECONFIG_FILE בנתיב לקובץ kubeconfig שהתקבל אחרי הפעלת הפקודה gdcloud auth login באשכול האדמין הבסיסי.

  2. יוצרים משתנים ומקצים להם ערכים:

    USERNAME=USER_NAME #IO
    TARGET_FOLDER=/tmp/${USERNAME}
    OUTPUT="${TARGET_FOLDER}/package-validation-root-certs.yaml"
    LATEST_TRUST_ANCHOR_CA_FILE=/root/release/staging_root_ca_certificate.crt
    CONFIGMAP_NAME=package-validation-root-certs
    NAMESPACE=harbor-system
    

    מחליפים את USER_NAME בשם המשתמש ב-IO.

  3. יוצרים את תיקיית היעד שתכיל את קובצי הפלט מתהליך השדרוג של האישור:

    mkdir -p "${TARGET_FOLDER}"
    
  4. מקבלים את עוגן האמון הנוכחי ומאחסנים אותו בקובץ זמני מקומי:

    CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get configmap "${CONFIGMAP_NAME}" -n "${NAMESPACE}" -o jsonpath="{.data.ca\.crt}" )
    CURRENT_TRUST_ANCHOR_CA_FILE=$(mktemp)
    echo "$CURRENT_TRUST_ANCHOR" > "${CURRENT_TRUST_ANCHOR_CA_FILE}"
    
  5. יוצרים את קובץ העוגן המעודכן:

    cat <<EOF  > "${OUTPUT}"
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ${CONFIGMAP_NAME}
      namespace: ${NAMESPACE}
    data:
      ca.crt: |
    $(sed 's/^/    /' "${LATEST_TRUST_ANCHOR_CA_FILE}")
    $(sed 's/^/    /' "${CURRENT_TRUST_ANCHOR_CA_FILE}")
    EOF
    
  6. מוודאים שעוגן האמון עודכן כמו שצריך:

    עוגן האמון צריך להכיל גם את אישור עוגן האמון הנוכחי וגם את אישור עוגן האמון העדכני ביותר.

    $ cat "${OUTPUT}"
    apiVersion: v1
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        (other certificate)
    kind: ConfigMap
    metadata:
      name: package-validation-root-certs
      namespace: harbor-system
    
  7. מחילים את ההגדרה החדשה באמצעות kubectl:

      kubectl --kubeconfig=$KUBECONFIG apply -f ${OUTPUT}
    
  8. מוודאים שהקובץ ca.crt החדש נמצא בתוך ConfigMap:

      kubectl --kubeconfig=$KUBECONFIG describe configmap package-validation-root-certs -n harbor-system
    

הפעולה הזו תדאג לשדרוג של אישור חדש ב-package-validation-root-cert.