פתרון בעיות באימות מנוהל של זהויות של עומסי עבודה ב-GKE

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

אם פריסת ה-Pod של עומס העבודה ב-Google Kubernetes Engine‏ (GKE) נכשלה עם האישורים המותקנים, משתמשים בפקודה הבאה כדי לבדוק את סטטוס ה-Pod:

kubectl describe pod POD_NAME -n POD_NAMESPACE

פלט הפקודה כולל אירועי Pod שנוצרו על ידי kubelet ועל ידי gke-spiffe-controller. בודקים את האירועים האלה כדי לראות אם יש הודעות שגיאה ספציפיות, שיכול להיות שיכללו אחת מהאפשרויות הבאות:

PermissionDenied שגיאות

בקטע הזה מתוארות שגיאות שמחזירות קוד שגיאה של RPC‏ PermissionDenied.

PRIVATE_CA_AUTHORIZATION_FAILURE

השגיאה הזו נראית כך:

Permission denied while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = PermissionDenied desc = Permission 'privateca.caPools.get' denied on resource 'privateca.googleapis.com/projects/CA_POOL_PROJECT_NUMBER/locations/REGION/caPools/CA_POOL_ID' (or it may not exist). Ensure that the CaPool exists and you have authorized the Managed Workload Identity to request certificates from the CaPool.

השגיאה התרחשה כי במאגר הזהויות של עומס העבודה חסר התפקיד CA Service Workload Certificate Requester (roles/privateca.workloadCertificateRequester) במאגר המשני של רשות האישורים, או כי מאגר רשות האישורים לא קיים.

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

gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
   --project=CA_POOL_PROJECT_ID \
   --location=REGION \
   --role=roles/privateca.workloadCertificateRequester \
   --member="principal://iam.googleapis.com/projects/WIP_PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME"

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

  • SUBORDINATE_CA_POOL_ID: מזהה המאגר של רשות האישורים המשנית
  • CA_POOL_PROJECT_ID: מזהה הפרויקט של מאגר רשויות האישורים
  • REGION: האזור של רשות האישורים המשנית
  • WIP_PROJECT_NUMBER: מספר הפרויקט של מאגר הזהויות של עומסי העבודה
  • TRUST_DOMAIN_NAME: השם של דומיין האמון. בהתאם לסוג המאגר, הפורמט של השם הוא:
    • מאגר בניהול Google: PROJECT_ID.s3ns.svc.id.goog
    • מאגר בניהול עצמי: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog

WORKLOAD_IDENTITY_NOT_FOUND, ‏WORKLOAD_POOL_NOT_FOUND או WORKLOAD_NAMESPACE_NOT_FOUND

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = PermissionDenied desc = Permission denied on resource 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME/... (or it may not exist).

השגיאה הזו ממופה לערכים WORKLOAD_IDENTITY_NOT_FOUND, WORKLOAD_POOL_NOT_FOUND או WORKLOAD_NAMESPACE_NOT_FOUND. השגיאה הזו מתרחשת כשמאגר זהויות של עומסי עבודה, מרחב השמות של מאגר זהויות של עומסי עבודה או משאב הזהות המנוהלת לא קיימים, או כשהם מושבתים או נמחקים. שימו לב שהשגיאה הזו מחזירה PermissionDenied במקום NotFound כדי למנוע חשיפה של משאבים שלא קיימים.

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

FailedPrecondition שגיאות

בקטע הזה מתוארות שגיאות שמחזירות קוד שגיאת RPC‏ FailedPrecondition, שבדרך כלל מציין הגדרה חסרה או שגויה.

WORKLOAD_IDENTITY_INVALID_CONFIGURATION

תיאור ה-Pod יכול לכלול את אחת מההודעות הבאות:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = There are no CaPools configured for certificate issuance. Ensure you have added certificate issuance configuration to the workload identity pool 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WI_POOL_NAME', which contains at least one CaPool.

או

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Missing Certificate issuance configuration in the Trust Domain. Ensure you have added certificate issuance configuration to the workload identity pool 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WI_POOL_NAME' which contains at least one CaPool.

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

כדי לפתור את השגיאה, צריך ליצור CIC שמכיל לפחות מאגר אחד של רשויות אישורים, ולהשתמש בו כדי לעדכן את מאגר הזהויות של עומס העבודה.

