במאמר הזה מוסבר איך מנהלי אשכולות או מפעילים של אפליקציות יכולים להגדיר אשכולות לתמיכה באימות באמצעות ספק OpenID Connect (OIDC) מצד שלישי.
מגבלות
חובה להשתמש בסוג אשכול שתומך ב-OIDC.
לפני שמתחילים
-
Install the Google Cloud CLI.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:
gcloud components update gcloud components install kubectl
- חשוב לוודא שאדמין הפלטפורמה סיפק לכם את כל המידע שאתם צריכים על הספק. מידע נוסף מופיע במאמר שיתוף הפרטים של ספק הזהויות.
- כדי לבצע אימות באמצעות Google Cloud המסוף, צריך לרשום כל אשכול שרוצים להגדיר ב-Fleet של הפרויקט. מידע נוסף זמין במאמר סקירה כללית על יצירת צי.
- כדי להתחבר למישור הבקרה של אשכול AWS או Azure שנמצא מחוץ לרשת ה-VPC הנוכחית דרך יעד מבוצר (bastion host), צריך לוודא שיצרתם את יעד מבוצר (bastion host) והפעלתם מנהרת SSH ביציאה
8118. כשמריצים פקודותkubectlבמסמך הזה, צריך להוסיף לפני הפקודות אתHTTPS_PROXY=http://localhost:PORT, כאשרPORTהוא מספר היציאה שבו השתמשתם כשהפעלתם את מנהרת ה-SSH. - באשכולות GKE ב- Google Cloud, צריך לרשום את האשכולות ב-Fleet.
הגדרת אשכולות
כדי להגדיר אימות לאשכול באמצעות OIDC, מוסיפים את המידע הבא למשאב מותאם אישית של Kubernetes בשם ClientConfig:
- מידע על ספק הזהויות, כמו מזהה לקוח וסוד.
- מידע על אסימוני האינטרנט מסוג JSON (JWT) שספק הזהויות שלכם משתמש בהם לאימות.
- היקפים או פרמטרים נוספים שייחודיים לספק הזהויות.
מידע נוסף על הפרטים שאתם צריכים לקבל מאדמין הפלטפורמה או ממי שמנהל את הזהויות בארגון שלכם זמין במאמר שיתוף הפרטים של ספק הזהויות.
האשכול משתמש בשדות במשאב המותאם אישית ClientConfig כדי ליצור אינטראקציה עם ספק הזהויות. לכל אשכול יש ClientConfig בשם default במרחב השמות kube-public. השדות הספציפיים שמשנים תלויים בספק הזהויות.
כדי לערוך את default ClientConfig, מוודאים שאפשר להתחבר לאשכול kubectl, ואז מריצים את הפקודה הבאה:
kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public
מחליפים את KUBECONFIG_PATH בנתיב לקובץ kubeconfig של האשכול, לדוגמה $HOME/.kube/config.
כלי לעריכת טקסט טוען את משאב ClientConfig של האשכול. מוסיפים את האובייקט spec.authentication.oidc כמו בדוגמה הבאה. אסור לשנות נתוני ברירת מחדל שכבר נכתבו.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
oidc:
certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
deployCloudConsoleProxy: PROXY_BOOLEAN
extraParams: EXTRA_PARAMS
groupsClaim: GROUPS_CLAIM
groupPrefix: GROUP_PREFIX
issuerURI: ISSUER_URI
kubectlRedirectURI: KUBECTL_REDIRECT_URI
scopes: SCOPES
userClaim: USER_CLAIM
userPrefix: USER_PREFIX
enableAccessToken: ENABLE_ACCESS_TOKEN
proxy: PROXY_URL
# Rest of the resource is managed by Google. DO NOT MODIFY.
לדוגמה, נבחן את השדות הבאים של אסימון הזהות:
{
'iss': 'https://server.example.com'
'sub': 'u98523-4509823'
'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp']
# Multiple lines are omitted here
}
בדוגמה הזו, iss הוא ה-URI של ספק הזהויות, sub מזהה את המשתמש ו-groupList מפרט את קבוצות האבטחה שהמשתמש שייך אליהן. בדוגמה הזו מוצג רק מדגם של השדות שאסימון בפועל עשוי להכיל.
בדוגמה הקודמת של הטוקן, מעדכנים את השדות הבאים באובייקט spec.authentication.oidc של ClientConfig:
issuerURI: 'https://server.example.com'
userClaim: 'sub'
groupsClaim: 'groupList'
# Multiple lines are omitted here
אפשר להוסיף כמה הגדרות של ספקי זהויות מסוג OIDC, LDAP ו-SAML לאותו ClientConfig. האשכול מנסה לבצע אימות באמצעות כל הגדרה לפי הסדר שבו הן מוגדרות, ומפסיק אחרי האימות הראשון שמתבצע בהצלחה. בדוגמה הבאה של ClientConfig מוגדרים כמה ספקי זהויות בסדר מסוים:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
# Multiple lines are omitted here.
- saml:
# Multiple lines are omitted here.
- azureAD:
# Multiple lines are omitted here.
- oidc:
name: Okta OIDC
# Multiple lines are omitted here.
- oidc:
name: Google OIDC
# Multiple lines are omitted here.
שדות OIDC של ClientConfig
בטבלה הבאה מתוארים השדות של אובייקט ClientConfig oidc. השדות שצריך להוסיף תלויים בטוקנים של ספק הזהויות ובאופן שבו האדמין של הפלטפורמה הגדיר את הספק.
| שדה | חובה | תיאור | פורמט |
|---|---|---|---|
| name | כן | השם שרוצים להשתמש בו כדי לזהות את ההגדרה הזו, בדרך כלל שם ספק הזהויות. שם ההגדרה חייב להתחיל באות, ואחריה יכולות להיות עד 39 אותיות קטנות, מספרים או מקפים. השם לא יכול להסתיים במקף. | String |
| certificateAuthorityData | לא | מחרוזת של אישור בקידוד PEM עבור ספק הזהויות, אם האדמין של הפלטפורמה סיפק אותה. מוסיפים את המחרוזת שמתקבלת ל-certificateAuthorityData כשורה אחת. |
String |
| clientID | כן | מזהה הלקוח מספק הזהויות. | String |
| clientSecret | לא | סוד לשימוש עם טוקן צרכן משותף בין אפליקציית הלקוח של OIDC לבין ספק OIDC. | String |
| deployCloudConsoleProxy | לא | קובעת אם נפרס שרת proxy שמאפשר למסוף Google Cloud להתחבר לספק זהויות מקומי שלא נגיש לציבור דרך האינטרנט. כברירת מחדל, הערך שמוגדר הוא false. |
בוליאני |
| extraParams | לא | פרמטרים נוספים של key=value לשליחה לספק הזהויות, שצוינו כרשימה מופרדת בפסיקים – לדוגמה, `prompt=consent,access_type=offline`. | רשימה מופרדת בפסיקים |
| groupsClaim | לא | התביעה (שם השדה) ב-JWT שהספק משתמש בה כדי להחזיר את קבוצות האבטחה של החשבון. | String |
| groupPrefix | לא | הקידומת שרוצים להוסיף לשמות של קבוצות אבטחה כדי למנוע התנגשויות עם שמות קיימים בכללי בקרת הגישה, אם יש לכם הגדרות לכמה ספקי זהויות (בדרך כלל שם הספק). | String |
| issuerURI | כן | ה-URI שאליו מוגשות בקשות הרשאה לספק הזהויות. מזהה ה-URI חייב להשתמש ב-HTTPS ולא יכול להסתיים בלוכסן. | מחרוזת כתובת URL |
| kubectlRedirectURI | כן | כתובת ה-URL להפניה אוטומטית והיציאה שמשמשות את ה-CLI של gcloud ומצוינות על ידי האדמין של הפלטפורמה בזמן ההרשמה, בדרך כלל בפורמט http://localhost:PORT/callback. |
מחרוזת כתובת URL |
| היקפי הרשאות | כן | היקפי הרשאות נוספים לשליחה לספק OpenID. לדוגמה, שירותי Microsoft Azure ו-Okta דורשים את ההיקף offline_access. |
רשימה מופרדת בפסיקים |
| userClaim | לא | הצהרת ה-JWT (שם השדה) שספק הזהויות משתמש בה כדי לזהות חשבון משתמש. אם לא מציינים כאן ערך, ערך ברירת המחדל הוא sub, שהוא טענת זיהוי המשתמש שמשמשת ספקים רבים. אפשר לבחור הצהרות אחרות, כמו 'אימייל' או 'שם', בהתאם לספק OpenID. לכל הטענות מלבד 'אימייל' מתווסף קידומת של כתובת ה-URL של הגורם המנפיק כדי למנוע התנגשויות בשמות. | String |
| userPrefix | לא | התחילית שרוצים להוסיף לתביעות של משתמשים כדי למנוע התנגשויות עם שמות קיימים, אם לא רוצים להשתמש בתחילית שמוגדרת כברירת מחדל. | String |
| enableAccessToken | לא | אם האפשרות הזו מופעלת, האשכול יכול להשתמש בנקודת הקצה userinfo של ספק הזהויות כדי לקבל מידע על קבוצות כשמשתמש מתחבר משורת הפקודה. כך תוכלו להשתמש בקבוצות אבטחה להרשאה אם יש לכם ספק (כמו Okta) שמספק טענות לגבי קבוצות מנקודת הקצה הזו. אם לא מגדירים את המדיניות, ברירת המחדל היא false. |
בוליאני |
| שרת proxy | לא | כתובת שרת ה-Proxy שמשמשת לחיבור לספק הזהויות, אם רלוונטי. יכול להיות שתצטרכו להגדיר את זה אם, לדוגמה, האשכול שלכם נמצא ברשת פרטית וצריך להתחבר לספק זהויות ציבורי. לדוגמה: http://user:password@10.10.10.10:8888. |
String |
אחרי שמעדכנים את ClientConfig, שומרים את הקובץ כדי לעדכן את ClientConfig של האשכול. אם תהיה שגיאת תחביר, תופיע הנחיה לתקן את השגיאה ולשמור את הקובץ.
הגדרות ספציפיות לספק
בקטע הזה מופיעות הנחיות להגדרת כמה ספקי OIDC פופולריים, כולל הגדרות לדוגמה שאפשר להעתיק ולערוך עם הפרטים שלכם.
Microsoft Entra ID
זוהי הגדרת ברירת המחדל להגדרת אשכול לאימות באמצעות Microsoft Entra ID. ההגדרה הזו מאפשרת לאשכול לקבל מידע על המשתמשים וחברי הקבוצות מ-Microsoft Entra ID, ומאפשרת לכם להגדיר בקרת גישה מבוססת-תפקידים (RBAC) ב-Kubernetes על סמך קבוצות. עם זאת, השימוש בהגדרה הזו מגביל אתכם לאחזור של כ-200 קבוצות לכל משתמש.
אם אתם צריכים לאחזר יותר מ-200 קבוצות לכל משתמש, תוכלו להיעזר בהוראות ל-Microsoft Entra ID (מתקדם).
# Multiple lines are omitted here.
spec:
authentication:
- name: oidc-entraid
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
extraParams: prompt=consent, access_type=offline
issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
kubectlRedirectURI: http://localhost:PORT/callback
scopes: openid,email,offline_access
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
מחליפים את מה שכתוב בשדות הבאים:
- CLIENT_ID: מזהה הלקוח מ-Microsoft Entra ID.
- CLIENT_SECRET: סוד לשימוש עם טוקן צרכן בין אפליקציית הלקוח של OIDC לבין ספק OIDC.
- TENANT_ID: סוג החשבון ב-Microsoft Entra ID שצריך לאמת. הערכים הנתמכים הם מזהה הדייר או שם הדייר של חשבונות ששייכים לדייר ספציפי. שם הדייר נקרא גם הדומיין הראשי. במאמר איך מוצאים את מזהה הדייר (tenant) ואת שם הדומיין הראשי ב-Microsoft Entra מוסבר איך מוצאים את הערכים האלה.
- PORT: מספר היציאה שנבחר לכתובת ה-URL להפניה אוטומטית שמשמשת את ה-CLI של gcloud, שצוין על ידי מנהל הפלטפורמה בזמן ההרשמה.
Microsoft Entra ID (מתקדם)
ההגדרה האופציונלית הזו ל-Microsoft Entra ID מאפשרת לאשכול לאחזר מידע על משתמשים וקבוצות ללא הגבלה על מספר הקבוצות לכל משתמש, באמצעות Microsoft Graph API.
מידע על פלטפורמות שתומכות בהגדרה הזו זמין במאמר הגדרה מתקדמת של Microsoft Entra ID.
אם אתם צריכים לאחזר פחות מ-200 קבוצות לכל משתמש, מומלץ להשתמש בהגדרת ברירת המחדל באמצעות עוגן oidc ב-ClientConfig. למידע נוסף, אפשר לעיין בהוראות ל-Microsoft Entra ID.
כל השדות בהגדרות לדוגמה הבאות הם שדות חובה.
# Multiple lines are omitted here.
spec:
authentication:
- name: NAME
proxy: PROXY_URL
azureAD:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
tenant: TENANT_ID
kubectlRedirectURI: http://localhost:PORT/callback
groupFormat: GROUP_FORMAT
userClaim: USER_CLAIM
# Multiple lines are omitted here. Do not modify any pre-filled data.
מחליפים את מה שכתוב בשדות הבאים:
- NAME: השם שרוצים להשתמש בו כדי לזהות את ההגדרה הזו, בדרך כלל שם ספק הזהויות. שם ההגדרה חייב להתחיל באות, ואחריה יכולות להיות עד 39 אותיות קטנות, מספרים או מקפים. השם לא יכול להסתיים במקף.
- PROXY_URL: כתובת שרת ה-Proxy שמשמשת לחיבור לספק הזהויות, אם רלוונטי. יכול להיות שתצטרכו להגדיר את זה אם, לדוגמה, האשכול שלכם נמצא ברשת פרטית וצריך להתחבר לספק זהויות ציבורי. לדוגמה:
http://user:password@10.10.10.10:8888. - CLIENT_ID: מזהה הלקוח מ-Microsoft Entra ID.
- CLIENT_SECRET: סוד לשימוש עם טוקן צרכן בין אפליקציית הלקוח של OIDC לבין ספק OIDC.
- TENANT: סוג החשבון ב-Microsoft Entra שרוצים לאמת. הערכים הנתמכים הם מזהה הדייר או שם הדייר של חשבונות ששייכים לדייר ספציפי. שם הדייר נקרא גם הדומיין הראשי. במאמר איך מוצאים את מזהה הדייר (tenant) ואת שם הדומיין הראשי ב-Microsoft Entra מוסבר איך מוצאים את הערכים האלה.
- PORT: מספר היציאה שנבחר לכתובת ה-URL להפניה אוטומטית שמשמשת את ה-CLI של gcloud, שצוין על ידי מנהל הפלטפורמה בזמן ההרשמה.
- GROUP_FORMAT: הפורמט שבו רוצים לאחזר את פרטי הקבוצה. השדה הזה יכול לקבל ערכים שתואמים ל-
IDאו ל-NAMEשל קבוצות המשתמשים. הערה: ההגדרה הזו זמינה רק לאשכולות בפריסות של Google Distributed Cloud לשרת פיזי. - USER_CLAIM (אופציונלי): הצהרת ה-JWT (שם השדה) שספק הזהויות משתמש בה כדי לזהות חשבון. אם לא מציינים כאן ערך, האשכול משתמש בערך בסדר הבא כדי לאחזר את פרטי המשתמש: 'email', 'preferred_username' או 'sub'. אפשר להשתמש במאפיין הזה החל מגרסה 1.28.
Okta
בשלבים הבאים מוסבר איך להגדיר אימות באמצעות משתמשים וקבוצות עם Okta כספק הזהויות. ההגדרה הזו מאפשרת לאשכול לאחזר טענות לגבי משתמשים וקבוצות באמצעות טוקן גישה ונקודת הקצה userinfo של Okta.
# Multiple lines are omitted here.
spec:
authentication:
- name: okta
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
enableAccessToken: true
extraParams: prompt=consent
groupsClaim: groups
issuerURI: https://OKTA_ISSUER_URI/
kubectlRedirectURI: http://localhost:PORT/callback
scopes: offline_access,email,profile,groups
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
מגבלות על גישה לקבוצות
משתמשי Okta יכולים לאחזר מידע על קבוצות של משתמשים ששמות הקבוצות שלהם, אם הם מחוברים, הם באורך של פחות מ-170, 000 תווים. המשמעות היא חברות בכ-650 קבוצות, בהתחשב באורך המקסימלי של קבוצה ב-Okta. אם המשתמש חבר ביותר מדי קבוצות, קריאת האימות נכשלת.
מה השלב הבא?
אחרי שההגדרה מוחלת, ממשיכים אל הגדרת גישת משתמשים לאשכולות.