הגדרת סודות למאגרי עובדים

יכול להיות שמאגר העובדים שלכם ידרוש מפתחות API, סיסמאות, אישורים או מידע רגיש אחר בשביל התלות שלו. ב-Cloud Run,‏ Google ממליצה לאחסן את המידע הרגיש הזה בסוד שיוצרים ב-Secret Manager.

אפשר להפוך סוד לזמין למאגרי התגים באחת מהדרכים הבאות:

  • כשמציבים כל סוד כנפח, Cloud Run הופך את הסוד לזמין לקונטיינר כקובץ. כשקוראים נפח, Cloud Run תמיד מאחזר את ערך הסוד מ-Secret Manager כדי להשתמש בערך עם הגרסה האחרונה. השיטה הזו מתאימה גם לרוטציה של סודות.
  • העברת סוד באמצעות משתני סביבה. משתני סביבה נפתרים בזמן הפעלת המופע, ולכן אם משתמשים בשיטה הזו, Google ממליצה להצמיד את הסוד לגרסה מסוימת במקום להשתמש ב-latest כגרסה.

מידע נוסף זמין במאמר בנושא שיטות מומלצות לשימוש ב-Secret Manager.

איך מתבצעת בדיקה של סודות בזמן הפריסה ובזמן הריצה

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

במהלך זמן הריצה, כשמופעלים מופעים:

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

בעלות על נפח

הבעלות על נפח סודי ב-Cloud Run משתנה בהתאם לסביבת ההפעלה ולסוג הפריסה.

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

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

  1. מפעילים את Secret Manager API.

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של שימוש בשירות' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

  2. משתמשים בסוד קיים או יוצרים סוד ב-Secret Manager, כמו שמתואר במאמר יצירת סוד.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להגדרת סודות, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

כדי לאפשר ל-Cloud Run לגשת לסוד, לזהות השירות צריכה להיות ההרשאה הבאה:

הוראות להוספת חשבון המשתמש של השירות לתפקיד Secret Accessor ב-Secret Manager מופיעות במאמר ניהול הגישה לסודות.

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם מאגר העובדים של Cloud Run מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

הפיכת סוד לנגיש ל-Cloud Run

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

אתם יכולים להפוך סוד לנגיש למאגר העובדים באמצעות Google Cloud המסוף, Google Cloud CLI או YAML כשאתם פורסים מאגר עובדים חדש או מעדכנים מאגר עובדים קיים ופורסים עדכון. לוחצים על הכרטיסייה הרצויה:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Worker pools של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על Deploy container כדי להגדיר מאגר עובדים חדש. ממלאים את הדף של ההגדרות הראשוניות של מאגר העובדים, ואז לוחצים על Containers, Networking, Security (מאגרי קונטיינרים, רשת, אבטחה) כדי להרחיב את דף ההגדרות.

  3. אם אתם מגדירים מאגר עובדים קיים, לוחצים על מאגר העובדים ואז על Edit and deploy new revision (עריכה ופריסה של עדכון חדש).

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

    • כדי לחשוף את הסוד כמשתנה סביבה:

      1. לוחצים על הכרטיסייה Container(s) (מאגרי תגים).
      2. בכרטיסייה Variables and Secrets (משתנים וסודות), לוחצים על Reference a secret (הפניה לסוד).
      3. בשדה Name 1, מזינים את השם של משתנה הסביבה.
      4. ברשימה Secret, בוחרים את הסוד שרוצים להשתמש בו.
      5. ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות.
      6. לוחצים על סיום.
      7. לוחצים על יצירה או על פריסה.
    • כדי לטעון את הסוד כנפח:

      1. לוחצים על הכרטיסייה Volumes (נפחים).
      2. לוחצים על Mount volume (התקנת אמצעי אחסון).
      3. לוחצים על Secret (סוד).
      4. בשדה נתיב להרכבה, מזינים את הנתיב להרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
      5. ברשימה Secret, בוחרים את הסוד שרוצים להשתמש בו.
      6. בשדה נתיב 1, מזינים את שם הקובץ להרכבה.
      7. ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות. כברירת מחדל, הגרסה האחרונה נבחרת. אם רוצים, אפשר לבחור גרסה ספציפית.
      8. לוחצים על Save.
      9. לוחצים על יצירה או על פריסה.

