הגדרת זהות בשירותים

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

איך משתמשים בזהות בשירות

ב-Cloud Run, זהות השירות היא חשבון שירות שהוא גם משאב וגם חשבון משתמש.

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

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

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

אתם או האדמין שלכם צריכים להקצות תפקידים והרשאות IAM לחשבון הפריסה ולזהות השירות.

לוחצים כדי לראות את התפקידים הנדרשים לחשבון הפריסה

כדי לקבל את ההרשאות שנדרשות לצירוף חשבון שירות כזהות השירות בשירות או בגרסה, אתם או האדמין שלכם צריכים להקצות לחשבון הפריסה את התפקיד Service Account User ‏ (roles/iam.serviceAccountUser) בחשבון השירות שמשמש כזהות השירות.

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

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

לוחצים כדי לראות את התפקידים הנדרשים עבור זהות השירות.

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

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

קבלת המלצות ליצירת חשבונות שירות ייעודיים

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

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

הגדרת הזהות בשירות

אם עדיין לא יצרתם חשבון שירות, אתם יכולים ליצור חשבון שירות שמנוהל על ידי המשתמש ב-IAM או ב-Cloud Run.

כדי להגדיר את זהות השירות, משתמשים במסוף, ב-CLI של gcloud, ב-API ‏ (YAML) כשיוצרים שירות חדש או פורסים עדכון חדש, או ב-Terraform: Google Cloud

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

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

  4. לוחצים על הכרטיסייה אבטחה.

    תמונה

    • לוחצים על התפריט הנפתח Service account ובוחרים חשבון שירות קיים, או לוחצים על Create a new service account אם צריך.
  5. לוחצים על יצירה או על פריסה.

gcloud

כדי לעדכן שירות קיים כך שיהיה לו חשבון שירות חדש, משתמשים בפקודה הבאה:

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

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

  • SERVICE: השם של השירות.
  • SERVICE_ACCOUNT: חשבון השירות שמשויך לזהות החדשה: הערך הזה הוא כתובת האימייל של חשבון השירות, לדוגמה, example@myproject.iam.gserviceaccount.com.

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

gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

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

  • 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 .
  • SERVICE_ACCOUNT: חשבון השירות שמשויך לזהות החדשה: הערך הזה הוא כתובת האימייל של חשבון השירות, לדוגמה, example@myservice.iam.gserviceaccount.com.

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את המאפיין serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

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

    • SERVICE: השם של שירות Cloud Run.
    • SERVICE_ACCOUNT: חשבון השירות שמשויך לזהות החדשה. הערך הוא כתובת האימייל של חשבון השירות – לדוגמה, SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בקובץ התצורה של Terraform:

כדי ליצור חשבון שירות, מוסיפים את המשאב הבא לקובץ main.tf הקיים:

resource "google_service_account" "cloudrun_service_identity" {
  account_id = "my-service-account"
}

יוצרים או מעדכנים שירות Cloud Run וכוללים בו את חשבון השירות:

resource "google_cloud_run_v2_service" "default" {
  name     = "id-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.cloudrun_service_identity.email
  }
}

שימוש בחשבונות שירות בפרויקטים אחרים

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

  1. אתם או האדמין שלכם צריכים להקצות את התפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser) בחשבון השירות שבו אתם משתמשים כזהות השירות.

    המסוף

    1. נכנסים לדף Service accounts במסוף Google Cloud :

      כניסה לדף Service accounts

    2. בוחרים את כתובת האימייל של חשבון השירות שבה אתם משתמשים כזהות השירות.

    3. לוחצים על הכרטיסייה Principals with access (גורמים עם גישה).

    4. לוחצים על הלחצן Grant access.

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

    6. בתפריט הנפתח Select a role בוחרים בתפקיד Service Accounts > Service Account User.

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

    gcloud

    משתמשים בפקודה gcloud iam service-accounts add-iam-policy-binding ומחליפים את המשתנים המודגשים בערכים המתאימים:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"

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

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמצרפים אליו את משאב Cloud Run
    • SERVICE_ACCOUNT_PROJECT_ID: מזהה הפרויקט שבו נמצא חשבון השירות
    • PRINCIPAL: החשבון של הפורס שמוסיפים לו את הקישור, בפורמט user|group|serviceAccount:email או domain:domain – לדוגמה:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. אתם או האדמין שלכם צריכים להעניק לסוכן השירות של משאב Cloud Run את התפקיד Service Account Token Creator ‏(roles/iam.serviceAccountTokenCreator) בחשבון השירות שבו אתם משתמשים כזהות השירות. השם של סוכן השירות פועל לפי הפורמט service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    המסוף

    1. נכנסים לדף Service accounts במסוף Google Cloud :

      כניסה לדף Service accounts

    2. בוחרים את כתובת האימייל של חשבון השירות שבה אתם משתמשים כזהות השירות.

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

    4. לוחצים על הלחצן Grant access.

    5. מזינים את כתובת האימייל של סוכן השירות. לדוגמה: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    6. בתפריט הנפתח Select a role בוחרים בתפקיד Service Accounts > Service Account Token Creator.

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

    gcloud

    משתמשים בפקודה gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"

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

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמצרפים אליו את משאב Cloud Run
    • SERVICE_ACCOUNT_PROJECT_ID: מזהה הפרויקט שבו נמצא חשבון השירות
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: מספר הפרויקט שבו נמצא Cloud Run

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

  3. כדי להשתמש בחשבון השירות הזה בפרויקט, צריך להגדיר את מדיניות הארגון iam.disableCrossProjectServiceAccountUsage כ-false או כלא מחייבת ברמת התיקייה, או להגדיר אותה ככזו שמועברת בירושה מההגדרות ברמת הפרויקט. כברירת מחדל, הערך שמוגדר הוא true.

    המסוף

    1. נכנסים לדף מדיניות הארגון במסוף Google Cloud :

      מעבר אל מדיניות הארגון

    2. בבורר הפרויקטים, בוחרים את הארגון והפרויקט שבהם רוצים להשבית את השימוש בחשבונות שירות בפרויקטים שונים.

    3. בוחרים את המדיניות disable cross-project service account usage (השבתת השימוש בחשבון שירות בפרויקטים שונים).

    4. לוחצים על ניהול המדיניות.

    5. בקטע מקור המדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.

    6. לוחצים על Add a rule.

    7. בקטע אכיפה, בוחרים באפשרות השבתה.

    8. כדי לאכוף את המדיניות, לוחצים על הגדרת מדיניות.

    gcloud

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

    כדי להשבית את אילוץ מדיניות הארגון הזה, מריצים את הפקודה:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID

    מחליפים את SERVICE_ACCOUNT_PROJECT_ID במזהה הפרויקט שמכיל את חשבון השירות.

אפשר להחיל את חברות התפקיד ישירות על משאב חשבון השירות או לרשת אותה מרמות גבוהות יותר בהיררכיית המשאבים.

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