הגדרה של איחוד שירותי אימות הזהות של עומסי עבודה עם צינורות עיבוד נתונים לפריסה

במדריך הזה מוסבר איך להשתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לאפשר לצינורות עיבוד נתונים של פריסה לבצע אימות עם Google Cloud.

בהתאם למערכת ה-CI/CD שבה משתמשים, לצינורות עיבוד הנתונים לפריסה עשויה להיות גישה לפרטי כניסה ספציפיים לסביבה. לדוגמה:

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

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

מגדירים אימות

צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

המסוף

כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

gcloud

במסוף Google Cloud , מפעילים את Cloud Shell.

הפעלת Cloud Shell

בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

Python

כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

  1. התקינו את ה-CLI של Google Cloud.

  2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

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

כדי לקבל את ההרשאות שנדרשות להגדרה של איחוד שירותי אימות הזהות של עומסי עבודה, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

לחלופין, התפקיד הבסיסי ב-IAM 'בעלים' (roles/owner) כולל גם הרשאות להגדרה של איחוד זהויות. בסביבת ייצור לא מומלץ להקצות תפקידים בסיסיים, אבל אפשר להעניק אותם בסביבת פיתוח או בסביבת בדיקה.

הכנת ה-IdP החיצוני

Azure DevOps

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

כדי ליצור חיבור שירות ל-Azure Resource Manager:

  1. ב-Azure DevOps, פותחים את הפרויקט ועוברים אל Project Settings (הגדרות הפרויקט).
  2. עוברים אל Pipelines > Service connections.
  3. לוחצים על יצירת קישור לשירות.
  4. בוחרים באפשרות Azure Resource Manager.
  5. לוחצים על הבא.
  6. מגדירים את ההגדרות הבאות:

    • סוג הזהות: רישום אפליקציה (אוטומטי)
    • אישורים: איחוד שירותי אימות הזהות של עומסי עבודה
    • רמת ההיקף: מינוי.

      אתם חייבים לבחור מינוי גם אם אתם לא מתכננים להשתמש בחיבור לשירות כדי לגשת למשאבי Azure.

    • שם חיבור השירות: מזינים שם כמו google-cloud.

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

  8. בקטע פרטים של איחוד שירותי אימות הזהויות של עומסי עבודה, מאתרים את המזהים הבאים:

    • Issuer: מזהה באופן ייחודי את הארגון שלכם ב-Azure DevOps
    • מזהה הנושא: מזהה ייחודי של חיבור השירות

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

מערכת Azure DevOps מעניקה באופן אוטומטי ל-service principal של חיבור השירות גישה למינוי Azure שבחרתם. מומלץ לצמצם את הגישה הזו באופן הבא:

  1. לוחצים על ניהול תפקידים של חיבור שירות.
  2. לוחצים על הקצאות תפקידים.
  3. מחפשים את הקצאת התפקיד לחיבור השירות ומסירים אותה או מחליפים אותה בהקצאת תפקיד שמשתמשת בתפקיד עם פחות הרשאות.

פעולות GitHub

אתם לא צריכים לשנות את ההגדרות האישיות בחשבון GitHub שלכם.

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

GitLab SaaS

אתם לא צריכים לשנות את ההגדרות האישיות בחשבון GitLab שלכם.

אחרי שמגדירים מאגר זהויות של עומסי עבודה כדי לתת אמון בקבוצת GitLab, אפשר להפעיל איחוד שירותי אימות הזהות של עומסי עבודה למשימות CI/CD בודדות.

HCP Terraform

אתם לא צריכים לשנות את ההגדרות האישיות בחשבון HCP Terraform שלכם.

אחרי שמגדירים מאגר זהויות של עומס עבודה כדי לתת אמון ב-HCP Terraform, אפשר להפעיל איחוד שירותי אימות הזהות של עומסי עבודה לסביבות עבודה ספציפיות.

הגדרת איחוד שירותי אימות הזהות של עומסי עבודה

