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

יכול להיות שמאגר העובדים שלכם יזדקק למפתחות 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, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-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. בשדה Mount path (נתיב ההרכבה), מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
      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: הפניה לקובץ אימג' של קונטיינר שמכיל את מאגר ה-worker, למשל 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. בשדה Mount path (נתיב ההרכבה), מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
      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: הפניה לקובץ אימג' של קונטיינר שמכיל את מאגר ה-worker, למשל 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, משתמשים במסוף Google Cloud או ב-Google Cloud CLI:

המסוף

  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 או ה-CLI של gcloud:

המסוף

  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.