פתרון בעיות באימות מעומס עבודה לעומס עבודה

במאמר הזה מוסבר איך לפתור שגיאות נפוצות שקשורות לאימות עומסי עבודה לעומסי עבודה אחרים באמצעות mTLS.

מידע נוסף זמין במאמר פתרון בעיות באיחוד שירותי אימות הזהות של עומסי עבודה.

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

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
    1. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    2. הגדרת אזור ותחום כברירת מחדל

ספריית פרטי הכניסה שנוצרה לא קיימת

אם מופיעה השגיאה /var/run/secrets/workload-spiffe-credentials directory doesn't exist (הספרייה לא קיימת), צריך לבצע את הפעולות הבאות:

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

    המסוף

    1. נכנסים לדף VM instances במסוף Google Cloud .

      כניסה לדף VM instances

    2. בעמודה Name (שם) בדף VM instances (מופעים של מכונות וירטואליות), לוחצים על שם המופע כדי לראות פרטים נוספים על המופע.

    3. בקטע אבטחה וגישה בדף פרטים, מוודאים שהערך של 'אישורים של זהויות עומס עבודה' הוא 'מופעל'.

    gcloud

    כדי לראות אם התכונה 'זהויות מנוהלות לעומסי עבודה' מופעלת עבור מופע של מחשוב, משתמשים בפקודה gcloud alpha compute instances describe.

    gcloud alpha compute instances describe INSTANCE_NAME \
        --zone=ZONE \
        --format="table(name,zone,identityCertificate)"
    

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

    • INSTANCE_NAME: השם של המכונה.

    • ZONE: האזור שבו נמצאת המכונה.

    REST

    כדי לראות את הפרטים של מכונת חישוב, שולחים בקשת GET אל ה-method‏ instances.get. אפשר להוסיף פרמטר $fields של שאילתה לבקשה כדי להגביל את הפלט רק לשדות שמעניינים אתכם.

    GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
    

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

    • PROJECT_ID: מזהה הפרויקט שבו נמצא המופע

    • ZONE: האזור שבו נמצאת המכונה

    • INSTANCE_NAME: השם של המכונה

  2. בודקים את ערכי המופעים של identityCertificate ו-identity.

  3. אם הנכס identityCertificate מוגדר לערך false, אז מופע המחשוב הזה לא תומך בתכונה הזו.

    כדי לפתור את הבעיה הזו, צריך ליצור מופע חדש שתומך באימות מעומס עבודה לעומס עבודה. פרטים נוספים זמינים במאמר בנושא הפעלת זהויות מנוהלות של עומסי עבודה במכונות וירטואליות קיימות.

  4. מוודאים שהמכונה הווירטואלית מריצה מערכת הפעלה אורחת עם Compute Engine guest agent מגרסה 20231103.01 ואילך. כדי לראות את הפלט של היציאה הטורית ולקבוע את הגרסה הנוכחית של סוכן האורח ב-Compute Engine, משתמשים ב-gcloud CLI:

    gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"
    

    מחליפים את INSTANCE_NAME בשם של מכונת ה-Compute.

    הוראות לעדכון סוכן האורח של Compute Engine מפורטות במאמר בנושא עדכון סביבת האורח.

  5. בודקים את יומני השירות כדי לוודא שהטיימר של gce-workload-cert-refresh.timer systemd הצליח לאחזר את פרטי הכניסה של עומס העבודה ואת חבילת האישורים.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

ספריית פרטי הכניסה שנוצרה מכילה רק את הקובץ config_status

יכול להיות שהספרייה של פרטי הכניסה שנוצרו, /var/run/secrets/workload-spiffe-credentials, תכיל רק את config_status, מסיבות שונות. כדי לפתור את הבעיה, פועלים לפי השלבים הבאים.

  1. בודקים את התוכן של הקובץ config_status כדי לוודא שהתכונה 'זהויות של עומסי עבודה מנוהלים' מופעלת. אם התכונה לא מופעלת באמצעות הערכים המתאימים, קובץ היומן מכיל את הודעת השגיאה workload certificate feature not enabled.

    כדי לפתור את הבעיה, צריך ליצור מופע חדש של Compute שתומך באימות מעומס עבודה לעומס עבודה, באמצעות אחת מהשיטות הבאות:

  2. בודקים את התוכן של קובץ config_status כדי לוודא שאין שגיאות בגלל ערכי מאפיינים חסרים או הגדרה לא תקינה של הנפקת האישור או של הגדרת האמון. אם יש שגיאות כאלה, צריך לעדכן את ערכי ההגדרה לפי השלבים שמפורטים במאמר עדכון ההגדרה של הנפקת אישורים ושל אמון.

  3. מוודאים שההרשאות הנכונות ניתנו לזהויות המנוהלות של עומסי העבודה במאגר הזהויות של עומסי העבודה, כדי לגשת למאגרי CA משניים. משתמשים בפקודה הבאה:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION
    

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

    • SUBORDINATE_CA_POOL_ID: המזהה של מאגר ה-CA המשני.
    • SUBORDINATE_CA_POOL_REGION: האזור של מאגר CA המשני.

    הפלט של הפקודה הזו צריך לכלול את הפרטים הבאים:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    בדוגמה הקודמת:

    • PROJECT_NUMBER הוא מספר הפרויקט.
    • POOL_ID הוא המזהה של מאגר הזהויות של עומסי העבודה.

    אם הפלט לא דומה לדוגמה שלמעלה, צריך להעניק את ההרשאות הנדרשות כמו שמתואר במאמר איך מאשרים לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר רשות האישורים.

  4. אם קובץ config_status לא מכיל הודעות שגיאה, צריך לבדוק את הערך של iam.googleapis.com/workload-identity בקובץ.הערך צריך להיות זהה לערך הבא:

    spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
    

    בדוגמה הקודמת:

    • PROJECT_NUMBER הוא מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה המנוהל.
    • POOL_ID הוא המזהה של מאגר הזהויות של עומסי העבודה.
    • NAMESPACE_ID הוא המזהה של מרחב השמות במאגר הזהויות של עומסי העבודה.
    • MANAGED_IDENTITY_ID הוא המזהה של הזהות המנוהלת של עומס העבודה.

    אם הערך של iam.googleapis.com/workload-identity שגוי, צריך ליצור מכונת חישוב חדשה עם הערך הנכון, כי אפשר לעדכן את ערך הזהות המנוהלת רק במהלך יצירת המכונה.

  5. אם בקובץ config_status אין הודעות שגיאה, צריך לוודא שהגדרת האמון מכילה רשומה תקינה עבור דומיין האמון של SPIFFE‏ POOL_ID.global.PROJECT_NUMBER.workload.id.goog, שמתאים לדומיין האמון של SPIFFE בזהות המנוהלת שהוקצתה למופע המחשוב. מידע נוסף מופיע במאמר הגדרת הרשאות השיתוף.

  6. אם הקובץ config_status מכיל הודעות שגיאה עם קוד השגיאה INTERNAL_ERROR, צריך לפנות ל-Cloud Customer Care או לאיש הקשר Google Cloud עם הודעת השגיאה.