בדף הזה מפורטים פתרונות לשגיאות נפוצות באיחוד שירותי אימות הזהות של עומסי עבודה.
Google Cloud API לא מקבל את פרטי הכניסה שהונפקו על ידי SecurityTokenService
טוקני הגישה שמוחזרים על ידי ה-API SecurityTokenService הם טוקני גישה של איחוד שירותי האימות.
למרות שרוב ממשקי ה-API Google Cloud תומכים באיחוד שירותי אימות הזהות, יכול להיות שיש מגבלות על שיטות מסוימות של API. רשימת המגבלות זמינה במאמר איחוד שירותי אימות הזהות: מוצרים ומגבלות.
אם מתקבלת השגיאה הבאה, יכול להיות שמנסים להשתמש באסימון גישה מאוחד עם שירות שלא תומך באסימונים כאלה.
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED",
}
}
כדי לפתור את השגיאה, מחליפים את אסימון הגישה של איחוד שירותי האימות באסימון גישה לא מוגבל באמצעות שליחת קריאה ל-GenerateAccessToken.
למידע נוסף ראו קבלת פרטי כניסה לטווח קצר עם איחוד זהויות.
הוספת ספק זהויות לרשימת ההיתרים לשימוש באיחוד שירותי אימות הזהות של עומסי עבודה
אם מנסים להגדיר ספק זהויות אסור כספק של מאגר זהויות של עומסי עבודה, תופיע השגיאה הבאה:
FAILED_PRECONDITION: Precondition check failed.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: "Org Policy violated for value: '{PROVIDER}'."
subject: orgpolicy:projects/{PROJECT}/locations/global/workloadIdentityPools/{POOL}
type: constraints/iam.workloadIdentityPoolProviders
כדי לפתור את הבעיה, פועלים לפי ההוראות במאמר הגדרת הגבלות על ספק זהויות כדי להוסיף את ספק הזהויות לרשימת ההיתרים לשימוש באיחוד שירותי אימות הזהויות של עומסי עבודה.
קלט JWK לא בפורמט JSON תקין
אם אתם מגדירים ספק OIDC ומופיעה השגיאה Input JWK is
not in a valid json format, יכול להיות שהסיבה לכך היא שנקודות קצה שמאובטחות באמצעות אישורים בחתימה עצמית לא נתמכות על ידי Google Cloud. ספציפית, השדות x5c ו-x5t לא נתמכים וצריך להסיר אותם מ-OIDC JWK.
כדי לפתור בעיות ב-JWK, מבצעים את הפעולות הבאות:
עורכים את קובץ ה-JWK ומסירים את השדות
x5c(שרשרת אישורי X.509) ו-x5t(טביעת אצבע של אישור X.509 מסוג SHA-1).{ "kty": "RSA", "use": "sig", "kid": "example-key-id", "alg": "RS256", "n": "base64url-modulus", "e": "AQAB" }מוודאים שהפורמט של שאר שדות ה-JWK תקין, כפי שמתואר במפרט OIDC.
מגדירים את ספק ה-OIDC עם מפתח ה-JWK המעודכן.
שגיאה בחיבור למנפיק פרטי הכניסה
אם התקבלה השגיאה הבאה, יכול להיות ש- Google Cloud לא יכול לאחזר את מסמך המטא-נתונים של ה-OIDC או את ה-JWKS של ספק הזהויות:
{
"error": "invalid_grant",
"error_description":"Error connecting to the given credential's issuer."
}
בדרך כלל שגיאה זו מתרחשת מכיוון שנקודות הקצה (endpoints) אינן מוגדרות כך שיוכלו להגיע אליהן מהאינטרנט הציבורי. כדי לפתור את השגיאה,צריך לוודא שנקודת הקצה (endpoints) זמינות לציבור ועומדות בדרישות של מפרט ה-OIDC. למידע נוסף ראו הכנת ספק הזהויות החיצוני.
אם השגיאה עדיין מופיעה, צריך לוודא שמנפיק האסימון, לפי ההצהרה iss באסימון, נכון.
בקשת ה-AWS שצוינה לא מכילה את כל הכותרות הנדרשות
אם קיבלתם את השגיאה הבאה כשביקשתם טוקן מ-API SecurityTokenService, הסיבה לכך היא שהשדה headers בטוקן GetCallerIdentity שלכם ב-AWS לא כולל כותרת נדרשת או שהוא כולל כותרות שלא נתמכות:
{
"error": "invalid_grant",
"error_description": "The given AWS request doesn't contain all the required headers."
}
השדה headers של טוקן GetCallerIdentity חייב לכלול רק את כותרות בקשת ה-HTTP הבאות:
-
Authorization: חתימת הבקשה. host: שם המארח בשדהurl. למשל,sts.amazonaws.com-
x-amz-date: השעה שבה תשלחו את הבקשה, בפורמט ISO 8601 Basic. x-goog-cloud-target-resource: שם המשאב המלא של ספק מאגר הזהויות של עומסי העבודה.x-amz-security-token: אסימון לסשן. חובה רק אם אתם משתמשים בפרטי כניסה מאובטחים זמניים
השגיאה הזו מתרחשת גם אם החותם של גרסה 4 של החתימה כולל כותרות נוספות, כמו x-amz-content-sha256, בבקשה החתומה. כדי לפתור את הבעיה, צריך לוודא שבקשת GetCallerIdentity כוללת גוף ריק, ושהשדה headers והשדה SignedHeaders של הבקשה החתומה כוללים רק את הכותרות הנתמכות. מידע נוסף זמין במאמר בנושא אימות של עומס עבודה באמצעות API בארכיטקטורת REST.
המיפוי של טענת google.subject חורג מהמגבלה של 127 בייט
אם קיבלתם את השגיאה הבאה, הסיבה לכך היא שהאישורים הנכנסים שמתקבלים על ידי SecurityTokenService API יוצרים טענת google.subject שחורגת ממגבלת התווים:
{
"error": "invalid_request",
"error_description":"The size of mapped attribute google.subject exceeds the 127 bytes limit. Either modify your attribute mapping or the incoming assertion to produce a mapped attribute that is less than 127 bytes."
}
כדי לפתור את הבעיה, משתמשים בפונקציה extract כדי להסיר תווים מיותרים ולחלץ מזהה ייחודי של נושא מטענת נכונות (assertion) ארוכה יותר, לדוגמה:
google.subject=assertion.sub.extract('/users/{sub_claim}')
שגיאה 429 Too Many Requests
אם אתם מקבלים את השגיאה 429 Too Many Requests כשאתם מבקשים טוקן מ-API SecurityTokenService, המשמעות היא שהפרויקט Google Cloud שלכם חרג ממגבלת מכסה לקצב הגשת בקשות ל-API.
השגיאה כוללת הודעה שדומה לזו:
{
"error": "quota_exceeded",
"error_description":"The request was throttled due to rate limit: sts.googleapis.com/requests. Please retry after a few seconds."
}
כדי לפתור את הבעיה הזו, צריך לזהות את שם המדד sts.googleapis.com/requests שמופיע בהודעת השגיאה, לאתר את שם המדד התואם בדף מכסת IAM, לוודא שאחוז השימוש חורג מהמכסה ואז לבקש הגדלה של המכסה.