צריך לבצע את השלבים האלה לכל פרויקט Azure DevOps, ארגון GitHub, קבוצת GitLab או ארגון HCP Terraform.

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

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

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

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מומלץ להשתמש בפרויקט ייעודי לניהול ספקים ומאגרי זהויות של עומסי עבודה.
  3. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  4. מפעילים את ממשקי ה-API של IAM,‏ מנהל המשאבים,‏ Service Account Credentials ו-Security Token Service.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    הפעלת ממשקי ה-API

הגדרת מיפוי של מאפיין

פרטי הכניסה הספציפיים לסביבה של צינור עיבוד הנתונים לפריסה מכילים מספר מאפיינים, ואתם צריכים להחליט באיזה מאפיין להשתמש בתור מזהה הנושא (google.subject) ב- Google Cloud.

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

Azure DevOps

האסימון המזהה של Azure DevOps כולל טענה sub שמכילה את מזהה הנושא של חיבור השירות. מזהה הנושא מופיע בפורמט הבא:

PREFIX/sc/SERVICE_CONNECTION

אורך מזהה הנושא הזה חורג מ-127 תווים, שהוא האורך המקסימלי המותר עבור google.subject. כדי לעקוף את ההגבלה הזו, צריך להשתמש במיפוי המאפיינים הבא:

google.subject=assertion.sub.split('/sc/')[1]

המיפוי הזה משתמש בחלק של טענת הנכונות sub אחרי /sc/ כנושא, שמזהה באופן ייחודי את חיבור השירות. כשמקצים תפקידים לזהות חיצונית, משתמשים בחלק של מזהה הנושא שאחרי /sc/ (כפי שמופיע בפרטי חיבור השירות) בתור הנושא.

פעולות GitHub

מיפוי המאפיינים יכול להשתמש בכל אחת מההצהרות באסימון ה-OIDC של GitHub. מפתחות ההצהרה של האסימון והערכים שלהם נשלטים על ידי GitHub. לכל הפחות, צריך להתאים את google.subject ל-assertion.sub, שתואם לנושא של אסימון ה-OIDC של פעולות GitHub:

google.subject=assertion.sub

הערך של נושא אסימון ה-OIDC של פעולות GitHub עשוי להשתנות בהתאם לאירוע המקור. מאפייני הצהרה אחרים עשויים לכלול:

  • repository: מכיל את הבעלים ואת שם המאגר, לדוגמה "google/guava".

  • repository_id: מכיל את המזהה הייחודי של המאגר, לדוגמה"20300177".

  • repository_owner: מכיל את הבעלים, שיכול להיות שם משתמש או שם של ארגון GitHub, לדוגמה "google".

  • repository_owner_id: מכיל את המזהה הייחודי של הבעלים, לדוגמה "1342004".

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

GitLab SaaS

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

  • sub: שם הפרויקט והפניה ל-Git - לדוגמה, project_path:groupname/projectname:ref_type:branch:ref:main.
  • namespace_id: המזהה הייחודי של הקבוצה.
  • project_id: המזהה הייחודי של הפרויקט.
  • user_id: המזהה הייחודי של המשתמש.
  • environment:הסביבה שהמשימה חלה עליה.
  • ref_path: ההפניה ל-Git, לדוגמה refs/heads/main.

מיפוי המאפיינים הבא מגדיר את google.subject להצהרה sub מהאסימון המזהה של GitLab. מכיוון שההצהרה sub מכילה גם את שם הפרויקט וגם את ההפניה ל-Git, המיפוי הזה מאפשר שליטה בגישה לפי מאגר והסתעפות:

google.subject=assertion.sub

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

במקרים מסוימים, ייתכן שיהיה מספיק להבדיל בין גישה לפי פרויקט או קבוצה. לפיכך המיפוי הבא כולל שני מאפיינים נוספים שמכילים את project_id ואת namespace_id של GitLab:

google.subject=assertion.sub
attribute.project_id=assertion.project_id
attribute.namespace_id=assertion.namespace_id

HCP Terraform

