פתרון בעיות ב-OS Login

במאמר הזה מוסבר איך לפתור בעיות ב-OS Login באמצעות שרת המטא-נתונים. מידע על הגדרת OS Login והוראות מפורטות זמינים במאמר הגדרת OS Login.

אפשר להריץ שאילתות בשרת המטא-נתונים מתוך מכונה של Compute Engine. למידע נוסף, ראו אחסון ואחזור של מטא-נתונים של מופעים.

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

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

    צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

    gcloud

    1. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init

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

  • הגדרת אזור ותחום כברירת מחדל
  • REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud.

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

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

הודעות שגיאה נפוצות

בהמשך מפורטות דוגמאות לשגיאות נפוצות שעשויות להתרחש כשמשתמשים ב-OS Login.

לא נמצא שם לקבוצה

במקרים מסוימים, יכול להיות שתקבלו את הודעת השגיאה הבאה אחרי שתתחברו למופעי מחשוב שמשתמשים ב-OS Login:

/usr/bin/id: cannot find name for group ID 123456789

אפשר להתעלם מהודעת השגיאה הזו. השגיאה הזו לא משפיעה על מופעי המחשוב.

השגת הקבוצות נכשלה

כשיוצרים מכונות וירטואליות לחישוב, יכול להיות שיופיעו יומנים דומים לאלה:

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

היומנים האלה מצביעים על כך שלא הוגדרו בארגון שלכם קבוצות Linux של OS Login. אפשר להתעלם מההודעות האלה.

התנאי המוקדם נכשל

יכול להיות שתופיע שגיאה דומה לזו שמופיעה בהמשך כשמתחברים למופע של Compute באמצעות SSH:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

השגיאה הזו מתרחשת כש-OS Login מנסה ליצור שם משתמש שכבר קיים בארגון. זה קורה בדרך כלל כשמוחקים חשבון משתמש ויוצרים משתמש חדש עם אותה כתובת אימייל זמן קצר לאחר מכן. אחרי שמחקתם חשבון משתמש, יכולות לחלוף עד 48 שעות עד שהמידע של המשתמש ב-POSIX יוסר.

כדי לפתור את הבעיה תוכלו לנסות אחד מהפתרונות הבאים:

הייתה חריגה ממגבלת הגודל של פרופיל הכניסה למערכת ההפעלה

יכול להיות שתראו אחת מהשגיאות הבאות כשמתחברים למופע של מחשוב Linux באמצעות SSH או כשמשתמשים ב-SCP כדי להעביר קבצים:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

כדי לפתור את השגיאות האלה, צריך לבצע את הפעולות הבאות:

  1. בודקים את הגודל של פרופיל OS Login. כדי לבדוק את הגודל של הפרופיל, מייצאים את הפרופיל לקובץ JSON זמני ומריצים את הפקודה הבאה כדי לבדוק את גודל הקובץ:

    gcloud compute os-login describe-profile --format="json" | wc
    

    אם הגודל קרוב ל-32KiB או גדול ממנו, צריך להסיר מפתחות SSH שלא בשימוש.

  2. כדאי לעיין בפרופיל שלכם ב-OS Login כדי לזהות מפתחות SSH שלא נמצאים בשימוש:

    gcloud compute os-login describe-profile
    

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

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  3. מסירים את כל המפתחות שלא בשימוש באמצעות הפקודה gcloud compute os-login ssh-keys remove:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    מחליפים את KEY בטביעת האצבע של המפתח או במחרוזת המלאה של המפתח הציבורי SSH.

כדי למנוע את הבעיה הזו בעתיד, מוסיפים מועד תפוגה למפתחות SSH. מפתחות שפג תוקפם מוסרים אוטומטית מפרופיל הכניסה שלכם 48 שעות אחרי שפג התוקף שלהם, או כשאתם מוסיפים מפתח חדש לפרופיל.

קוד תגובת HTTP: ‏ 429

יכול להיות שתקבלו את השגיאה הבאה כשאתם מנסים להתחבר למופע של Compute באמצעות SSH:

Failed to validate organization user USERNAME has login permission, got HTTP response code: 429

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

כדי למנוע את הבעיה הזו בעתיד, נסו את הפתרונות הבאים:

  • הטמעת מנגנון ניסיון חוזר בקוד האפליקציה. מידע נוסף זמין במאמרים הבאים:
  • שימוש מחדש בחיבורי SSH קיימים.
  • שליחת פקודות באצווה כדי לצמצם את מספר חיבורי ה-SSH והשאילתות למטא-נתונים של OS Login.

