יכול להיות שהשירות שלכם יצטרך מפתחות API, סיסמאות, אישורים או מידע רגיש אחר בשביל התלות שלו. ב-Cloud Run, Google ממליצה לאחסן את המידע הרגיש הזה בסוד שיוצרים ב-Secret Manager.
אפשר להפוך סוד לזמין למאגרי התגים באחת מהדרכים הבאות:
- כשמציבים כל סוד כנפח, Cloud Run הופך את הסוד לזמין לקונטיינר כקובץ. כשקוראים נפח, Cloud Run תמיד מאחזר את ערך הסוד מ-Secret Manager כדי להשתמש בערך עם הגרסה האחרונה. השיטה הזו מתאימה גם לרוטציה של סודות.
- העברת סוד באמצעות משתני סביבה.
משתני סביבה נפתרים בזמן הפעלת המופע, ולכן אם משתמשים בשיטה הזו, Google ממליצה להצמיד את הסוד לגרסה מסוימת במקום להשתמש ב-
latestכגרסה.
מידע נוסף זמין במאמר בנושא שיטות מומלצות לשימוש ב-Secret Manager.
איך מתבצעת בדיקה של סודות בזמן הפריסה ובזמן הריצה
במהלך פריסת השירות, Cloud Run בודק את כל הסודות שבהם אתם משתמשים. הבדיקה מוודאת שלחשבון השירות שמריץ את הקונטיינר יש הרשאה לגשת לסודות האלה.
במהלך זמן הריצה, כשהמופעים מופעלים:
- אם הסוד הוא משתנה סביבה, Cloud Run מאחזר את הערך של הסוד לפני הפעלת המופע. אם תהליך אחזור הסוד נכשל, המופע לא יופעל.
- אם מטעינים את הסוד כנפח, Cloud Run לא מבצע בדיקות במהלך הפעלת המופע. עם זאת, במהלך זמן הריצה, אם סוד לא נגיש, הניסיונות לקרוא את אמצעי האחסון המצורף נכשלים.
בעלות על נפח
הבעלות על נפח סודי ב-Cloud Run משתנה בהתאם לסביבת ההפעלה ולסוג הפריסה.
כשמציבים נפח סודי, הזהות שבבעלותה הקבצים והספריות משתנה בהתאם לסביבת ההפעלה של עומס העבודה, ובהתאם לשאלה אם הפריסה מורכבת ממכולה אחת או מכמה מכולות.
בסביבת ההפעלה מהדור הראשון שבה אתם פורסים קונטיינר יחיד, הזהות שבה אתם משתמשים עבור הקונטיינר היא הבעלים של נפח הסוד. בכל שאר המקרים, הבעלים של אמצעי האחסון הוא root. למשל:
- סביבת הפעלה מהדור הראשון שבה אתם פורסים כמה קונטיינרים
- הסביבה של הדור השני
לפני שמתחילים
מפעילים את Secret Manager API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים- משתמשים בסוד קיים או יוצרים סוד ב-Secret Manager, כמו שמתואר במאמר יצירת סוד.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת סודות, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- אדמין של Cloud Run (
roles/run.admin) בשירות Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
כדי לאפשר ל-Cloud Run לגשת לסוד, לזהות השירות צריכה להיות ההרשאה הבאה:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor)
הוראות להוספת חשבון המשתמש של השירות לתפקיד 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 כשפורסים שירות חדש או מעדכנים שירות קיים ופורסים גרסה. Google Cloud לוחצים על הכרטיסייה הרצויה:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על Deploy container (פריסת מאגר) כדי להגדיר שירות חדש. ממלאים את הדף של הגדרות השירות הראשוניות, ואז לוחצים על Containers, Networking, Security (קונטיינרים, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של גרסה חדשה.
פועלים לפי השלבים להצגת הסוד כמשתנה סביבה או להוספת הסוד כנפח.
כדי לחשוף את הסוד כמשתנה סביבה:
- לוחצים על הכרטיסייה Container(s) (מאגרי תגים).
- בכרטיסייה Variables and Secrets (משתנים וסודות), לוחצים על Reference a secret (הפניה לסוד).
- בשדה Name 1, מזינים את השם של משתנה הסביבה.
- ברשימה Secret, בוחרים את הסוד שרוצים להשתמש בו.
- ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות.
- לוחצים על סיום.
- לוחצים על יצירה או על פריסה.
כדי לטעון את הסוד כנפח:
- לוחצים על הכרטיסייה Volumes (נפחים).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- לוחצים על Secret (סוד).
- בשדה Mount path (נתיב ההרכבה), מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
- ברשימה Secret, בוחרים את הסוד שרוצים להשתמש בו.
- בשדה נתיב 1, מזינים את שם הקובץ להרכבה.
- ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות. כברירת מחדל, הגרסה האחרונה נבחרת. אם רוצים, אפשר לבחור גרסה ספציפית.
- לוחצים על Save.
- לוחצים על יצירה או על פריסה.
gcloud
כדי להעניק לשירות גישה לסוד, מזינים אחת מהפקודות הבאות.
כדי לטעון את הסוד כנפח כשפורסים שירות:
gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG - PATH: נתיב ההרכבה של אמצעי האחסון ושם הקובץ של הסוד. הוא חייב להתחיל בקו נטוי מוביל – לדוגמה:
/etc/secrets/dbconfig/password, כאשר/etc/secrets/dbconfig/הוא נתיב ההרכבה של אמצעי האחסון, ו-passwordהוא שם הקובץ של הסוד. - SECRET_NAME: שם הסוד באותו פרויקט, לדוגמה
mysecret. - VERSION: גרסת הסוד. משתמשים ב-
latestכדי לציין את הגרסה האחרונה, או במספר – לדוגמה,2.
כדי לחשוף את הסוד כמשתנה סביבה כשפורסים שירות:
gcloud run deploy SERVICE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - ENV_VAR_NAME: השם של משתנה הסביבה שרוצים להשתמש בו עם הסוד.
- SECRET_NAME: שם הסוד באותו פרויקט, לדוגמה
mysecret. - VERSION: גרסת הסוד. משתמשים ב-
latestכדי לציין את הגרסה האחרונה, או במספר – לדוגמה,2.
אפשר לעדכן כמה סודות בו-זמנית. כדי לעשות את זה, מפרידים בין אפשרויות ההגדרה של כל סוד באמצעות פסיק. הפקודה הבאה מעדכנת סוד אחד שמוטמע כנפח וסוד אחר שמוצג כמשתנה סביבתי.
כדי לעדכן סודות קיימים, מזינים את הפקודה הבאה:
gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
כדי לנקות סודות קיימים ולהפוך סוד חדש לנגיש לשירות, משתמשים בדגל
--set-secrets:gcloud run services update SERVICE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
אם הסודות נחשפים כמשתני סביבה, בקטע
env, מעדכנים את ENV_VAR, VERSION ו/או SECRET_NAME לפי הצורך. אם יש לכם כמה סודות שמוצמדים כמשתני סביבה, יהיו לכם כמה עותקים של המאפיינים האלה.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: VERSION name: SECRET_NAME
אם הסודות מותקנים כנתיבי קבצים, מעדכנים את MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME ו/או SECRET_NAME לפי הצורך. אם יש לכם כמה סודות שמוצמדים כנתיבי קבצים, יהיו לכם כמה עותקים של המאפיינים האלה.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_NAME
הערה: אפשר להגדיר ל-
VOLUME_NAMEכל שם.מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - REVISION עם שם חדש לגרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
- מתחיל ב-
SERVICE- - מכיל רק אותיות קטנות, מספרים ו
- - לא מסתיים ב-
- - לא חורג מ-63 תווים
- מתחיל ב-
מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
Terraform
יוצרים סוד וגרסת סוד.
יוצרים חשבון שירות ומעניקים לו גישה לסוד:
אפשר לגשת לסודות ב-Secret Manager מ-Cloud Run כנתיבי קבצים שצורפו או כמשתני סביבה.
לסודות שמוצמדים כנתיבי קבצים, מציינים את המשאב Secret Manager בפרמטר
volumes. הערךnameתואם לרשומה בפרמטרvolume_mounts:כדי להשתמש בסודות שמוצגים כמשתני סביבה, צריך להפנות למשאב Secret Manager בפרמטר
env:
פיתוח נייטיב
כדי לציין סודות בקובץ compose.yaml, מוסיפים את המאפיין secrets להגדרת השירות. פעולה כזו יוצרת סוד ב-Secret Manager לאחסון הנתונים האלה על סמך הערך בקובץ המקומי.
services: web: image:IMAGEsecrets: -SECRET_NAMEsecrets:SECRET_NAME: file:SECRET_FILE_PATH
מחליפים את מה שכתוב בשדות הבאים:
- IMAGE: כתובת ה-URL של תמונת המאגר.
- SECRET_NAME: שם הסוד, לדוגמה,
mysecret. - SECRET_FILE_PATH: הנתיב לקובץ המקומי שמכיל את ערך הסוד.
פריסת השירות
כדי לפרוס את השירותים, מריצים את הפקודה
gcloud run compose up:gcloud run compose up compose.yamlמגיבים
yלכל ההנחיות להתקנת רכיבים נדרשים או להפעלת ממשקי API.אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.
אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .
הפניה לסודות מפרויקטים אחרים
כדי להפנות לסוד מפרויקט אחר, צריך לוודא שלחשבון השירות של הפרויקט יש גישה לסוד.
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על Deploy container (פריסת מאגר) כדי להגדיר שירות חדש. ממלאים את הדף של הגדרות השירות הראשוניות, ואז לוחצים על Containers, Networking, Security (קונטיינרים, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של גרסה חדשה.
פועלים לפי השלבים להצגת הסוד כמשתנה סביבה או להוספת הסוד כנפח.
כדי לחשוף את הסוד כמשתנה סביבה:
- לוחצים על הכרטיסייה Container(s) (מאגרי תגים).
- בכרטיסייה Variables and Secrets (משתנים וסודות), לוחצים על Reference a secret (הפניה לסוד).
- בשדה Name 1, מזינים את השם של משתנה הסביבה.
- ברשימה Secret, לוחצים על Enter secret manually (הזנת סוד באופן ידני).
מזינים את מזהה המשאב של הסוד בפורמט הבא:
projects/PROJECT_NUMBER/secrets/SECRET_NAMEמחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUMBER במספר הפרויקט. Google Cloud הוראות מפורטות לאיתור מספר הפרויקט זמינות במאמר יצירה וניהול של פרויקטים.
SECRET_NAME: השם של הסוד ב-Secret Manager.
ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות.
לוחצים על סיום.
לוחצים על יצירה או על פריסה.
כדי לטעון את הסוד כנפח:
- לוחצים על הכרטיסייה Volumes (נפחים).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- לוחצים על Secret (סוד).
- בשדה Mount path (נתיב ההרכבה), מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
- ברשימה Secret, לוחצים על Enter secret manually (הזנת סוד באופן ידני).
מזינים את מזהה המשאב של הסוד בפורמט הבא:
projects/PROJECT_NUMBER/secrets/SECRET_NAMEמחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUMBER במספר הפרויקט. Google Cloud הוראות מפורטות לאיתור מספר הפרויקט זמינות במאמר יצירה וניהול של פרויקטים.
SECRET_NAME: השם של הסוד ב-Secret Manager.
בשדה נתיב 1, מזינים את שם הקובץ להרכבה.
ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות. כברירת מחדל, הגרסה האחרונה נבחרת. אם רוצים, אפשר לבחור גרסה ספציפית.
לוחצים על Save.
לוחצים על יצירה או על פריסה.
gcloud
כדי לטעון סוד כנפח כשפורסים שירות:
gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - PATH: נתיב ההרכבה של אמצעי האחסון ושם הקובץ של הסוד. הוא חייב להתחיל בקו נטוי מוביל – לדוגמה:
/etc/secrets/dbconfig/password, כאשר/etc/secrets/dbconfig/הוא נתיב ההרכבה של אמצעי האחסון, ו-passwordהוא שם הקובץ של הסוד. - PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
- SECRET_NAME: שם הסוד, לדוגמה,
mysecret. - VERSION: גרסת הסוד. משתמשים ב-
latestכדי לציין את הגרסה האחרונה, או במספר – לדוגמה,2.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
בגלל מגבלות שקשורות לתאימות API, צריך לאחסן את מיקומי הסודות בהערה.
לסודות שנחשפים כמשתני סביבה:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE 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: VERSION name: SECRET_LOOKUP_NAME
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG - ENV_VAR: השם של משתנה הסביבה.
- PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
- SECRET_NAME: שם הסוד, לדוגמה,
mysecret. - VERSION: גרסת הסוד. משתמשים ב-
latestכדי לציין את הגרסה האחרונה, או במספר – לדוגמה,2. - SECRET_LOOKUP_NAME: כל שם עם תחביר תקין של שם סוד, לדוגמה
my-secret. יכול להיות שזה יהיה אותו שם כמו SECRET_NAME.
לסודות שמוצמדים כנתיבי קבצים:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - PATH: נתיב ההרכבה של אמצעי האחסון ושם הקובץ של הסוד. הוא חייב להתחיל בקו נטוי מוביל – לדוגמה:
/etc/secrets/dbconfig/password, כאשר/etc/secrets/dbconfig/הוא נתיב ההרכבה של אמצעי האחסון, ו-passwordהוא שם הקובץ של הסוד. - PROJECT_NUMBER: מספר הפרויקט שבו נוצר הסוד.
- SECRET_NAME: שם הסוד, לדוגמה,
mysecret. - VERSION: גרסת הסוד. משתמשים ב-
latestכדי לציין את הגרסה האחרונה, או במספר – לדוגמה,2. - SECRET_LOOKUP_NAME: כל שם עם תחביר תקין של שם סוד, לדוגמה
my-secret. יכול להיות שזה יהיה אותו שם כמו SECRET_NAME. - VOLUME_NAME: כל שם – לדוגמה,
my-volume. יכול להיות שזה יהיה אותו שם כמו SECRET_NAME.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_service בתצורת Terraform:לסודות שנחשפים כמשתני סביבה:
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של המשימה ב-Cloud Run.
- REGION: Google Cloud האזור. לדוגמה:
europe-west1. - IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - SECRET_NAME: שם הסוד, לדוגמה
mysecret. - PROJECT_ID: מזהה הפרויקט שבו נוצר הסוד.
- VERSION: גרסת הסוד. משתמשים ב-
latestלגרסה העדכנית ביותר, או במספר – לדוגמה,2.
לסודות שמוצמדים כנתיבי קבצים:
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
}
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של המשימה ב-Cloud Run.
- REGION עם האזור Google Cloud . לדוגמה:
europe-west1. - IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG - VOLUME_NAME: כל שם – למשל,
my-volume. יכול להיות שזה יהיה אותו שם כמוSECRET_NAME - MOUNT_PATH: נתיב ההרכבה של אמצעי האחסון ושם הקובץ של הסוד. הוא חייב להתחיל בקו נטוי מוביל – לדוגמה:
/etc/secrets/dbconfig/password, כאשר/etc/secrets/dbconfig/הוא נתיב ההרכבה של אמצעי האחסון, ו-passwordהוא שם הקובץ של הסוד. - PROJECT_ID: מזהה הפרויקט שבו נוצר הסוד.
- SECRET_NAME: שם הסוד, לדוגמה
mysecret.
הצגת הגדרות הסודות
כדי לראות את הגדרות הסודות הנוכחיות בשירות Cloud Run:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
לוחצים על השירות שרוצים לראות כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה עדכונים.
בחלונית הפרטים שמשמאל, הגדרת הסודות מופיעה בכרטיסייה Container.
gcloud
משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מאתרים את הגדרת הסודות בתצורה שמוחזרת.
הסרת סודות משירות
אפשר להסיר סודות משירות באמצעות Google Cloud המסוף או ה-CLI של gcloud:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
בוחרים את השירות מהרשימה ולוחצים על עריכה ופריסה של עדכון חדש.
לוחצים על הכרטיסייה Container(s) (מאגרי תגים).
כדי למחוק סודות שצורפו כנפח, בוחרים בכרטיסייה Volume mounts, מעבירים את מצביע העכבר מעל הסוד שרוצים להסיר ולוחצים על Delete.
כדי למחוק סודות שנחשפו כמשתנה סביבתי, בוחרים בכרטיסייה Variables and secrets, מעבירים את מצביע העכבר מעל הסוד שרוצים להסיר ולוחצים על Delete.
לוחצים על פריסה.
gcloud
אפשר להסיר את כל הסודות משירות או לציין סוד אחד או יותר להסרה:
כדי להסיר את כל הסודות, מריצים את הפקודה הבאה:
gcloud run deploy SERVICE --image IMAGE_URL \ --clear-secretsמחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
כדי לציין רשימה של סודות להסרה, משתמשים בדגל
--remove-secrets. הפקודה הבאה מסירה סוד אחד שמוטמע כנפח וסוד אחר שמוצג כמשתנה סביבה:gcloud run deploy SERVICE --image IMAGE_URL \ --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATHמחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - 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, או בספריות המשנה שלהם. - אם אתם מטמיעים סודות ב-
/tmpואתם משתמשים בסביבת הפעלה מהדור הראשון, כדאי לעיין בבעיה המוכרת בנושא הטמעת סודות ב-/tmp. - ב-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.