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

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

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

  • צינורות עיבוד נתונים של Azure DevOps יכולים להשתמש בחיבור שירות של איחוד זהויות של עומסי עבודה ב-Microsoft Entra כדי לקבל אסימון מזהה שמזהה באופן ייחודי את פרויקט Azure DevOps.
  • תהליכי עבודה של פעולות GitHub יכולים לקבל אסימון OIDC של GitHub שמזהה באופן ייחודי את תהליך העבודה והמאגר שלו.
  • ‫GitLab SaaS מאפשר למשימות CI/CD לגשת לאסימון מזהה שמזהה באופן ייחודי את המשימה ואת הפרויקט, את הסביבה ואת המאגר שלה.
  • ‫HCP Terraform יכול לספק אסימון OIDC להגדרות האישיות של Terraform שמזהה באופן ייחודי את סביבת העבודה והסביבה.

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

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

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

Select the tab for how you plan to use the samples on this page:

Console

When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

gcloud

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

Python

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

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

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

    If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

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

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

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

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

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

Azure DevOps

כדי לאפשר לצינור Azure DevOps לבצע אימות ל- Google Cloud, קודם צריך להגדיר חיבור שירות ל-Azure מנהל המשאבים. החיבור הזה מאפשר לצינור לקבל אסימון מזהה, שאותו הוא יכול להמיר לפרטי כניסה של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.

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

  1. לוחצים על קישור השירות שיצרתם.
  2. לוחצים על ניהול רישום האפליקציה.
  3. בוחרים באפשרות ניהול > אישורים וסודות > פרטי כניסה מאוחדים.
  4. לוחצים על פרטי הכניסה המאוחדים.
  5. בדף Edit a credential, מאתרים את המזהים הבאים:

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

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

  1. בפורטל Azure, פותחים את המינוי שבחרתם כהיקף.
  2. עוברים אל בקרת גישה (IAM) > הקצאות תפקידים.
  3. מאתרים את הקצאת התפקיד לחיבור לשירות ומסירים אותה.

פעולות GitHub

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

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

GitLab SaaS

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

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

HCP Terraform

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

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

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

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

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

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

    Verify that billing is enabled for your Google Cloud project.

    Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.

    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 APIs

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

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

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

Azure DevOps

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

sc://ORGANIZATION/PROJECT/CONNECTION

כדי למפות את המזהה הזה ל-google.subject, משתמשים במיפוי המאפיינים הבא:

google.subject=assertion.sub

פעולות 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.sub.startsWith('sc://ORGANIZATION/PROJECT/')

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

  • ORGANIZATION: השם של הארגון שלכם ב-Azure DevOps.
  • PROJECT: השם של פרויקט Azure DevOps.

פעולות 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: מנפיק חיבור השירות שחיפשתם בעבר.
    • קהלים: בוחרים באפשרות קהלים מותרים ומדביקים את הערך הבא

      api://AzureADTokenExchange
      

    פעולות 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="api://AzureADTokenExchange" \
        --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. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

      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 APIs

    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.

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

      • בשדה ערך מאפיין, מזינים את הערך הצפוי של המאפיין; לדוגמה, אם משתמשים במיפוי מאפיין google.subject=assertion.sub, מגדירים את שם מאפיין להיות subject ואת ערך מאפיין לערך של ההצהרה 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 (משתמש ב-Workload Identity) ‏(roles/iam.workloadIdentityUser).

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

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. שולחים את השינויים למאגר קוד המקור.

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