איך נותנים הרשאה לתהליך עבודה לגשת למשאבים ב-Google Cloud

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

  • כשחושבים על חשבון שירות כזהות, אפשר להקצות לו תפקיד וכך לאפשר לו לגשת למשאב (כמו תהליך עבודה).

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

חשבון שירות מזוהה באמצעות כתובת האימייל הייחודית שלו.

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

חשבון שירות המשמש כברירת מחדל

כל תהליך עבודה משויך לחשבון שירות של ניהול זהויות והרשאות גישה (IAM) בזמן יצירת תהליך העבודה. אם לא מציינים חשבון שירות במהלך יצירת תהליך העבודה, תהליך העבודה משתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine לזיהוי. אתם יכולים לאמת את חשבון השירות שמשויך לזרימת עבודה. להסבר, ראו איך מאמתים את חשבון השירות שמשויך לזרימת עבודה.

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

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

הרשאות של חשבון שירות

מאחר שחשבונות שירות הם זהויות, אפשר לתת לחשבון שירות גישה למשאבים בפרויקט על ידי הקצאת תפקיד, בדיוק כמו שמקצים תפקיד לכל חשבון משתמש אחר. לדוגמה, אם אתם רוצים לאפשר לתהליך העבודה לשלוח יומנים ל-Cloud Logging, אתם צריכים לוודא שחשבון השירות שמריץ את תהליך העבודה קיבל תפקיד שכולל את ההרשאה logging.logEntries.create (לדוגמה, התפקיד Logs Writer). באופן כללי, התפקידים שנדרשים לחשבון השירות תלויים במשאבים שאתם מתזמנים באמצעות תהליכי העבודה. כדי לדעת אילו תפקידים נדרשים, אפשר לעיין במסמכי המוצר של המשאב שמבצעים בו תזמור, או לבחור תפקידים מוגדרים מראש.

שימו לב: חשבון השירות של תהליך העבודה לא צריך את התפקיד workflows.invoker, אלא אם תהליך העבודה מפעיל את עצמו או תהליכי עבודה אחרים (כלומר, יוצר הפעלות חדשות של תהליך העבודה). מידע נוסף זמין במאמר בנושא הפעלת Workflows.

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

צירוף חשבונות שירות למשאבים

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

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

הפעלת פונקציות Cloud Run

בפונקציות Cloud Run, הרשאות ההפעלה זמינות באמצעות ניהול שירות Cloud Run הבסיסי. אם תהליך העבודה שלכם מפעיל שירות של פונקציות Cloud Run, אתם לא צריכים להקצות לחשבון השירות של המתקשר את התפקיד Cloud Functions Invoker‏ (roles/cloudfunctions.invoker). במקום זאת, צריך להקצות את התפקיד Cloud Run Invoker‏ (roles/run.invoker).

מידע נוסף זמין במאמר השוואה בין פונקציות של Cloud Run.

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

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

  1. יוצרים את חשבון השירות ורושמים את השם שלו.

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

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

    כדי לקבל את ההרשאה שנדרשת לצירוף חשבון שירות למשאב, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM משתמש בחשבון שירות (roles/iam.serviceAccountUser) בפרויקט או בחשבון השירות. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

    הקצאת התפקיד בפרויקט:

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

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

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

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

    • WORKFLOWS_PROJECT_ID: מזהה הפרויקט שמכיל את משאבי תהליך העבודה. Google Cloud
    • 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
    • SERVICE_ACCOUNT_RESOURCE_NAME: השם המלא של המשאב של חשבון השירות. לדוגמה:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      כאשר:

      • SERVICE_ACCOUNT_PROJECT_ID הוא מזהה הפרויקט Google Cloudשמכיל את חשבון השירות.
      • SERVICE_ACCOUNT_NAME הוא שם חשבון השירות.
  4. פורסים את תהליך העבודה באמצעות חשבון השירות בהתאמה אישית.

