שימוש בתוסף Secret Manager עם Google Kubernetes Engine

השילוב בין Secret Manager לבין Google Kubernetes Engine‏ (GKE) מאפשר לכם לאחסן נתונים רגישים כמו סיסמאות ואישורים שמשמשים אשכולות GKE כסודות ב-Secret Manager.

בדף הזה מוסבר איך אפשר להשתמש בתוסף Secret Manager כדי לגשת לסודות שמאוחסנים ב-Secret Manager כנפחים שמוצמדים ל-Pods של Kubernetes.

התהליך הזה כולל את השלבים הבאים:

  1. מפעילים את התוסף Secret Manager באשכול GKE חדש או קיים, ואם רוצים, מגדירים סיבוב אוטומטי של סודות.
  2. הגדרת אימות של אפליקציות ל-Secret Manager API.
  3. מגדירים אילו סודות לטעון לקבוצות Pod ב-Kubernetes באמצעות קובץ SecretProviderClass YAML. תוסף Secret Manager תומך בסודות גלובליים ואזוריים.
  4. יוצרים נפח שבו הסודות יותקנו. אחרי שמצרפים את אמצעי האחסון, אפליקציות במאגר יכולות לגשת לנתונים במערכת הקבצים של המאגר.

התוסף Secret Manager מבוסס על Kubernetes Secrets Store CSI Driver בקוד פתוח ועל Google Secret Manager provider. אם אתם משתמשים ב-Secrets Store CSI Driver בקוד פתוח כדי לגשת לסודות, אתם יכולים לעבור לתוסף Secret Manager. מידע נוסף זמין במאמר בנושא העברה מ-Secrets Store CSI Driver הקיים.

יתרונות

התוסף Secret Manager מספק את היתרונות הבאים:

  • אתם יכולים להשתמש בפתרון מנוהל ותומך באופן מלא כדי לגשת לסודות של Secret Manager מתוך GKE בלי תקורה תפעולית.
  • לא צריך לכתוב קוד בהתאמה אישית כדי לגשת לסודות שמאוחסנים ב-Secret Manager.
  • אתם יכולים לאחסן ולנהל את כל הסודות שלכם באופן מרכזי ב-Secret Manager, ולגשת לסודות באופן סלקטיבי מתוך פודים של GKE באמצעות התוסף Secret Manager. כך תוכלו להשתמש בתכונות שמציע Secret Manager, כמו הצפנת CMEK, בקרת גישה מדויקת, ניהול מחזור חיים ויומני ביקורת, וגם בתכונות של Kubernetes, כמו העברת סודות למאגרי מידע בצורה של נפחים מוצמדים.
  • התוסף Secret Manager נתמך גם באשכולות רגילים וגם באשכולות Autopilot.
  • התוסף Secret Manager תומך בצמתים שמשתמשים בקובצי אימג' של צמתים של מערכת הפעלה שמותאמת לקונטיינרים או של Ubuntu.

מגבלות

יש כמה מגבלות לתוסף Secret Manager:

  • התוסף Secret Manager לא תומך בתכונה Sync as Kubernetes Secret שזמינה ב-Secrets Store CSI Driver בקוד פתוח. אם רוצים לסנכרן סודות שמאוחסנים ב-Secret Manager עם סודות של Kubernetes, צריך להשתמש בתכונת סנכרון הסודות המשולבת של Secret Manager. מידע נוסף זמין במאמר בנושא סנכרון סודות עם סודות של Kubernetes.

  • התוסף Secret Manager לא תומך בצמתים של Windows Server.

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

  • מפעילים את Secret Manager ואת Google Kubernetes Engine APIs, אם הם לא מופעלים כבר.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

  • אם רוצים להשתמש ב-Google Cloud CLI למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית.

    אי אפשר להגדיר את התוסף Secret Manager באופן ידני באמצעות Google Cloud SDK או מסוף Google Cloud .

  • מוודאים שהאשכול פועל בגרסה GKE 1.27.14-gke.1042001 ואילך עם תמונת צומת של Linux. כדי להשתמש ברוטציה אוטומטית של סודות, האשכול צריך להריץ GKE מגרסה 1.32.2-gke.1059000 ואילך.

  • אם אתם משתמשים באשכול GKE Standard, אתם צריכים לוודא שמופעל באשכול שלכם איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE. איחוד זהויות של עומסי עבודה ל-GKE מופעל כברירת מחדל באשכול Autopilot. קבוצות Pod ב-Kubernetes משתמשות באיחוד זהויות של עומסי עבודה ל-GKE כדי לבצע אימות ל-Secret Manager API.

