הגדרת אשכולות של חברי צי לשימוש באימות SAML

במסמך הזה מוסבר איך מנהלי אשכולות או מפעילים של אפליקציות יכולים להגדיר אשכולות Kubernetes כדי לתמוך באימות מספק שפת סימון טענות אבטחה (SAML) של צד שלישי. מידע נוסף זמין במאמר מידע על אימות באמצעות זהויות של צד שלישי.

מגבלות

צריך להשתמש בסוג אשכול שתומך ב-SAML.

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

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

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

  3. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  4. אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:

    gcloud components update
    gcloud components install kubectl
  5. מוודאים שאדמין הפלטפורמה נתן לכם את כל המידע שאתם צריכים על הספק. מידע נוסף זמין במאמר בנושא שיתוף פרטים של ספק.

הגדרת האוסף

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

כדי לערוך את ה-ClientConfig של default, ודאו שאתם יכולים להתחבר לאשכול kubectl, ואז הריצו את הפקודה הבאה:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default

מחליפים את KUBECONFIG_PATH בנתיב לקובץ kubeconfig של האשכול, לדוגמה $HOME/.kube/config.

כלי לעריכת טקסט טוען את המשאב ClientConfig של האשכול. מוסיפים את האובייקט spec.authentication.saml כמו בדוגמה הבאה. אל תשנו נתוני ברירת מחדל שכבר נכתבו.

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - name: NAME
    saml:
      attributeMapping:
        ATTRIBUTE_KEY_1: ATTRIBUTE_CEL_EXPRESSION_1
        ATTRIBUTE_KEY_2: ATTRIBUTE_CEL_EXPRESSION_2
      groupsAttribute: GROUPS_ATTRIBUTE
      groupPrefix: GROUP_PREFIX
      idpEntityID: ENTITY_ID
      idpSingleSignOnURI: SIGN_ON_URI
      idpCertificateDataList: IDP_CA_CERT
      userAttribute: USER_ATTRIBUTE
      userPrefix: USER_PREFIX
    certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
    preferredAuthentication: PREFERRED_AUTHENTICATION
    server: <>
# Rest of the resource is managed by Google. DO NOT MODIFY.
...

אפשר להוסיף כמה הגדרות של ספקי זהויות ב-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.

שדות SAML של ClientConfig

בטבלה הבאה מתוארים השדות של האובייקט ClientConfig saml. השדות שצריך להוסיף תלויים בטוקנים של ספק הזהויות ובאופן שבו האדמין של הפלטפורמה הגדיר את הספק.

שדה חובה תיאור פורמט
name כן השם שבו רוצים להשתמש כדי לזהות את ההגדרה הזו, בדרך כלל השם של ספק הזהויות. שם ההגדרה חייב להתחיל באות, ואחריה עד 39 אותיות קטנות, מספרים או מקפים. הוא לא יכול להסתיים במקף. String
idpEntityID כן מזהה הישות ב-SAML של ספק ה-SAML, שצוין בפורמט URI. לדוגמה: https://www.idp.com/saml. מחרוזת של כתובת URL
idpSingleSignOnURI כן נקודת הקצה של ספק SAML ל-SSO, שצוינה בפורמט URI. לדוגמה: https://www.idp.com/saml/sso. מחרוזת של כתובת URL
idpCertificateDataList כן תואם לאישורים של ספק הזהויות שמשמשים לאימות התגובה של SAML. האישורים האלה צריכים להיות בקידוד Base64 רגיל ובפורמט PEM. כדי לאפשר רוטציה של אישורים של ספק הזהויות, המערכת תומכת בשימוש בשני אישורים לכל היותר. String
userAttribute לא השם של המאפיין בתגובת SAML שמכיל את שם המשתמש. String
groupsAttribute לא השם של המאפיין בתגובת SAML שמכיל את פרטי הקבוצה של המשתמש. String
userPrefix לא התחילית שרוצים להוסיף לתביעות של משתמשים כדי למנוע התנגשויות עם שמות קיימים, אם לא רוצים להשתמש בתחילית שמוגדרת כברירת מחדל. String
groupPrefix לא הקידומת שרוצים להוסיף לשמות של קבוצות אבטחה. הסיבה לכך היא כדי למנוע התנגשויות עם שמות קיימים בכללי בקרת הגישה, אם יש לכם הגדרות לכמה ספקי זהויות (בדרך כלל שם הספק). String
attributeMapping לא מיפוי של מאפייני משתמש נוספים. String
certificateAuthorityData לא אם מנהל הפלטפורמה שלכם מספק לכם מחרוזת של אישור בקידוד PEM, זהו ספק הזהויות. כוללים את המחרוזת שנוצרה ב-certificateAuthorityData כשורה אחת. String
preferredAuthentication לא השם של שיטת האימות המועדפת שהוגדרה באשכול. String

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

מה השלב הבא?

אחרי שההגדרה מוחלת, ממשיכים אל הגדרת גישת משתמשים לאשכולות.