gcloud

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

    gcloud run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

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

    • WORKER_POOL: השם של מאגר העובדים.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • ENV_VAR_NAME: השם של משתנה הסביבה שרוצים להשתמש בו עם הסוד.
    • SECRET_NAME: שם הסוד באותו פרויקט, לדוגמה mysecret.
    • VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.
  • כדי לנקות סודות קיימים ולהפוך סוד חדש לנגיש למאגר העובדים, משתמשים בדגל --set-secrets:

    gcloud run worker-pools update WORKER_POOL \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

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

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. לסודות שנחשפים כמשתני סביבה:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: SECRET_VERSION
                  name: SECRET_NAME

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

    • WORKER_POOL: השם של מאגר העובדים של Cloud Run.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • ENV_VAR: השם של משתנה הסביבה.
    • SECRET_VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.
    • SECRET_NAME: שם הסוד, לדוגמה, mysecret.
  3. לסודות שמוצמדים כנתיבי קבצים:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            secret:
              secretName: SECRET_NAME
              items:
              - key: SECRET_VERSION
                path: SECRET_NAME

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

    • WORKER_POOL: השם של מאגר העובדים של Cloud Run.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה, /mnt/my-volume.
    • SECRET_NAME: שם הסוד, לדוגמה, mysecret.
    • SECRET_VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.
  4. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

הפניה לסודות מפרויקטים אחרים

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Worker pools של Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על Deploy container כדי להגדיר מאגר עובדים חדש. ממלאים את הדף של ההגדרות הראשוניות של מאגר העובדים, ואז לוחצים על Containers, Networking, Security (מאגרי קונטיינרים, רשת, אבטחה) כדי להרחיב את דף ההגדרות.

  3. אם אתם מגדירים מאגר עובדים קיים, לוחצים על מאגר העובדים ואז על Edit and deploy new revision (עריכה ופריסה של עדכון חדש).

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

    • כדי לחשוף את הסוד כמשתנה סביבה:

      1. לוחצים על הכרטיסייה Container(s) (מאגרי תגים).
      2. בכרטיסייה Variables and Secrets (משתנים וסודות), לוחצים על Reference a secret (הפניה לסוד).
      3. בשדה Name 1, מזינים את השם של משתנה הסביבה.
      4. ברשימה Secret, לוחצים על Enter secret manually (הזנת סוד באופן ידני).
      5. מזינים את מזהה המשאב של הסוד בפורמט הבא:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

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

        • מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud . הוראות מפורטות לאיתור מספר הפרויקט זמינות במאמר יצירה וניהול של פרויקטים.

        • SECRET_NAME: השם של הסוד ב-Secret Manager.

      6. ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות.

      7. לוחצים על סיום.

      8. לוחצים על יצירה או על פריסה.

    • כדי לטעון את הסוד כנפח:

      1. לוחצים על הכרטיסייה Volumes (נפחים).
      2. לוחצים על Mount volume (התקנת אמצעי אחסון).
      3. לוחצים על Secret (סוד).
      4. בשדה נתיב להרכבה, מזינים את הנתיב להרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
      5. ברשימה Secret, לוחצים על Enter secret manually (הזנת סוד באופן ידני).
      6. מזינים את מזהה המשאב של הסוד בפורמט הבא:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

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

        • מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud . הוראות מפורטות לאיתור מספר הפרויקט זמינות במאמר יצירה וניהול של פרויקטים.

        • SECRET_NAME: השם של הסוד ב-Secret Manager.

      7. בשדה נתיב 1, מזינים את שם הקובץ להרכבה.

      8. ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות. כברירת מחדל, הגרסה האחרונה נבחרת. אם רוצים, אפשר לבחור גרסה ספציפית.

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

      10. לוחצים על יצירה או על פריסה.

gcloud

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

gcloud run worker-pools deploy WORKER_POOL \
--image IMAGE_URL \
--update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

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

  • WORKER_POOL: השם של מאגר העובדים.
  • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
  • SECRET_NAME: שם הסוד, לדוגמה, mysecret.
  • VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.