מיפוי המאפיינים יכול להשתמש בהצהרות המוטמעות באסימון ה-OIDC של HCP Terraform, כולל

  • terraform_organization_id: מכיל את המזהה הייחודי של הארגון, לדוגמה org-xxxxxxxxxxxxxxxx.
  • terraform_workspace_id: מכיל את המזהה הייחודי של סביבת העבודה, לדוגמה ws-xxxxxxxxxxxxxxxx.
  • terraform_workspace_name: מכיל את שם התצוגה של סביבת העבודה.
  • sub: מכיל את שם התצוגה של הארגון, סביבת העבודה והשלב, לדוגמה organization:example-org:workspace:example-workspace:run_phase:apply.

מיפוי המאפיינים הבא מגדיר את google.subject להצהרה terraform_workspace_id מאסימון ה-OIDC של HCP Terraform:

google.subject=assertion.terraform_workspace_id

מיפוי זה מאפשר שליטה בגישה למשאבי Google Cloud לפי סביבת עבודה.

הגדרת תנאי למאפיין

תנאים של מאפיין הם ביטויי CEL שיכולים לבדוק מאפייני טענות נכונות (assertions) ומאפייני יעד. אם תנאי המאפיין מוערך ל-true עבור פרטי כניסה נתונים, פרטי הכניסה יתקבלו. אחרת, פרטי הכניסה יידחו. צריך מיפוי מאפיינים לכל שדות תנאי המאפיין.

Azure DevOps

כדי להגביל את הגישה לאפליקציית Azure DevOps (חשבון שירות), משתמשים בתנאי למאפיין הבא:

assertion.oid=='APPLICATION_OBJECT_ID'

מחליפים את APPLICATION_OBJECT_ID במזהה האובייקט של אפליקציית Azure DevOps ב-Entra.

פעולות GitHub

משתמשים בתנאי המאפיין הבא כדי להגביל את הגישה לאסימונים שהונפקו על ידי ארגון GitHub שלכם:

assertion.repository_owner=='ORGANIZATION'

מחליפים את ORGANIZATION בשם ארגון GitHub שלכם.

אפשר גם להרחיב את תנאי המאפיין כדי להגביל את הגישה לקבוצת משנה של תהליכי עבודה או הסתעפויות. לדוגמה, התנאי הבא מגביל את הגישה לתהליכי עבודה המשתמשים בהסתעפות Git main:

assertion.repository_owner=='ORGANIZATION' && assertion.ref=='refs/heads/main'

GitLab SaaS

משתמשים בתנאי המאפיין הבא כדי להגביל את הגישה לאסימונים שהונפקו על ידי קבוצת GitLab שלכם

assertion.namespace_id=='GROUP_ID'

מחליפים את GROUP_ID במזהה הקבוצה שמוצג בדף הבית של קבוצת GitLab שלכם.

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

assertion.namespace_id=='GROUP_ID' && assertion.environment=='production'

HCP Terraform

משתמשים בתנאי המאפיין הבא כדי להגביל את הגישה לאסימונים שהונפקו על ידי ארגון HCP Terraform שלכם:

assertion.terraform_organization_id=='ORGANIZATION_ID'

מחליפים את ORGANIZATION_ID במזהה הייחודי של הארגון, לדוגמה, org-xxxxxxxxxxxxxxxx. אפשר גם להרחיב את תנאי המאפיין כדי להגביל את הגישה לקבוצת משנה של תהליכי עבודה או הסתעפויות. לדוגמה, תנאי המאפיין הבא מגביל את הגישה לסביבת עבודה מסוימת:

assertion.terraform_organization_id=='ORGANIZATION_ID' && assertion.terraform_workspace_id=='WORKSPACE_ID'

יצירה של ספק ומאגר זהויות של עומסי עבודה

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