הפעלת התוסף Secret Manager

אפשר להפעיל את התוסף Secret Manager גם באשכולות רגילים וגם באשכולות של Autopilot.

כשמפעילים את התוסף באשכול חדש או באשכול קיים, אפשר גם להגדיר רוטציה אוטומטית של סודות. אם מפעילים את הרוטציה האוטומטית, עדכוני סודות ב-Secret Manager נדחפים מעת לעת לנפחי Pod מוצמדים בלי שצריך להפעיל מחדש את ה-Pod. מרווח הזמן שמוגדר כברירת מחדל בין רוטציות הוא 2 דקות (120 שניות), ומרווח הזמן המינימלי המותר הוא 60 שניות. כדי להשתמש בסיבוב אוטומטי של סודות, צריך GKE בגרסה ‎1.32.2-gke.1059000 ואילך.

הפעלת התוסף Secret Manager באשכול GKE חדש

כדי להפעיל את התוסף Secret Manager כשיוצרים את האשכול:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine.

    מעבר אל Google Kubernetes Engine

  2. לוחצים על Create.

  3. בתיבת הדו-שיח Create cluster (יצירת אשכול), לוחצים על Configure (הגדרה) כדי ליצור אשכול Standard.

  4. בחלונית הניווט, בקטע Cluster (אשכול), לוחצים על Advanced settings (הגדרות מתקדמות).

  5. בשורה Secret manager לוחצים על Edit configuration.

  6. מסמנים את תיבת הסימון Enable Secret Manager (הפעלת Secret Manager).

  7. אופציונלי: כדי להפעיל סיבוב אוטומטי של סודות, מסמנים את התיבה Configure auto-rotation (הגדרת סיבוב אוטומטי), ואז מציינים את Rotation interval (מרווח הסיבוב) ואת Rotation interval unit (יחידת מרווח הסיבוב).

  8. לוחצים על Save.

  9. בשורה Workload identity, מוודאים שבקטע Details מופיעה ההגדרה Enabled. אם מופיע הכיתוב מושבת, לוחצים על עריכת ההגדרה, מסמנים את התיבה הפעלת Workload Identity ואז לוחצים על שמירה.

  10. ממשיכים להגדיר את האשכול ולוחצים על יצירה.

gcloud

{ Standard cluster}

כדי ליצור אשכול Standard עם התוסף Secret Manager, בוחרים אחת מהאפשרויות הבאות בהתאם לדרישות הסבב:

אפשרות 1 (מומלצת): רוטציה אוטומטית כברירת מחדל

מפעילים את התוסף Secret Manager עם רוטציה אוטומטית באמצעות המרווח שמוגדר כברירת מחדל של 2 דקות (120 שניות):

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל בגרסת GKE‏ 1.32.2-gke.1059000 ואילך. אם ערוץ ההפצה שמוגדר כברירת מחדל לא כולל את הגרסה הזו, צריך להשתמש בדגל --release-channel כדי לבחור ערוץ הפצה שכן כולל אותה.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog

‏Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog

Windows‏ (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog
אפשרות 2: מרווח רוטציה אוטומטי בהתאמה אישית

מפעילים את התוסף Secret Manager עם רוטציה אוטומטית ומרווח רוטציה מותאם אישית:

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

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל בגרסת GKE‏ 1.32.2-gke.1059000 ואילך. אם ערוץ ההפצה שמוגדר כברירת מחדל לא כולל את הגרסה הזו, צריך להשתמש בדגל --release-channel כדי לבחור ערוץ הפצה שכן כולל אותה.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • ‫ROTATION_INTERVAL: מרווח הזמן בין הרוטציות בשניות. הערך חייב להיות מספר שלם חיובי עם הסיומת s. הערך המינימלי המותר הוא 60s. לדוגמה, כדי להגדיר את המרווח ל-5 דקות, משתמשים ב-300s.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

‏Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    

Windows‏ (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL
    
אפשרות 3: ללא סיבוב אוטומטי

הפעלת התוסף Secret Manager ללא רוטציה אוטומטית:

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

  • ‫CLUSTER_NAME: השם של האשכול.
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1.
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל ב-GKE בגרסה 1.27.14-gke.1042001 ואילך. אם ערוץ ההפצה שמוגדר כברירת מחדל לא כולל את הגרסה הזו, צריך להשתמש בדגל --release-channel כדי לבחור ערוץ הפצה שכן כולל אותה.
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog

‏Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog

Windows‏ (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog

{ Autopilot cluster}

כדי ליצור אשכול Autopilot עם התוסף Secret Manager, בוחרים אחת מהאפשרויות הבאות בהתאם לדרישות הרוטציה:

אפשרות 1 (מומלצת): רוטציה אוטומטית כברירת מחדל

מפעילים את התוסף Secret Manager עם רוטציה אוטומטית באמצעות המרווח שמוגדר כברירת מחדל של 2 דקות (120 שניות):

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל בגרסת GKE‏ 1.32.2-gke.1059000 ואילך. כדי להגדיר גרסה ספציפית, אפשר לעיין במאמר בנושא הגדרת הגרסה וערוץ ההפצה של אשכול חדש של Autopilot.
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --cluster-version=VERSION \
    --location=LOCATION

‏Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --cluster-version=VERSION `
    --location=LOCATION

Windows‏ (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --cluster-version=VERSION ^
    --location=LOCATION
אפשרות 2: מרווח רוטציה אוטומטי בהתאמה אישית

מפעילים את התוסף Secret Manager עם רוטציה אוטומטית ומרווח רוטציה מותאם אישית:

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

  • ‫CLUSTER_NAME: שם האשכול
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל בגרסת GKE‏ 1.32.2-gke.1059000 ואילך. כדי להגדיר גרסה ספציפית, אפשר לעיין במאמר בנושא הגדרת הגרסה וערוץ ההפצה של אשכול חדש של Autopilot.
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1
  • ‫ROTATION_INTERVAL: מרווח הזמן בין הרוטציות בשניות. הערך חייב להיות מספר שלם חיובי עם הסיומת s. הערך המינימלי המותר הוא 60s. לדוגמה, כדי להגדיר את המרווח ל-5 דקות, משתמשים ב-300s.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL \
    --cluster-version=VERSION \
    --location=LOCATION
    

‏Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL `
    --cluster-version=VERSION `
    --location=LOCATION
    

Windows‏ (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL ^
    --cluster-version=VERSION ^
    --location=LOCATION
    
אפשרות 3: ללא סיבוב אוטומטי

הפעלת התוסף Secret Manager ללא רוטציה אוטומטית:

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

  • ‫CLUSTER_NAME: השם של האשכול.
  • ‫VERSION: גרסת GKE הספציפית שרוצים להשתמש בה. מוודאים שהאשכול פועל ב-GKE בגרסה 1.27.14-gke.1042001 ואילך. כדי להגדיר גרסה ספציפית, אפשר לעיין במאמר הגדרת הגרסה וערוץ ההפצה של אשכול חדש של Autopilot.
  • ‫LOCATION: האזור של Compute Engine שבו נמצא האשכול, למשל us-central1.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --cluster-version=VERSION \
    --location=LOCATION

‏Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --cluster-version=VERSION `
    --location=LOCATION

Windows‏ (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --cluster-version=VERSION ^
    --location=LOCATION

אחרי שמפעילים את התוסף Secret Manager, אפשר להשתמש במנהל ההתקן של ה-CSI של Secrets Store בנפחי אחסון של Kubernetes באמצעות שם מנהל ההתקן וההקצאה: secrets-store-gke.csi.k8s.io.

הפעלת התוסף Secret Manager באשכול GKE קיים

כדי להפעיל את התוסף Secret Manager באשכול קיים:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine.

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. בדף הפרטים של האשכול, בקטע אבטחה, לוחצים על Secret Manager.

  4. בתיבת הדו-שיח עריכת Secret Manager, מסמנים את התיבה הפעלת Secret Manager.

  5. אופציונלי: כדי להפעיל סיבוב אוטומטי של סודות, מסמנים את התיבה Configure auto-rotation (הגדרת סיבוב אוטומטי), ואז מציינים את Rotation interval (מרווח הסיבוב) ואת Rotation interval unit (יחידת מרווח הסיבוב).

  6. לוחצים על שמירת השינויים.

gcloud

כדי להפעיל את התוסף Secret Manager באשכול קיים, בוחרים אחת מהאפשרויות הבאות בהתאם לדרישות הסבב:

אפשרות 1 (מומלצת): רוטציה אוטומטית כברירת מחדל

מפעילים את התוסף Secret Manager עם רוטציה אוטומטית באמצעות המרווח שמוגדר כברירת מחדל של 2 דקות (120 שניות) באשכול קיים:

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

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: האזור ב-Compute Engine שבו נמצא האשכול, למשל us-central1

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --enable-secret-manager-rotation

‏Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --enable-secret-manager-rotation

Windows‏ (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --enable-secret-manager-rotation

אפשרות 2: מרווח רוטציה אוטומטי בהתאמה אישית

הפעלת התוסף Secret Manager עם רוטציה אוטומטית ומרווח רוטציה מותאם אישית באשכול קיים:

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

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: האזור ב-Compute Engine שבו נמצא האשכול, למשל us-central1
  • ‫ROTATION_INTERVAL: מרווח הזמן בין הרוטציות בשניות. הערך חייב להיות מספר שלם חיובי עם הסיומת s. הערך המינימלי המותר הוא 60s. לדוגמה, כדי להגדיר את המרווח ל-5 דקות, משתמשים ב-300s.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --enable-secret-manager-rotation \
    --secret-manager-rotation-interval=ROTATION_INTERVAL

‏Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --enable-secret-manager-rotation `
    --secret-manager-rotation-interval=ROTATION_INTERVAL

Windows‏ (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --enable-secret-manager-rotation ^
    --secret-manager-rotation-interval=ROTATION_INTERVAL

אפשרות 3: ללא סיבוב אוטומטי

מפעילים את התוסף Secret Manager באשכול קיים ללא רוטציה אוטומטית:

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫LOCATION: האזור של Compute Engine עבור האשכול, למשל us-central1

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION

‏Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION

Windows‏ (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION

אימות ההתקנה של התוסף Secret Manager

כדי לוודא שהתוסף Secret Manager מותקן באשכול Kubernetes, מריצים את הפקודה הבאה:

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4

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

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: המיקום של האשכול, למשל us-central1

ניהול רוטציה אוטומטית של סודות

כשמפעילים את הרוטציה האוטומטית של הסודות (--enable-secret-manager-rotation), התוסף Secret Manager בודק מעת לעת את Secret Manager כדי למצוא גרסאות חדשות של הסודות שצוינו במשאב המותאם אישית SecretProviderClass. הדגל --secret-manager-rotation-interval קובע באיזו תדירות התוסף בודק אם יש עדכונים (ברירת מחדל: 120 שניות, מינימום: 60 שניות).

כשהתוסף מזהה גרסה חדשה של סוד ב-Secret Manager, הוא מעדכן את קובץ הסוד המצורף בנפח של ה-Pod בלי לדרוש הפעלה מחדש של ה-Pod.

השבתת רוטציה אוטומטית של סודות באשכול קיים

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine.

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. בדף הפרטים של האשכול, בקטע אבטחה, לוחצים על Secret Manager.

  4. בתיבת הדו-שיח Edit Secret Manager (עריכת Secret Manager), מבטלים את הסימון בתיבה Configure auto-rotation (הגדרת רוטציה אוטומטית).

  5. לוחצים על שמירת השינויים.

gcloud

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

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫LOCATION: האזור ב-Compute Engine שבו נמצא האשכול, למשל us-central1

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --no-enable-secret-manager-rotation

‏Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --no-enable-secret-manager-rotation

Windows‏ (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --no-enable-secret-manager-rotation

הגדרת אפליקציות לאימות ב-Secret Manager API

ספק Google Secret Manager משתמש בזהות עומס העבודה של ה-Pod שסוד מוצמד אליו כשמתבצע אימות ל-Secret Manager API. כדי לאפשר לאפליקציות שלכם לבצע אימות ל-Secret Manager API באמצעות איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, אתם צריכים:

  • יוצרים Kubernetes ServiceAccount או משתמשים ב-Kubernetes ServiceAccount קיים באותו מרחב שמות של ה-Pod שבו רוצים לטעון את הסוד.

  • יוצרים מדיניות הרשאות בניהול הזהויות והרשאות הגישה (IAM) עבור הסוד ב-Secret Manager.

קבוצות Pod שמשתמשות ב-Kubernetes ServiceAccount שהוגדר מאומתות באופן אוטומטי בתור מזהה החשבון הראשי של IAM שתואם ל-Kubernetes ServiceAccount כשהן ניגשות ל-Secret Manager API.

יצירת חשבון שירות ב-Kubernetes

  1. שומרים את קובץ המניפסט הבא בשם service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: KSA_NAME
      namespace: NAMESPACE
    

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

    • ‫KSA_NAME: השם של חשבון השירות החדש ב-Kubernetes
    • ‫NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור ServiceAccount
  2. החלת המניפסט:

    kubectl apply -f service-account.yaml
    
  3. יוצרים מדיניות הרשאה ב-IAM שמפנה אל חשבון השירות החדש של Kubernetes ומעניקים לו הרשאה לגשת לסוד:

    gcloud secrets add-iam-policy-binding SECRET_NAME \
        --role=roles/secretmanager.secretAccessor \
        --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
    

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

    • ‫SECRET_NAME: השם של הסוד ב-Secret Manager
    • ‫PROJECT_NUMBER: מספר הפרויקט Google Cloud
    • ‫PROJECT_ID: מזהה הפרויקט של Google Cloud הפרויקט שמכיל את אשכול GKE
    • ‫NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור ServiceAccount
    • ‫KSA_NAME: השם של חשבון השירות הקיים ב-Kubernetes

שימוש בחשבון שירות קיים ב-Kubernetes

יוצרים מדיניות הרשאה ב-IAM שמפנה אל Kubernetes ServiceAccount הקיים ומעניקים לו הרשאה לגשת לסוד:

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --role=roles/secretmanager.secretAccessor \
    --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME

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

  • ‫SECRET_NAME: השם של הסוד ב-Secret Manager
  • ‫PROJECT_NUMBER: מספר הפרויקט Google Cloud
  • ‫PROJECT_ID: מזהה הפרויקט של Google Cloud הפרויקט שמכיל את אשכול GKE
  • ‫NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור ServiceAccount
  • ‫KSA_NAME: השם של חשבון השירות הקיים ב-Kubernetes

הגדרת הסודות שיועלו

כדי לציין אילו סודות להוסיף כקבצים ל-Pod של Kubernetes, יוצרים מניפסט SecretProviderClass YAML ומפרטים את הסודות שרוצים להוסיף ואת שם הקובץ שרוצים להוסיף אותם אליו. איך לעשות את זה?

  1. שומרים את קובץ המניפסט הבא בשם app-secrets.yaml:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME
    spec:
      provider: gke
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

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

    • ‫SECRET_PROVIDER_CLASS_NAME: השם של אובייקט SecretProviderClass.
    • PROJECT_ID: מזהה הפרויקט.
    • ‫SECRET_NAME: שם הסוד.
    • ‫SECRET_VERSION: גרסת הסוד. הגרסה של הסוד צריכה להיות באותו אזור כמו האשכול.
    • ‫FILENAME.txt: שם הקובץ שבו יותקן ערך הסוד. אפשר ליצור כמה קבצים באמצעות המשתנים resourceName ו-path.

    בסוד אזורי, resourceName הוא הנתיב המלא למשאב הסוד שכולל את המיקום של הסוד האזורי. לדוגמה: ‎"projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"‎

  2. החלת המניפסט:

    kubectl apply -f app-secrets.yaml -n NAMESPACE
    

    מחליפים את NAMESPACE בשם של מרחב השמות של Kubernetes עבור ServiceAccount.

  3. מוודאים שאובייקט SecretProviderClass נוצר:

    kubectl get SecretProviderClasses -n NAMESPACE
    

הגדרת נפח אחסון שבו יותקנו הסודות

  1. שומרים את ההגדרה הבאה בשם my-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - image: IMAGE_NAME
        imagePullPolicy: IfNotPresent
        name: POD_NAME
        resources:
          requests:
            cpu: 100m
        stdin: true
        stdinOnce: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
          - mountPath: "/var/secrets"
            name: mysecret
      volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME
    

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

    • ‫POD_NAME: השם של ה-Pod ב-Kubernetes שבו הסוד מותקן
    • ‫NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור ServiceAccount
    • ‫KSA_NAME: חשבון השירות של Kubernetes שהגדרתם בשלב הגדרת אפליקציות לאימות ל-Secret Manager API
    • ‫IMAGE_NAME: שם קובץ האימג' של הקונטיינר
    • ‫SECRET_PROVIDER_CLASS_NAME: השם של אובייקט SecretProviderClass
  2. באשכולות Standard בלבד, מוסיפים את השורה הבאה לשדה template.spec כדי למקם את ה-Pods במאגרי צמתים שמשתמשים באיחוד זהויות של עומסי עבודה ל-GKE.

    באשכולות Autopilot, אפשר לדלג על השלב הזה כי כל צומת משתמש באיחוד זהויות של עומסי עבודה ל-GKE, ולכן האשכול דוחה את nodeSelector הזה.

    spec:
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  3. מחילים את ההגדרה על האשכול.

    kubectl apply -f my-pod.yaml
    

בשלב הזה מתבצעת טעינה של נפח mysecret ב-/var/secrets באמצעות מנהל התקן CSI ‏(secrets-store-gke.csi.k8s.io). הנפח הזה מתייחס לאובייקט SecretProviderClass שפועל כספק.

מעבר מ-Kubernetes Secrets Store CSI Driver הקיים בקוד פתוח

אם אתם משתמשים במנהל התקן ה-CSI של Kubernetes Secrets Store בקוד פתוח ובספק Google Secret Manager, אתם יכולים להעביר את עומסי העבודה שלכם לתוסף המנוהל Secret Manager.

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

כדי לעבור לתוסף Secret Manager, פועלים לפי השלבים הבאים:

  1. הפעלת התוסף Secret Manager באשכול
  2. יצירת מניפסטים של SecretProviderClass
  3. עדכון מניפסטים של עומסי עבודה
  4. אימות ההעברה
  5. מחיקת משאבי קוד פתוח ישנים

שלב 1: מפעילים את התוסף Secret Manager באשכול

מפעילים את התוסף Secret Manager באשכול GKE הקיים:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --enable-secret-manager \
    [--enable-secret-manager-rotation \
     --secret-manager-rotation-interval=ROTATION_INTERVAL]

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫LOCATION: המיקום של האשכול, למשל us-central1
  • אופציונלי: ROTATION_INTERVAL: התדירות שבה סודות מוצפנים מתעדכנים אוטומטית, כמו 120s או 3600s. הערך המינימלי המותר הוא 60s, וערך ברירת המחדל הוא 120s.

שלב 2: יצירת קובצי SecretProviderClass manifest

יוצרים SecretProviderClassקובץ manifest עם provider: gke לכל אפליקציה. מומלץ להוסיף את -gke לשם המשאב כדי שהמשאבים הישנים והחדשים של SecretProviderClass יוכלו להתקיים יחד במהלך עדכונים מדורגים.

  1. שומרים את קובץ המניפסט הבא בשם secret-provider-class-gke.yaml:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME-gke # Append -gke to coexist with existing SPC
      namespace: NAMESPACE
    spec:
      provider: gke # Changed from 'gcp'
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

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

    • ‫SECRET_PROVIDER_CLASS_NAME-gke: השם של משאב SecretProviderClass החדש
    • ‫NAMESPACE: מרחב השמות ב-Kubernetes שבו פועל עומס העבודה
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SECRET_NAME: השם של הסוד ב-Secret Manager
    • ‫SECRET_VERSION: גרסת הסוד, כמו latest או 1
    • ‫FILENAME.txt: שם הקובץ שבו הערך הסודי מותקן

    לסודות אזוריים, מציינים את נתיב המשאב המלא כולל המיקום: "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. החלת המניפסט החדש SecretProviderClass:

    kubectl apply -f secret-provider-class-gke.yaml
    

שלב 3: עדכון מניפסטים של עומסי עבודה

מעדכנים את המניפסטים של ה-Pod או הפריסה כדי להשתמש במנהל ההתקן המנוהל (secrets-store-gke.csi.k8s.io) ומפנים לשם החדש SecretProviderClass.

  1. מעדכנים את הקטע volumes במניפסט של עומס העבודה (לדוגמה, deployment.yaml):

    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_NAME
        volumeMounts:
        - name: secrets-volume
          mountPath: "/var/secrets"
          readOnly: true
      volumes:
      - name: secrets-volume
        csi:
          driver: secrets-store-gke.csi.k8s.io # Changed from 'secrets-store.csi.k8s.io'
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME-gke # Reference new SPC name
    

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

    • ‫CONTAINER_NAME: השם של הקונטיינר בעומס העבודה
    • ‫IMAGE_NAME: השם של קובץ האימג' בקונטיינר
    • ‫SECRET_PROVIDER_CLASS_NAME-gke: השם של משאב SecretProviderClass החדש
  2. מחילים את מניפסט כוח העבודה המעודכן כדי להפעיל פריסה מתגלגלת:

    kubectl apply -f deployment.yaml
    

שלב 4: אימות ההעברה

מוודאים שעומסי העבודה משתמשים בתוסף המנוהל:

  1. בודקים שהפודים הופעלו והגיעו למצב Running:

    kubectl get pods -n NAMESPACE
    

    מחליפים את NAMESPACE במרחב השמות של Kubernetes שבו פועלת עומס העבודה.

  2. מוודאים שהסודות מותקנים כראוי ושיש אליהם גישה בתוך הקונטיינר:

    kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
    

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

    • ‫POD_NAME: השם של ה-Pod ב-Kubernetes
    • ‫NAMESPACE: מרחב השמות ב-Kubernetes שבו פועל עומס העבודה
    • ‫FILENAME.txt: שם הקובץ של הסוד שמוגדר ב-SecretProviderClass
  3. (אופציונלי) אם הפעלתם רוטציה אוטומטית, צריך לוודא שהסודות מתעדכנים:

    1. מוסיפים גרסה חדשה של הסוד ב-Secret Manager.
    2. מחכים למרווח הרוטציה שהוגדר, למשל 120 שניות.
    3. בודקים שוב את קובץ הסודות המצורף בתוך ה-Pod כדי לוודא שהתוכן עודכן בלי להפעיל מחדש את ה-Pod:

      kubectl exec -it POD_NAME -n NAMESPACE -- cat /var/secrets/FILENAME.txt
      

שלב 5: מחיקת משאבי קוד פתוח ישנים

  1. מוחקים את המשאבים הישנים של SecretProviderClass:

    kubectl delete secretproviderclass OLD_SECRET_PROVIDER_CLASS_NAME -n NAMESPACE
    

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

    • ‫OLD_SECRET_PROVIDER_CLASS_NAME: השם של משאב SecretProviderClass מדור קודם, למשל my-app-secrets
    • ‫NAMESPACE: מרחב השמות ב-Kubernetes שבו פועל עומס העבודה
  2. אם פרסתם את פלאגין ספק Google Secret Manager בקוד פתוח באמצעות מניפסט, צריך למחוק את DaemonSet:

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp/main/deploy/provider-gcp-plugin.yaml
    
  3. אם התקנתם את מנהל ההתקן Secrets Store CSI בקוד פתוח באמצעות Helm, צריך להסיר את גרסת Helm:

    helm uninstall csi-secrets-store -n kube-system
    

השבתת התוסף Secret Manager

כדי להשבית את התוסף Secret Manager באשכול קיים מסוג Standard או באשכול מסוג Autopilot, מריצים את הפקודה הבאה:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine.

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. בדף הפרטים של האשכול, בקטע אבטחה, לוחצים על Secret Manager.

  4. בתיבת הדו-שיח עריכת Secret Manager, מבטלים את הסימון בתיבת הסימון הפעלת Secret Manager.

  5. לוחצים על שמירת השינויים.

gcloud

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

  • ‫CLUSTER_NAME: השם של האשכול
  • ‫LOCATION: המיקום של האשכול ב-Compute Engine, למשל us-central1

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --no-enable-secret-manager \
    --location=LOCATION

‏Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --no-enable-secret-manager `
    --location=LOCATION

Windows‏ (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --no-enable-secret-manager ^
    --location=LOCATION

המאמרים הבאים