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

יכול להיות שהשירות שלכם יצטרך מפתחות 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. למשל:

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

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

  1. Enable the Secret Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the 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 כשמפעילים שירות חדש או מעדכנים שירות קיים ומפעילים עדכון. Google Cloud לוחצים על הכרטיסייה הרצויה:

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על Deploy container (פריסת מאגר) כדי להגדיר שירות חדש. ממלאים את הדף של הגדרות השירות הראשוניות, ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרי נתונים, אמצעי אחסון, רשת, אבטחה) כדי להרחיב את דף הגדרות השירות.

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

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

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

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

      1. לוחצים על הכרטיסייה Volumes (אמצעי אחסון) ובוחרים באפשרות Add volume (הוספת אמצעי אחסון).
      2. ברשימה Volume type (סוג נפח), בוחרים באפשרות Secret (סוד).
      3. בשדה Volume name, מזינים שם או מאשרים את שם ברירת המחדל.
      4. ברשימה Secret, בוחרים את הסוד שרוצים להשתמש בו.
      5. בשדה נתיב 1, מזינים את שם הקובץ להרכבה.
      6. ברשימה Version 1, בוחרים את הגרסה של הסוד שאליה רוצים להפנות. כברירת מחדל, הגרסה האחרונה נבחרת. אם רוצים, אפשר לבחור גרסה ספציפית.
      7. לוחצים על סיום.
      8. עוברים לכרטיסייה Container(s) (מאגרים) כדי לטעון את הסוד למאגר.
      9. בכרטיסייה Volume mounts, לוחצים על Mount volume.
      10. ברשימה Name 1, בוחרים את שם הכרך.
      11. בשדה Mount path 1, מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.
      12. לוחצים על סיום.
      13. לוחצים על יצירה או על פריסה.

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

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. בקטע 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
  3. אם הסודות מוצמדים כנתיבי קבצים, מעדכנים את 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 תווים
  4. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

  1. יוצרים סוד וגרסת סוד.

    resource "google_secret_manager_secret" "default" {
      secret_id = "my-secret"
      replication {
        auto {}
      }
    }
    
    resource "google_secret_manager_secret_version" "default" {
      secret      = google_secret_manager_secret.default.name
      secret_data = "this is secret data"
    }
  2. יוצרים חשבון שירות ומעניקים לו גישה לסוד:

    resource "google_service_account" "default" {
      account_id   = "cloud-run-service-account"
      display_name = "Service account for Cloud Run"
    }
    
    resource "google_secret_manager_secret_iam_member" "default" {
      secret_id = google_secret_manager_secret.default.id
      role      = "roles/secretmanager.secretAccessor"
      # Grant the new deployed service account access to this secret.
      member     = "serviceAccount:${google_service_account.default.email}"
      depends_on = [google_secret_manager_secret.default]
    }
  3. אפשר לגשת לסודות ב-Secret Manager מ-Cloud Run כנתיבי קבצים מוצמדים או כמשתני סביבה.

    1. לסודות שמוצמדים כנתיבי קבצים, מציינים את המשאב של Secret Manager בפרמטר volumes. הערך name תואם לרשומה בפרמטר volume_mounts:

      resource "google_cloud_run_v2_service" "mounted_secret" {
        name     = "service-with-mounted-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          volumes {
            name = "my-service-volume"
            secret {
              secret = google_secret_manager_secret.default.secret_id
              items {
                version = "latest"
                path    = "my-secret"
                mode    = 0 # use default 0444
              }
            }
          }
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            volume_mounts {
              name       = "my-service-volume"
              mount_path = "/secrets"
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }
    2. כדי להפנות לסודות שמוצגים כמשתני סביבה, צריך להפנות למשאב Secret Manager בפרמטר env:

      resource "google_cloud_run_v2_service" "env_variable_secret" {
        name     = "service-with-env-var-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            env {
              name = "MY_SECRET"
              value_source {
                secret_key_ref {
                  secret  = google_secret_manager_secret.default.secret_id
                  version = "latest"
                }
              }
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }

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

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

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על Deploy container (פריסת מאגר) כדי להגדיר שירות חדש. ממלאים את הדף של הגדרות השירות הראשוניות, ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרי נתונים, אמצעי אחסון, רשת, אבטחה) כדי להרחיב את דף הגדרות השירות.

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

  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. ברשימה גרסה 1, בוחרים את גרסת הסוד שאליה רוצים להפנות.

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

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

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

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

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

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

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

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

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

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

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

      9. עוברים לכרטיסייה Container(s) (מאגרים) כדי לטעון את הסוד למאגר.

      10. בכרטיסייה Volume mounts, לוחצים על Mount volume.

      11. ברשימה Name 1, בוחרים את שם הכרך.

      12. בשדה Mount path 1, מזינים את נתיב ההרכבה של הסוד הזה. זוהי הספרייה שבה ממוקמות כל הגרסאות של הסוד.

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

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

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 עם הגרסה של ה-Secret. משתמשים ב-latest כדי להוריד את הגרסה העדכנית, או במספר – לדוגמה, 2.

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml

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

  1. לסודות שנחשפים כמשתני סביבה:

    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.
  2. לסודות שמוצמדים כנתיבי קבצים:

    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:

המסוף

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

    כניסה ל-Cloud Run

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

  3. לוחצים על הכרטיסייה עדכונים.

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

gcloud

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

    gcloud run services describe SERVICE
  2. מאתרים את הגדרת הסודות בתצורה שמוחזרת.

הסרת סודות משירות

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

המסוף

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

    כניסה ל-Cloud Run

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

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

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

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

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

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.