המסוף

  1. נכנסים לדף New workload provider and pool במסוף Google Cloud .

    לדף New workload provider and pool

  2. בקטע Create an identity pool, מזינים את הפרטים הבאים:

    • Name: השם של המאגר. השם משמש גם כמזהה המאגר. אי אפשר לשנות את מזהה המאגר בשלב מאוחר יותר.
    • Description: טקסט שמתאר את המטרה של המאגר.
  3. לוחצים על Continue.

  4. מגדירים את הספק:

    Azure DevOps

    • Select a provider:בוחרים את הספק OpenID Connect (OIDC).
    • Provider name: השם של פרויקט Azure DevOps או שם מותאם אישית.
    • Provider ID: השם של פרויקט Azure DevOps או מזהה מותאם אישית. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.
    • Issuer URL: מנפיק חיבור השירות שחיפשתם בעבר.
    • קהלים: בוחרים באפשרות קהלים מותרים ומזינים את הערך הבא:

      fb60f99c-7a34-4190-8149-302f77469936
      

      המזהה הזה הוא מזהה האפליקציה של נקודת הקצה של Azure Token Exchange.

    פעולות GitHub

    • Select a provider: OpenID Connect (OIDC).
    • Provider name: השם של הספק.
    • Provider ID: המזהה של הספק. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.
    • Issuer URL: https://token.actions.githubusercontent.com/
    • Audiences: Default audience

    GitLab SaaS

    • Select a provider: OpenID Connect (OIDC).
    • Provider name: השם של הספק.
    • Provider ID: המזהה של הספק. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.
    • Issuer URL: https://gitlab.com
    • Audiences: Default audience

    HCP Terraform

    • Select a provider:בוחרים את הספק OpenID Connect (OIDC).
    • Provider name: השם של הספק.
    • Provider ID: המזהה של הספק. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.
    • Issuer URL: https://app.terraform.io
    • Audiences: Default audience
  5. לוחצים על Continue.

  6. בקטע Configure provider attributes, מוסיפים את מיפויי המאפיינים שזיהיתם קודם.

  7. בקטע Attribute conditions, מזינים את תנאי המאפיין שזיהיתם קודם.

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

gcloud

  1. יצירת מאגר זהויות חדש של עומסי עבודה:

    gcloud iam workload-identity-pools create POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    מחליפים את הערכים הבאים:

    • POOL_ID: המזהה הייחודי של המאגר
    • DISPLAY_NAME: שם המאגר
    • DESCRIPTION: תיאור המאגר. התיאור הזה מוצג כשמעניקים גישה לזהויות במאגר.
  2. הוספת ספק למאגר הזהויות של עומסי עבודה:

    Azure DevOps

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="ISSUER" \
        --allowed-audiences="AUDIENCE" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    מחליפים את הערכים הבאים:

    פעולות GitHub

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="https://token.actions.githubusercontent.com/" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    מחליפים את הערכים הבאים:

    GitLab SaaS

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="https://gitlab.com" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    מחליפים את הערכים הבאים:

    HCP Terraform

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="https://app.terraform.io" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    מחליפים את הערכים הבאים:

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

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

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

המסוף

  1. במסוף Google Cloud , עוברים לדף Workload Identity Pools.

    לדף Workload Identity Pools

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

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

  4. בקטע Attribute conditions, מזינים את התנאי למאפיין שזיהיתם קודם.

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

gcloud

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

gcloud iam workload-identity-pools providers update-oidc PROVIDER_ID \
    --location="global" \
    --workload-identity-pool="POOL_ID" \
    --attribute-condition="CONDITIONS"

מחליפים את הערכים הבאים:

אימות צינור עיבוד נתונים לפריסה

צריך להשלים את השלבים האלו לכל תהליך עבודה של פעולות GitHub או סביבת עבודה של Terraform Cloud.

מתן הרשאה לעומס העבודה החיצוני לגשת למשאבים של Google Cloud

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

גישה ישירה למשאבים

אפשר להעניק גישה לזהות מאוחדת ישירות למשאבים באמצעות מסוף Google Cloud או ה-CLI של gcloud.

המסוף

