הגדרת פרטי כניסה מוכנים מראש לאשכולות משתמשים

במאמר הזה מוסבר איך להגדיר פרטי כניסה מוכנים מראש עבור אשכולות משתמשים ב-Google Distributed Cloud.

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

שימו לב למגבלה הבאה בנוגע לאשכולות מתקדמים:

  • גרסה 1.31: אין תמיכה בפרטי כניסה מוכנים מראש באשכולות מתקדמים.
  • גרסה 1.32 ואילך: יש תמיכה בהכנת פרטי כניסה באשכולות מתקדמים.

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

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

יוצרים אשכול אדמין אם עדיין אין לכם אחד.

סקירה כללית של התהליך

  1. ממלאים קובץ תצורה של סודות.

  2. ב-admin cluster, יוצרים קבוצות של סודות. כל קבוצת סודות נמצאת במרחב שמות משלה ב-Kubernetes.

  3. ליצור אשכול משתמשים. בקובץ התצורה של אשכול המשתמשים, מציינים שרוצים לקחת את פרטי הכניסה מ-Secrets במרחב שמות מסוים באשכול האדמין.

  4. יוצרים קבוצות סודות נוספות וגרסאות נוספות של הסודות לפי הצורך.

  5. מעדכנים את פרטי הכניסה של אשכול משתמשים קיים לפי הצורך.

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

מילוי קובץ התצורה של הסודות

יוצרים תבנית לקובץ תצורה של סודות:

gkectl create-config secrets

הפקודה הקודמת יוצרת קובץ בשם secrets.yaml. אם רוצים, אפשר לשנות את השם והמיקום של הקובץ.

כדאי לקרוא את המאמר קובץ התצורה של הסודות כדי להבין את קובץ התצורה. כדאי להשאיר את המסמך הזה פתוח בכרטיסייה או בחלון נפרדים.

בקובץ התצורה של הסודות, ממלאים את הערכים שרלוונטיים למצב שלכם. חובה למלא ערך בשדה namespace שמתחיל ב-gke-onprem-secrets-.

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

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-user-cluster-1"
  secrets
    vCenter:
      username: "my-vcenter-account"
      password: "U$icUKEW#INE"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "my-key-folder/component-access-key.json"
    registerServiceAccount:
      serviceAccountKeyPath: "my-key-folder/connect-register-key.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "my-key-folder/log-mon-key.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "my-key-folder/audit-log-key.json"

יצירת סודות מוכנים

יוצרים ערכי Secret מוכנים באשכול הניהול:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG

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

  • ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין

  • SECRETS_CONFIG: הנתיב של קובץ התצורה של Secrets

צפייה בסודות שהוכנו

מציגים ברשימה את הסודות שהוכנו באשכול הניהול:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

פלט לדוגמה:

The following secrets have been found:
- namespace: gke-onprem-secrets-user-cluster-1
  - secrets with name prefix: component-access-sa-creds
    name: component-access-sa-creds.1, version 1, age: 58s
  - secrets with name prefix: cloud-audit-logging-service-account-creds
    name: cloud-audit-logging-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: register-service-account-creds
    name: register-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: stackdriver-service-account-creds
    name: stackdriver-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: vsphere-creds
    name: vsphere-creds.1, version: 1, age: 58s

אפשר גם להריץ את הפקודה kubectl get secrets כדי להציג רשימה של הסודות במרחב שמות. לדוגמה:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1

פלט לדוגמה:

component-access-sa-creds ...
cloud-audit-logging-service-account-creds ...
register-service-account-creds.1 ...
stackdriver-service-account-creds.1 ...
vsphere-creds.1 ...

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

יצירת אשכול משתמשים

פועלים לפי ההוראות במאמר יצירת אשכול משתמשים.

כשממלאים את קובץ התצורה של אשכול המשתמשים, מזינים ערך ל-preparedSecrets.namespace. הערך הזה צריך להיות זהה למרחב שמות שציינתם קודם בקובץ התצורה של הסודות.

דוגמה:

preparedSecrets:
  namespace: "gke-onprem-secrets-user-cluster-1"