CERTIFICATE_AUTHORITY_NOT_FOUND

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Failed to request certificates from the CaPool... There are no enabled CAs in the CaPool. Ensure that there is at least one enabled Certificate Authority to issue a certificate.

השגיאה הזו (CERTIFICATE_AUTHORITY_NOT_FOUND) מציינת שלא נמצאה רשות אישורים להנפקת אישורים במאגר ה-CA שהוגדר על ידי הלקוח.

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

CA_POOL_REGION_MISMATCH

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Unable to find a CaPool in the workload's region. Ensure you have setup a subordinate CaPool in 'WORKLOAD_REGION' and added it to the certificate issuance configuration of the Workload Identity Pool...

השגיאה הזו (CA_POOL_REGION_MISMATCH) מציינת שלא הוגדר מאגר של רשויות אישורים לאזור הספציפי של עומס העבודה.

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

ResourceExhausted שגיאות

בקטע הזה מתוארות שגיאות שמחזירות קוד שגיאה של RPC‏ ResourceExhausted.

PRIVATE_CA_QUOTA_EXCEEDED

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = ResourceExhausted desc = Quota exceeded for quota metric 'QUOTA_METRIC' and limit 'QUOTA_LIMIT' of service 'privateca.googleapis.com' for consumer 'project_number:PROJECT_NUMBER'.

השגיאה הזו (PRIVATE_CA_QUOTA_EXCEEDED) מתרחשת כשמגדירים את מאגר הזהויות של עומס העבודה לשימוש ברשות אישורים (CA) בהתאמה אישית, וניסיון להנפקת אישור חורג ממכסת השימוש או מהמגבלה שנקבעו לגבי CA Service. השגיאה הזו לא מתרחשת אם משתמשים ב-CA שמוגדר כברירת מחדל ומנוהל על ידי Google.

  • QUOTA_METRIC ו-QUOTA_LIMIT: מדד המכסה הספציפי והמגבלה שנחצו. לדוגמה, privateca.googleapis.com/enterprise_certificate_issuance ו-CertsPerEnterpriseCaPerMinute.

כדי לפתור את השגיאה, בודקים את המכסות והמגבלות של CA Service במסוף Cloud de Confiance , ומבקשים להגדיל את המכסה אם צריך.

InvalidArgument שגיאות

בקטע הזה מתוארות שגיאות שמחזירות קוד שגיאה של RPC‏ InvalidArgument.

PRIVATE_CA_KEY_ALGORITHM_MISMATCH

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = InvalidArgument desc = Public key algorithm is not permitted by the CaPool's issuance policy. Ensure that the requested keyAlgorithm 'KEY_ALGO_IN_CSR' is permitted by the CAs in the CaPool 'privateca.googleapis.com/projects/PROJECT_NAME/locations/WORKLOAD_REGION/caPools/CA_POOL_NAME'.

השגיאה הזו (PRIVATE_CA_KEY_ALGORITHM_MISMATCH) מציינת שאלגוריתם המפתח שצוין בבקשת האישור לא תואם להגבלות של מאגר ה-CA שהוגדר. זה קורה רק כשמגדירים אלגוריתם מפתח בהתאמה אישית בהגדרות של הנפקת האישורים (CIC) ומעדכנים את מאגר הזהויות של עומסי עבודה.

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

Unknown שגיאות

בקטע הזה מתוארות שגיאות שמחזירות קוד שגיאה של RPC‏ Unknown.

UNKNOWN_PRIVATE_CA_CLIENT_ERROR

השגיאה הזו נראית כך:

failed to issue the certificate from the GKE Auth: rpc error: code = Unknown desc = Failed to get certificates using the CaPool... PRIVATE_CA_ERROR_MESSAGE

השגיאה הזו (UNKNOWN_PRIVATE_CA_CLIENT_ERROR) מציינת שקרתה שגיאת לקוח לא ידועה, כמו ארגומנט לא תקין שסופק ל-API, כשבוצעה קריאה ל-CA Service.

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

זמן האחזור של הפצת חבילת האישורים

כשמעדכנים או מחליפים CA בניהול עצמי, יש השהיה בהפצה של כ-5 דקות לפני שהעדכונים נכנסים לתוקף ב-GKE clusters. הסיבה לכך היא שהרכיב gke-spiffe-controller בודק את החברות ומביא חבילות של אישורים כל חמש דקות.

השהייה הזו לא מתרחשת אם משתמשים ב-CA שמנוהל על ידי Google.

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