כדי להשתמש במסוף Google Cloud כדי להעניק תפקידי IAM ישירות למשאב, צריך לעבור לדף של המשאב ואז להעניק את התפקיד. בדוגמה הבאה מוסבר איך לעבור לדף Cloud Storage ולהעניק את התפקיד 'צפייה באובייקט אחסון' (roles/storage.objectViewer) ישירות בקטגוריה של Cloud Storage לזהות מאוחדת.

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

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

  3. לוחצים על הכרטיסייה Permissions בחלק העליון של הדף.

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

    מופיעה תיבת הדו-שיח Add principals.

  5. בשדה New principals, מזינים את הזהות (או הזהויות) שצריכה גישה לקטגוריה.

    לפי נושא

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

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

    • PROJECT_NUMBER: מספר הפרויקט
    • POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
    • SUBJECT: הנושא האישי שמופה מה-IdP, לדוגמה: administrator@example.com

    לפי קבוצה

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

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

    • PROJECT_NUMBER: מספר הפרויקט
    • WORKLOAD_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
    • GROUP: הקבוצה שמופה מה-IdP (לדוגמה: administrator-group@example.com).

    לפי תכונה

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
    

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

    • PROJECT_NUMBER: מספר הפרויקט
    • WORKLOAD_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
    • ATTRIBUTE_NAME: אחד מהמאפיינים שמופו מה-IdP
    • ATTRIBUTE_VALUE: הערך של המאפיין
  6. בוחרים תפקיד (או תפקידים) בתפריט הנפתח Select a rol. התפקידים שבחרתם יופיעו בחלונית עם תיאור קצר של ההרשאות שהם מעניקים.

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

gcloud

כדי להשתמש ב-CLI של gcloud כדי להקצות תפקידי IAM למשאב בפרויקט, מבצעים את הפעולות הבאות:

  1. מקבלים את מספר הפרויקט שבו מוגדר המשאב.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. הענקת גישה למשאב.

    כדי להשתמש ב-CLI של gcloud כדי להעניק את התפקיד Storage Object Viewer ‏(roles/storage.objectViewer) לזהויות חיצוניות שעומדות בקריטריונים מסוימים, מריצים את הפקודה הבאה.

    לפי נושא

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    לפי קבוצה

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    לפי תכונה

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

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

    • BUCKET_ID: הקטגוריה שרוצים לתת לה גישה
    • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה.
    • POOL_ID: מזהה מאגר הזהויות של עומסי העבודה
    • SUBJECT: הערך הצפוי של המאפיין שמיפיתם ל-google.subject
    • GROUP: הערך הצפוי של המאפיין שמיפיתם ל-google.groups
    • ATTRIBUTE_NAME: השם של המאפיין בהתאמה אישית במיפוי המאפיינים שלכם
    • ATTRIBUTE_VALUE: הערך של המאפיין בהתאמה אישית במיפוי המאפיינים שלכם

    אפשר להקצות תפקידים לכל Google Cloud משאב שתומך במדיניות הרשאות של IAM.

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

  1. כדי ליצור חשבון שירות לעומס העבודה החיצוני, מבצעים את הפעולות הבאות:

    1. מפעילים את ממשקי ה-API‏ IAM,‏ Security Token Service ו-Service Account Credentials.

      תפקידים שנדרשים להפעלת ממשקי API

      כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

      הפעלת ממשקי ה-API

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

    3. הענקת גישה לחשבון השירות למשאבים שאליהם רוצים שלזהויות חיצוניות תהיה גישה.

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

המסוף

כדי להשתמש במסוף Google Cloud כדי להעניק תפקידי IAM לזהות מאוחדת עם חשבון שירות, מבצעים את הפעולות הבאות:

חשבון שירות באותו פרויקט

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

    1. עוברים לדף Workload Identity Pools.

      לדף Workload Identity Pools

    2. לוחצים על הענקת גישה.

    3. בתיבת הדו-שיח Grant access to service account, בוחרים באפשרות Grant access using Service Account impersonation.

    4. ברשימה Service accounts, בוחרים את חשבון השירות שאליו הזהויות החיצוניות יתחזו, ומבצעים את הפעולות הבאות:

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

      • כדי לאפשר רק לזהויות ספציפיות ממאגר הזהויות של עומסי העבודה להתחזות לחשבון השירות, בוחרים באפשרות Only identities matching the filter.

      • ברשימה שם מאפיין, בוחרים את המאפיין שרוצים לסנן לפיו.

      • בשדה Attribute value, מזינים את הערך הצפוי של המאפיין; לדוגמה, אם משתמשים במיפוי מאפיין google.subject=assertion.sub, מגדירים את Attribute name ל-subject ואת Attribute value לערך של ההצהרה sub באסימונים שהונפקו על ידי ספק הזהויות החיצוני.

    6. כדי לשמור את ההגדרות, לוחצים על Save ואז על Dismiss.