בקובץ התצורה של אשכול המשתמשים, לא מציינים ערכים לשדות הבאים. השדות האלה לא נדרשים, כי Google Distributed Cloud מקבל את האישורים והמפתחות מהסודות שהכנתם.

  • vCenter.credentials.fileRef.path
  • componentAccessServiceAccountKeyPath
  • loadBalancer.f5BigIP.credentials.fileRef.path
  • gkeConnect.registerServiceAccountKeyPath
  • stackdriver.serviceAccountKeyPath
  • usageMetering.bigQueryServiceAccountKeyPath
  • cloudAuditLogging.serviceAccountKeyPath
  • privateRegistry.credentials.fileRef.path

בקובץ התצורה של אשכול המשתמשים, מציינים את הגרסאות של הסודות המוכנים שרוצים להשתמש בהם. בדוגמה הבאה מצוינת גרסה 1 לכל אחד מחמשת הסודות:

vCenter:
  credentials:
    secretRef:
      version "1"
...
componentAccessServiceAccountKey:
  secretRef:
    version: "1"
...
gkeConnect:
  registerServiceAccountKey:
    secretRef:
      version: "1"
...
stackdriver:
  serviceAccountKey:
    secretRef:
      version: "1"
...
cloudAuditLogging:
  serviceAccountKey:
    secretRef:
      version: "1"

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

משלימים את יצירת אשכול המשתמשים כמו שמתואר במאמר יצירת אשכול משתמשים.

יצירת סודות מוכנים נוספים

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

יוצרים קובץ תצורה חדש של Secrets בשם secrets-2.yaml. מציינים מרחב שמות קיים ומזינים את פרטי הכניסה של הסודות שנבחרו.

דוגמה:

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-user-cluster-1"
  secrets:
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-2.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-2.json"

בדוגמה שלמעלה מוצגות נתיבי מפתחות ל-Secrets הבאים במרחב השמות gke-onprem-secrets-user-cluster-1.

  • גרסה 2 של הסוד stackdriver-service-account-creds
  • גרסה 2 של הסוד cloud-audit-logging-service-account-creds

יוצרים את הסודות החדשים:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml

מציגים ברשימה את הסודות שהוכנו באשכול הניהול:

gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets

פלט לדוגמה:

The following secrets have been found:
- namespace: gke-onprem-secrets-user-cluster-1
  - secrets with name prefix: component-access-sa-creds
    name: component-access-sa-creds.1, version 1, age: 11h
  - secrets with name prefix: cloud-audit-logging-service-account-creds
    name: cloud-audit-logging-service-account-creds.1, version: 1, age: 11h
    name: cloud-audit-logging-service-account-creds.2, version: 2, age: 33m
  - secrets with name prefix: register-service-account-creds
    name: register-service-account-creds.1, version: 1, age: 11h
  - secrets with name prefix: stackdriver-service-account-creds
    name: stackdriver-service-account-creds.1, version: 1, age: 11h
    name: stackdriver-service-account-creds.2, version: 2, age: 33m
  - secrets with name prefix: vsphere-creds
    name: vsphere-creds.1, version: 1, age: 11h

בפלט הקודם אפשר לראות שיש שתי גרסאות של הסוד stackdriver-service-account-creds ושתי גרסאות של הסוד cloud-audit-logging-service-account-creds.

עדכון של פרטי הכניסה לאשכול משתמשים

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

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

gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME  kubeconfig ADMIN_CLUSTER_KUBECONFIG

פלט לדוגמה:

The following prepared secrets have been used for cluster "user-cluster-1":
- namespace: gke-onprem-secrets-user-cluster-1
  secret: vsphere-creds.1, version: 1
  secret: f5-creds.1, version: 1
  secret: component-access-sa-creds.1, version 1
  secret: register-service-account-creds.1, version: 1
  secret: stackdriver-service-account-creds.1, version: 1
  secret: cloud-audit-logging-service-account-creds.1, version: 1

מעתיקים את קובץ התצורה של אשכול המשתמשים לקובץ בשם user-cluster-update.yaml.

ב-user-cluster-update.yaml, מוסיפים קטעים של serviceAccountKey. לדוגמה, בדוגמה הבאה יש serviceAccountKey קטעים ב-stackdriver וב-cloudAuditLogging:

stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  serviceAccountKey:
    secretRef:
      version: "2"
cloudAuditLogging:
  projectID: "my-project-123"
  clusterLocation: "us-central-1"
  serviceAccountKey:
    secretRef:
      version: "latest"

בדוגמה הקודמת מצוין שכאשר אשכול המשתמשים יעודכן, הוא ישתמש ב:

  • גרסה 2 של הסוד stackdriver-service-account-creds

  • הגרסה האחרונה של cloud-audit-logging-service-account-creds הסוד. בדוגמה הזו, הגרסה היא 2.

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

gkectl update credentials stackdriver --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml

gkectl update credentials cloudauditlogging --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml

עכשיו אשכול המשתמשים משתמש ב-Secrets המוכנים הבאים:

  • גרסה 1 של vsphere-creds
  • גרסה 1 של component-access-sa-creds
  • גרסה 1 של register-service-account-creds
  • גרסה 2 של stackdriver-service-account-creds
  • גרסה 2 של cloud-audit-logging-service-account-creds

יצירת סודות נוספים ואשכולות משתמשים

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

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

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-alice"
  secrets:
    vCenter:
      username: "alice"
      password: "zC7r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-a.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-a.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-a.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-a.json"
- namespace: "gke-onprem-secrets-bob"
  secrets:
    vCenter:
      username: "bob"
      password: "zC8r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-b.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-b.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-b.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-b.json"
- namespace: "gke-onprem-secrets-carol"
  secrets:
    vCenter:
      username: "carol"
      password: "zC9r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-c.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-c.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-c.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-c.json"

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

בקובצי ההגדרות של אשכול המשתמשים, מציינים ערכים ל-serviceAccountKey.secretRef.version כדי להגדיר את הגרסאות של הסודות שרוצים להשתמש בהן. אפשר להגדיר את הערך כ-"latest", המחרוזת הריקה או מחרוזת של מספר שלם.

לדוגמה, נניח שלכל הסודות שלכם יש גרסאות 1, 2 ו-3. נניח שזוהי חלק מקובץ התצורה של אשכול המשתמשים עבור אליס.

apiVersion: v1
kind: UserCluster
name: "user-cluster-alice"
preparedSecrets:
  namespace: "gke-onprem-secrets-alice"
...
vCenter:
  credentials:
gkeConnect:
  projectID: "project-a"
  serviceAccountKey:
    secretRef:
      version: "2"
stackdriver:
  projectID: "project-a"
  clusterLocation: "us-central1"
  serviceAccountKey:
    secretRef:
      version: "latest"
cloudAuditLogging:
  projectID: "project-a"
  clusterLocation: "us-central-1"
  serviceAccountKey:
    secretRef:
      version: ""

בדוגמה שלמעלה אפשר לראות:

  • לא צוין secretRef ל-vCenter, ולכן האשכול ישתמש בגרסה האחרונה של הסוד vsphere-creds במרחב השמות gke-onprem-secrets-alice.

  • האשכול ישתמש בגרסה 2 של register-service-account-creds Secret במרחב השמות gke-onprem-secrets-alice.

  • האשכול ישתמש בגרסה האחרונה של הסוד stackdriver-service-account-creds במרחב השמות gke-onprem-secrets-alice. בדוגמה הזו, זו גרסה 3.

  • הגרסה של cloudAuditLogging היא מחרוזת ריקה, ולכן האשכול ישתמש בגרסה האחרונה של הסוד cloud-audit-logging-service-account-creds במרחב השמות gke-onprem-secrets-alice. בדוגמה הזו, הגרסה היא 3.

  • לא צוין secretRef.version לחשבון השירות של רכיב הגישה, ולכן האשכול ישתמש בגרסה האחרונה.

מחיקת סודות מוכנים

כדי להציג רשימה של כל הסודות המוכנים ומרחבי השמות שלהם:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

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

כדי למחוק מרחב שמות מוכן של סודות ואת כל הסודות שבו:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

אם אף אשכול משתמשים לא משתמש ב-Secret שהוכן באופן פרטני, אפשר למחוק את ה-Secret.

כדי למחוק Secret מוכן ספציפי:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --secret-name SECRET