YAML

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

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. לסודות שנחשפים כמשתני סביבה:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: SECRET_VERSION
                  name: SECRET_LOOKUP_NAME

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

    • WORKER_POOL: השם של מאגר העובדים של Cloud Run.
    • SECRET_LOOKUP_NAME: כל שם עם תחביר תקין של שם סוד – לדוגמה, my-secret. יכול להיות שזה יהיה אותו שם כמו SECRET_NAME.
    • PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
    • SECRET_NAME: שם הסוד, לדוגמה, mysecret.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • ENV_VAR: השם של משתנה הסביבה.
    • SECRET_VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.
  3. לסודות שמוצמדים כנתיבי קבצים:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            secret:
              secretName: SECRET_NAME
              items:
              - key: SECRET_VERSION
                path: SECRET_LOOKUP_NAME

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

    • WORKER_POOL: השם של מאגר העובדים של Cloud Run.
    • SECRET_LOOKUP_NAME: כל שם שתחביר השם הסודי שלו תקין, לדוגמה my-secret. יכול להיות זהה לערך של SECRET_NAME.
    • PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
    • SECRET_NAME: שם הסוד, לדוגמה, mysecret.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה, /mnt/my-volume.
    • SECRET_VERSION: גרסת הסוד. משתמשים ב-latest כדי לציין את הגרסה האחרונה, או במספר – לדוגמה, 2.
  4. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

הצגת הגדרות הסודות

כדי לראות את הגדרות הסודות הנוכחיות של מאגר העובדים ב-Cloud Run:

המסוף

  1. במסוף Google Cloud , עוברים לדף Cloud Run worker pools:

    כניסה לדף Cloud Run worker pools

  2. לוחצים על מאגר העובדים שרוצים לראות כדי לפתוח את הדף פרטי מאגרי עובדים.

  3. לוחצים על עריכה ופריסה של גרסה חדשה.

  4. מאתרים את הגדרת הסודות בפרטי ההגדרה.

gcloud

  1. משתמשים בפקודה הבאה:

    gcloud run worker-pools describe WORKER_POOL
  2. מאתרים את הגדרת הסודות בתצורה שמוחזרת.

הסרת סודות ממאגר עובדים

אפשר להסיר סודות ממאגר עובדים באמצעות מסוף Google Cloud או gcloud CLI:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Worker pools של Cloud Run:

    כניסה ל-Cloud Run

  2. בוחרים את מאגר העובדים מהרשימה ולוחצים על עריכה ופריסה של גרסה חדשה.

  3. לוחצים על הכרטיסייה Container(s) (מאגרי תגים).

  4. כדי למחוק סודות שצורפו כנפח, בוחרים בכרטיסייה Volume mounts, מעבירים את מצביע העכבר מעל הסוד שרוצים להסיר ולוחצים על Delete.

  5. כדי למחוק סודות שנחשפו כמשתנה סביבתי, בוחרים בכרטיסייה Variables and secrets, מעבירים את מצביע העכבר מעל הסוד שרוצים להסיר ולוחצים על Delete.

  6. לוחצים על פריסה.

gcloud

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

  • כדי להסיר את כל הסודות, מריצים את הפקודה הבאה:
  gcloud run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --clear-secrets

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

  • WORKER_POOL: השם של מאגר העובדים.
  • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.

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

  gcloud run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH

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

  • WORKER_POOL: השם של מאגר העובדים.
  • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • ENV_VAR_NAME: השם של משתנה הסביבה.
  • SECRET_FILE_PATH: הנתיב המלא של הסוד. לדוגמה, /mnt/secrets/primary/latest, כאשר /mnt/secrets/primary/ הוא נתיב ההרכבה ו-latest הוא נתיב הסוד. אפשר גם לציין את הנתיבים של הנקודה לחיבור ושל הסוד בנפרד:

    --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION

שימוש בסודות בקוד

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

מגבלות

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

נתיבים אסורים

  • ב-Cloud Run אי אפשר לטעון סודות בנתיבים /dev, /proc ו-/sys או בספריות המשנה שלהם.
  • ב-Cloud Run אי אפשר לטעון כמה סודות באותה נתיב, כי אי אפשר לטעון שני כרכים באותו מיקום.

סודות אזוריים

‫Cloud Run לא תומך בסודות אזוריים.

שינוי של ספרייה

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

לדוגמה, אם סוד בשם my-secret מותקן בנתיב /etc/app_data, כל התוכן בספרייה app_data יידרס, והקובץ היחיד שיוצג הוא /etc/app_data/my-secret.

כדי להימנע משכתוב של קבצים בספרייה קיימת, יוצרים ספרייה חדשה להרכבת הסוד, למשל /etc/app_data/secrets, כך שנתיב ההרכבה של הסוד יהיה /etc/app_data/secrets/my-secret.