חשבון שירות בפרויקט אחר

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

    1. עוברים לדף Service Accounts.

      לדף Service accounts

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

    3. לוחצים על ניהול הגישה.

    4. לוחצים על Add principal.

    5. בשדה New principal, מזינים אחד ממזהי הגורמים המורשים הבאים של הזהויות במאגר שיתחזו לחשבון השירות.

      לפי נושא

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      

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

      • PROJECT_NUMBER: מספר הפרויקט
      • POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
      • SUBJECT: הנושא האישי שמופה מה-IdP, לדוגמה: administrator@example.com

      לפי קבוצה

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
      

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

      • PROJECT_NUMBER: מספר הפרויקט
      • WORKLOAD_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
      • GROUP: הקבוצה שמופה מה-IdP (לדוגמה: administrator-group@example.com).

      לפי תכונה

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
      

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

      • PROJECT_NUMBER: מספר הפרויקט
      • WORKLOAD_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
      • ATTRIBUTE_NAME: אחד מהמאפיינים שמופו מה-IdP
      • ATTRIBUTE_VALUE: הערך של המאפיין

      לפי בריכה

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

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

      • PROJECT_NUMBER: מספר הפרויקט
      • WORKLOAD_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
    6. ברשימת התפקידים Select a role בוחרים את התפקיד Workload Identity User (roles/iam.workloadIdentityUser).

    7. כדי לשמור את ההגדרות, לוחצים על Save.

gcloud

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

לפי נושא

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

לפי קבוצה

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

לפי תכונה

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

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

  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות
  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה.
  • POOL_ID: מזהה מאגר הזהויות של עומסי העבודה
  • SUBJECT: הערך הצפוי של המאפיין שמיפיתם ל-google.subject
  • GROUP: הערך הצפוי של המאפיין שמיפיתם ל-google.groups
  • ATTRIBUTE_NAME: השם של המאפיין בהתאמה אישית במיפוי המאפיינים שלכם
  • ATTRIBUTE_VALUE: הערך של המאפיין בהתאמה אישית במיפוי המאפיינים שלכם

הגדרת צינור עיבוד הנתונים לפריסה

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

Azure DevOps

עורכים את קובץ azure-pipelines.yml ומוסיפים את הפרטים הבאים להגדרות האישיות של המשימה:

variables:
- name: Azure.WorkloadIdentity.Connection
  value: CONNECTION
- name: GoogleCloud.WorkloadIdentity.ProjectNumber
  value: PROJECT_NUMBER
- name: GoogleCloud.WorkloadIdentity.Pool
  value: POOL_ID
- name: GoogleCloud.WorkloadIdentity.Provider
  value: PROVIDER_ID
- name: GoogleCloud.WorkloadIdentity.ServiceAccount
  value: SERVICE_ACCOUNT_EMAIL
- name: GOOGLE_APPLICATION_CREDENTIALS
  value: $(Pipeline.Workspace)/.workload_identity.wlconfig

steps:
  - task: AzureCLI@2
    inputs:
      connectedServiceNameARM: $(Azure.WorkloadIdentity.Connection)
      addSpnToEnvironment: true
      scriptType: 'bash'
      scriptLocation: 'inlineScript'
      inlineScript: |
        echo $idToken > $(Pipeline.Workspace)/.workload_identity.jwt
        cat << EOF > $GOOGLE_APPLICATION_CREDENTIALS
        {
          "type": "external_account",
          "audience": "//iam.googleapis.com/projects/$(GoogleCloud.WorkloadIdentity.ProjectNumber)/locations/global/workloadIdentityPools/$(GoogleCloud.WorkloadIdentity.Pool)/providers/$(GoogleCloud.WorkloadIdentity.Provider)",
          "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
          "token_url": "https://sts.REGION.rep.googleapis.com/v1/token",
          "credential_source": {
            "file": "$(Pipeline.Workspace)/.workload_identity.jwt"
          },
          "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/$(GoogleCloud.WorkloadIdentity.ServiceAccount):generateAccessToken"
        }
        EOF