פריסת תהליך עבודה עם חשבון שירות בין פרויקטים

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

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

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

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

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

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

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

  4. מקצים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) לסוכן השירות של Workflows. כך סוכן השירות יכול לנהל את הגישה של חשבון השירות בין פרויקטים. סוכן שירות הוא הזהות של שירותGoogle Cloud מסוים בפרויקט מסוים. מידע נוסף מופיע במאמר בנושא סוכני שירות.

    המסוף

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

      כניסה לדף Workflows

    2. לוחצים על יצירה כדי ליצור תהליך עבודה, או בוחרים את השם של תהליך העבודה שרוצים לעדכן.

    3. ברשימה Service account (חשבון שירות), לוחצים על Switch project (החלפת פרויקט).

    4. בוחרים חשבון שירות מפרויקט אחר.

    5. אם מתבקשים לעשות זאת, מעניקים את התפקיד roles/iam.serviceAccountTokenCreator לסוכן השירות של Workflows.

    gcloud

    1. מקצים את התפקיד roles/iam.serviceAccountTokenCreator לסוכן השירות של Workflows:

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
          --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \
          --role='roles/iam.serviceAccountTokenCreator'

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

      • SERVICE_ACCOUNT_RESOURCE_NAME: השם המלא של המשאב של חשבון השירות. לדוגמה:

        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

        כאשר:

        • SERVICE_ACCOUNT_PROJECT_ID הוא מזהה הפרויקטGoogle Cloud שמכיל את חשבון השירות.
        • SERVICE_ACCOUNT_NAME הוא השם של חשבון השירות.
      • WORKFLOWS_PROJECT_NUMBER:Google Cloud מספר הפרויקט שמכיל את משאבי זרימת העבודה.

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

    כדי לקבל את ההרשאה שנדרשת לצירוף חשבון שירות למשאב, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM משתמש בחשבון שירות (roles/iam.serviceAccountUser) בפרויקט או בחשבון השירות. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

    המסוף

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

      כניסה לדף Workflows

    2. לוחצים על יצירה כדי ליצור תהליך עבודה, או בוחרים את השם של תהליך העבודה שרוצים לעדכן.

    3. ברשימה Service account (חשבון שירות), לוחצים על Switch project (החלפת פרויקט).

    4. בוחרים חשבון שירות מפרויקט אחר.

    5. אם מתבקשים, נותנים את התפקיד roles/iam.serviceAccountUser בפרויקט.

    gcloud

    הקצאת התפקיד בפרויקט:

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

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

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

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

    • WORKFLOWS_PROJECT_ID: מזהה הפרויקט Google Cloudשמכיל את משאבי זרימת העבודה
    • 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
    • SERVICE_ACCOUNT_RESOURCE_NAME: השם המלא של המשאב של חשבון השירות. לדוגמה:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      כאשר:

      • SERVICE_ACCOUNT_PROJECT_ID הוא מזהה הפרויקטGoogle Cloud שמכיל את חשבון השירות.
      • SERVICE_ACCOUNT_NAME הוא השם של חשבון השירות.
  6. פורסים את תהליך העבודה באמצעות חשבון השירות שמשויך לפרויקט אחר.

אימות של חשבון השירות שמשויך לתהליך עבודה

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

המסוף

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

    כניסה לדף Workflows

  2. בדף Workflows, לוחצים על שם תהליך העבודה.

  3. בדף פרטי תהליך העבודה, לוחצים על הכרטיסייה פרטים.

    מוצג חשבון השירות שמשויך לתהליך העבודה.

gcloud

  1. פותחים טרמינל.

  2. מזינים את הפקודה הבאה:

    gcloud workflows describe MY_WORKFLOW

    מחליפים את MY_WORKFLOW בשם של זרימת העבודה.

    מוחזר תיאור מלא של תהליך העבודה, כולל חשבון השירות המשויך. לדוגמה:

    createTime: '2020-06-05T23:45:34.154213774Z'
    name: projects/myProject/locations/us-central1/workflows/myWorkflow
    serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com
    sourceContents: [...]

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