רשומות מטא-נתונים של OS Login שמוגדרות כברירת מחדל

ב-Compute Engine מוגדרת קבוצה של רשומות מטא-נתונים שמוגדרות כברירת מחדל, שמשמשות למידע על OS Login. מטא-נתונים שמוגדרים כברירת מחדל תמיד מוגדרים ומוגדרים על ידי השרת. מפתחות ברירת המחדל של המטא-נתונים הם תלויי אותיות רישיות.

בטבלה הבאה מתוארות הרשומות שאפשר לשלוח לגביהן שאילתות.

ביחס לhttp://metadata.google.internal/computeMetadata/v1/
רשומת מטא-נתונים תיאור
project/attributes/enable-oslogin בודק אם OS Login מופעל בפרויקט הנוכחי Google Cloud .
instance/attributes/enable-oslogin בודקת אם OS Login מופעל במופע החישוב הנוכחי.
oslogin/users/ אחזור פרטי הפרופיל של משתמשי OS Login. אפשר להעביר פרמטרים של שאילתה כמו username, uid, pagesize ו-pagetoken.
oslogin/authorize/

מאחזר את הגדרות ההרשאות ברמת הכניסה או ברמת האדמין של משתמש ב-OS Login.

כדי לבדוק הרשאה, צריך לציין את פרמטר השאילתה policy. ערך פרמטר המדיניות צריך להיות login (כדי לבדוק הרשאת כניסה) או adminLogin (כדי לבדוק גישת sudo).

איך בודקים שהשירות OS Login מופעל

משתמשים במסוף Google Cloud או ב-Google Cloud CLI כדי לשלוח שאילתה למטא-נתונים כדי לקבוע אם OS Login מופעל. השירות OS Login מופעל כשמגדירים את מפתח המטא-נתונים enable-oslogin לערך TRUE במטא-נתונים של הפרויקט או של המכונה. אם מוגדרים מטא-נתונים של המכונה ומטא-נתונים של הפרויקט, הערך שמוגדר במטא-נתונים של המכונה מקבל עדיפות.

צפייה במשתמשים ב-OS Login

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

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE" -H "Metadata-Flavor: Google"

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

לדוגמה, כדי להגדיר את pagesize ל-1, מריצים את הפקודה הבאה:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1" -H "Metadata-Flavor: Google"

כדי לקבל את המשתמש הבא, מגדירים את pagesize ל-1 ואת pagetoken לטוקן הדף מהפלט של הפקודה הקודמת.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

ברוב ההפצות, אפשר גם להריץ את פקודת Unix‏ getent passwd כדי לאחזר את רשומות הסיסמאות של משתמשי הארגון.

הצגת משתמש ספציפי ב-OS Login

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

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

מחליפים את USERNAME בשם המשתמש של המשתמש שרוצים להריץ עליו שאילתה.

לדוגמה, אפשר לבצע בקשה לחיפוש המשתמש user_example_com. בדוגמה הבאה אפשר לראות את הפקודה ואת הפלט עם עיצוב נוסף לשיפור הקריאות.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

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

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

ברוב ההפצות, אפשר גם להריץ פקודות של Unix כמו getent passwd username או getent passwd uid כדי לאחזר פרטי פרופיל.

כדי לאחזר את מפתחות ה-SSH של משתמש, אפשר גם להריץ את הפקודה /usr/bin/google_authorized_keys USERNAME. אם לא מוחזרים מפתחות, יכול להיות שלמשתמש אין את ההרשאות הנדרשות כדי להיכנס למופע של Compute.

בדיקת הרשאות הכניסה

כדי להציג הרשאות ברמת הכניסה והניהול, צריך לספק את policy=login&email=LOGIN_NAME פרמטרים של שאילתה.

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

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. בפלט, שימו לב ל-name.

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

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

לדוגמה, אפשר לשלוח שאילתה לגבי הרשאות הכניסה של המשתמש user_example_com שמוצג בקטע הקודם:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

פלט הפקודה מציין שהמשתמש מורשה להתחבר למופע של Compute:

{"success":true}

בדיקה אם למופע החישוב יש חשבון שירות

אפשר להריץ שאילתה על שרת המטא-נתונים כדי למצוא את חשבון השירות שמשויך למכונת החישוב. מתחברים למופע של Compute ומריצים את הפקודה הבאה:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

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

12345-sa@developer.gserviceaccount.com/
default/

אם לא נמצא חשבון שירות, הפלט יהיה ריק.

המאמרים הבאים