מחליפים את הערכים הבאים:

  • CONNECTION: השם של חיבור השירות.
  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה.
  • POOL_ID: המזהה של מאגר הזהויות של עומסי עבודה.
  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה.
  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות, אם אתם משתמשים בהתחזות לחשבון שירות. אם אתם משתמשים בגישה ישירה למשאבים, אל תכללו את GoogleCloud.WorkloadIdentity.ServiceAccount ואת service_account_impersonation_url.
  • REGION: אזור לנקודות קצה אזוריות של STS, אם הן זמינות. אם נקודות קצה אזוריות לא זמינות, אפשר להשתמש בכתובת https://sts.googleapis.com/v1/token.

ההגדרות האישיות מבצעות את הפעולות הבאות:

  1. משתמשים במשימה AzureCLI כדי לקבל אסימון מזהה לחיבור השירות, והופכים אותו לזמין במשתנה בשם idToken.
  2. שומרים את האסימון המזהה בקובץ זמני בשם .workload_identity.jwt.
  3. יוצרים קובץ תצורה של פרטי כניסה שמורה לספריות הלקוח לקרוא את האסימון המזהה מ-.workload_identity.jwt ולהשתמש בו כדי להתחזות לחשבון שירות.
  4. מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS כך שיצביע על קובץ התצורה של פרטי הכניסה.

פעולות GitHub

הפעולה google-github-actions/auth מאפשרת ליצור באופן אוטומטי קובץ תצורה של פרטי כניסה בזמן ביצוע תהליך העבודה. לאחר מכן, ספריות וכלים של לקוחות כמו terraform יכולים להשתמש בקובץ התצורה הזה של פרטי הכניסה כדי לקבל באופן אוטומטי פרטי כניסה של Google.

עורכים את הקובץ YAML של פעולות GitHub ומוסיפים את הפרטים הבאים:

  • מאפשרים למשימה לאחזר אסימון מזהה של GitHub על ידי הוספת ההגדרות האישיות הבאות:

    permissions:
      id-token: write
      contents: read
    
  • מוסיפים שלב ליצירת קובץ תצורה של פרטי כניסה:

    - id: 'auth'
      name: 'Authenticate to Google Cloud'
      uses: 'google-github-actions/auth@v1'
      with:
        create_credentials_file: true
        workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID'
        service_account: 'SERVICE_ACCOUNT_EMAIL'
    

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

  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי עבודה.
  • POOL_ID: המזהה של מאגר הזהויות של עומסי עבודה.
  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה.
  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות, אם אתם משתמשים בהתחזות לחשבון שירות. אם משתמשים בגישה ישירה למשאבים, משמיטים את service_account.

בדוגמה הבאה מוגדרת פעולת GitHub:

jobs:
  build:
    # Allow the job to fetch a GitHub ID token
    permissions:
      id-token: write
      contents: read

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - id: 'auth'
        name: 'Authenticate to Google Cloud'
        uses: 'google-github-actions/auth@v1'
        with:
          create_credentials_file: true
          workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID'
          service_account: 'SERVICE_ACCOUNT_EMAIL'

לפרטים נוספים על השימוש בפעולה google-github-actions/auth, ראו הגדרת איחוד שירותי אימות הזהות של עומסי עבודה.

GitLab SaaS

עורכים את קובץ .gitlab-ci.yml ומוסיפים את הפרטים הבאים להגדרות האישיות של המשימה:

job:
  variables:
    WORKLOAD_IDENTITY_PROJECT_NUMBER: PROJECT_NUMBER
    WORKLOAD_IDENTITY_POOL: POOL_ID
    WORKLOAD_IDENTITY_PROVIDER: PROVIDER_ID
    SERVICE_ACCOUNT: SERVICE_ACCOUNT_EMAIL
    GOOGLE_APPLICATION_CREDENTIALS: $CI_BUILDS_DIR/.workload_identity.wlconfig

  id_tokens:
    WORKLOAD_IDENTITY_TOKEN:
      aud: https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

  script:
    - |-
      echo $WORKLOAD_IDENTITY_TOKEN > $CI_BUILDS_DIR/.workload_identity.jwt
      cat << EOF > $GOOGLE_APPLICATION_CREDENTIALS
      {
        "type": "external_account",
        "audience": "//iam.googleapis.com/projects/$WORKLOAD_IDENTITY_PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_IDENTITY_POOL/providers/$WORKLOAD_IDENTITY_PROVIDER",
        "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
        "token_url": "https://sts.REGION.rep.googleapis.com/v1/token",
        "credential_source": {
          "file": "$CI_BUILDS_DIR/.workload_identity.jwt"
        },
        "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/$SERVICE_ACCOUNT:generateAccessToken"
      }
      EOF

מחליפים את הערכים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה.
  • POOL_ID: המזהה של מאגר הזהויות של עומסי עבודה.
  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה.
  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות, אם אתם משתמשים בהתחזות לחשבון שירות. אם אתם משתמשים בגישה ישירה למשאבים, אל תכללו את SERVICE_ACCOUNT ואת service_account_impersonation_url.
  • REGION: אזור לנקודות קצה אזוריות של STS, אם הן זמינות. אם נקודות קצה אזוריות לא זמינות, אפשר להשתמש בכתובת https://sts.googleapis.com/v1/token.

ההגדרות האישיות מבצעות את הפעולות הבאות:

  1. שולחים הוראה ל-GitLab להנפיק אסימון מזהה ולהפוך אותו לזמין במשתנה הסביבה בשם WORKLOAD_IDENTITY_TOKEN. האסימון המזהה משתמש בספק מאגר הזהויות של עומסי העבודה בתור הקהל.
  2. שומרים את האסימון המזהה בקובץ זמני בשם .workload_identity.jwt.
  3. יוצרים קובץ תצורה של פרטי הכניסה שמורה לספריות הלקוח לקרוא את האסימון המזהה מ-.workload_identity.jwt ולהשתמש בו כדי להתחזות לחשבון שירות.
  4. מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS כך שיצביע על קובץ התצורה של פרטי הכניסה.

HCP Terraform

מגדירים את סביבת העבודה ב-HCP Terraform כך שתשתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לבצע אימות ל- Google Cloud באמצעות התחזות לחשבון שירות:

  1. ב-HCP Terraform, פותחים את סביבת העבודה ועוברים אל Variables.

  2. מוסיפים את המשתנים הבאים:

    קטגוריית משתנים מפתח ערך
    משתנה הסביבה TFC_GCP_PROVIDER_AUTH true
    משתנה הסביבה TFC_GCP_RUN_SERVICE_ACCOUNT_EMAIL כתובת האימייל של חשבון השירות, אם משתמשים בהתחזות לחשבון שירות – לדוגמה, terraform@my-project-123.iam.gserviceaccount.com.
    משתנה הסביבה TFC_GCP_PROJECT_NUMBER מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה
    משתנה הסביבה TFC_GCP_WORKLOAD_POOL_ID המזהה של מאגר הזהויות של עומסי העבודה
    משתנה הסביבה TFC_GCP_WORKLOAD_PROVIDER_ID המזהה של ספק מאגר הזהויות של עומסי העבודה

    לחלופין, אפשר להוסיף משתני סביבה נוספים כדי לאפשר ל-HCP Terraform להשתמש בחשבונות שירות שונים עבור השלבים plan ו-apply. מידע נוסף על שימוש במשתני סביבה בהגדרות של Terraform זמין במאמר משתני סביבה אופציונליים.

  3. ברשימת המשתנים, ודאו ש-Category מוגדרת להיות env לחמשת המשתנים שנוספו בשלב הקודם.

  4. מוודאים שההגדרות האישיות של Terraform משתמשות בגרסה 4.48.0 ואילך של פלאגין שמתממשק עם שירותים חיצוניים Google Cloud , ומעדכנים אותה במידת הצורך, באופן הבא:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 4.48.0"
        }
      }
    }
    
  5. שולחים את השינויים למאגר המקורות של הקוד.

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