במדריך הזה מוסבר איך להשתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לאפשר לצינורות עיבוד נתונים של פריסה לבצע אימות עם 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.
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, בצע את הפעולות הבאות:
- ב-Azure DevOps, פותחים את הפרויקט ועוברים אל Project Settings (הגדרות הפרויקט).
- עוברים אל Pipelines > Service connections.
- לוחצים על יצירת קישור לשירות.
- בוחרים באפשרות Azure Resource Manager.
- לוחצים על הבא.
מגדירים את ההגדרות הבאות:
- סוג הזהות: רישום לאפליקציות (אוטומטי)
- אישורים: איחוד שירותי אימות הזהות של עומסי עבודה
רמת ההיקף: מינוי.
אתם חייבים לבחור מינוי גם אם אתם לא מתכננים להשתמש בחיבור לשירות כדי לגשת למשאבי Azure.
שם חיבור השירות: מזינים שם כמו
google-cloud.
לוחצים על Save.
בשלב מאוחר יותר, תצטרכו את מנפיק האישורים ואת מזהה הנושא של חיבור השירות. כדי למצוא את הפרטים האלה:
- לוחצים על קישור השירות שיצרתם.
- לוחצים על ניהול רישום האפליקציה.
- בוחרים באפשרות ניהול > אישורים וסודות > פרטי כניסה מאוחדים.
- לוחצים על פרטי הכניסה המאוחדים.
בדף Edit a credential, מאתרים את המזהים הבאים:
- Issuer: מזהה באופן ייחודי את הארגון שלכם ב-Azure DevOps
- מזהה הנושא: מזהה ייחודי של חיבור השירות
מערכת Azure DevOps מעניקה באופן אוטומטי גישה למינוי שבחרתם כהיקף, למנהל השירות שמשויך לחיבור השירות החדש. אם אתם לא מתכננים להשתמש בחיבור השירות כדי לגשת למשאבי Azure, אתם יכולים לבטל את הגישה הזו באופן הבא:
- בפורטל Azure, פותחים את המינוי שבחרתם כהיקף.
- עוברים אל בקרת גישה (IAM) > הקצאות תפקידים.
- מאתרים את הקצאת התפקיד לחיבור לשירות ומסירים אותה.
פעולות GitHub
אתם לא צריכים לשנות את ההגדרות האישיות בחשבון GitHub שלכם.
אחרי שמגדירים מאגר זהויות של עומסי עבודה שייתן אמון במאגר GitHub, אפשר לתת לתהליכי עבודה במאגר הזה להשתמש באסימון ה-OIDC של GitHub כדי להשיג פרטי כניסה קצרי מועד של Google Cloud .
GitLab SaaS
אתם לא צריכים לשנות את ההגדרות האישיות בחשבון GitLab שלכם.
אחרי שמגדירים מאגר זהויות של עומסי עבודה כדי לתת אמון בקבוצת GitLab, אפשר להפעיל איחוד שירותי אימות הזהות של עומסי עבודה למשימות CI/CD בודדות.
HCP Terraform
אתם לא צריכים לשנות את ההגדרות האישיות בחשבון HCP Terraform שלכם.
אחרי שמגדירים מאגר זהויות של עומס עבודה כדי לתת אמון ב-HCP Terraform, אפשר להפעיל איחוד שירותי אימות הזהות של עומסי עבודה לסביבות עבודה ספציפיות.
הגדרת איחוד שירותי אימות הזהות של עומסי עבודה
צריך לבצע את השלבים האלו עבור כל ארגון GitHub, קבוצת GitLab או ארגון HCP Terraform.
כדי להתחיל בהגדרה של איחוד שירותי אימות הזהות של עומסי עבודה, מבצעים את הפעולות הבאות:
- 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
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
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.
הגדרת מיפוי של מאפיין
פרטי הכניסה הספציפיים לסביבה של צינור עיבוד הנתונים לפריסה מכילים מספר מאפיינים, ואתם צריכים להחליט באיזה מאפיין להשתמש בתור מזהה הנושא (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'
יצירה של מאגר וספק זהויות של כוח עבודה
עכשיו נאסף כל המידע שצריך כדי ליצור ספק ומאגר זהויות של עומסי עבודה:
המסוף
נכנסים לדף New workload provider and pool במסוף Google Cloud .
בקטע Create an identity pool, מזינים את הפרטים הבאים:
- Name: השם של המאגר. השם משמש גם כמזהה המאגר. אי אפשר לשנות את מזהה המאגר בשלב מאוחר יותר.
- Description: טקסט שמתאר את המטרה של המאגר.
לוחצים על Continue.
מגדירים את הספק:
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
לוחצים על Continue.
בקטע Configure provider attributes, מוסיפים את מיפויי המאפיינים שזיהיתם קודם.
בקטע Attribute conditions, מזינים את תנאי המאפיין שזיהיתם קודם.
לוחצים על Save כדי ליצור את הספק ואת מאגר הזהויות של עומסי העבודה.
gcloud
יצירת מאגר זהויות חדש של עומסי עבודה:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"מחליפים את הערכים הבאים:
-
POOL_ID: המזהה הייחודי של המאגר -
DISPLAY_NAME: שם המאגר -
DESCRIPTION: תיאור המאגר. התיאור הזה מוצג כשמעניקים גישה לזהויות במאגר
-
הוספת ספק למאגר הזהויות של עומסי עבודה:
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"מחליפים את הערכים הבאים:
-
PROVIDER_ID: השם של פרויקט Azure DevOps או מזהה מותאם אישית של הספק. -
POOL_ID: מזהה המאגר -
ISSUER: המנפיק של חיבור השירות שחיפשתם קודם. -
MAPPINGS: רשימה מופרדת בפסיקים של מיפויי המאפיינים שזיהיתם קודם -
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"מחליפים את הערכים הבאים:
-
PROVIDER_ID: המזהה הייחודי של הספק -
POOL_ID: מזהה המאגר -
MAPPINGS: רשימה מופרדת בפסיקים של מיפויי המאפיינים שזיהיתם קודם -
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"מחליפים את הערכים הבאים:
-
PROVIDER_ID: המזהה הייחודי של הספק -
POOL_ID: מזהה המאגר -
MAPPINGS: רשימה מופרדת בפסיקים של מיפויי המאפיינים שזיהיתם קודם -
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"מחליפים את הערכים הבאים:
-
PROVIDER_ID: המזהה הייחודי של הספק. -
POOL_ID: מזהה המאגר. -
MAPPINGS: רשימה מופרדת בפסיקים של מיפויי המאפיינים שזיהיתם קודם. -
CONDITIONS: מצב התכונה שזיהיתם קודם.
-
עדכון תנאי המאפיין בספק מאגרי זהויות של עומסי עבודה
בקטע הזה מוסבר איך לעדכן את תנאי המאפיין בספק מאגר זהויות של עומסי עבודה קיים כדי להגביל את הגישה לאסימונים שהונפקו על ידי ארגון GitHub, קבוצת GitLab או ארגון HCP Terraform.
כדי למצוא את התנאי המומלץ למאפיין בצינור שלכם, אפשר לעיין במאמר הגדרת תנאי למאפיין.
המסוף
במסוף Google Cloud , עוברים לדף Workload Identity Pools.
מאתרים את מאגר הזהויות של עומסי עבודה שמכיל את הספק, ואז לוחצים על הסמל Expand node למאגר.
מאתרים את הספק של מאגר זהויות של עומסי עבודה שרוצים לעדכן ולוחצים על Edit.
בקטע Attribute conditions, מזינים את התנאי למאפיין שציינתם קודם.
כדי לעדכן את מאגר הזהויות של עומסי העבודה ואת הספק, לוחצים על Save.
gcloud
כדי לעדכן את הספק של מאגר זהויות של עומסי עבודה, מריצים את הפקודה הבאה:
gcloud iam workload-identity-pools providers update-oidc PROVIDER_ID \
--location="global" \
--workload-identity-pool="POOL_ID" \
--attribute-condition="CONDITIONS"
מחליפים את הערכים הבאים:
-
PROVIDER_ID: המזהה הייחודי של הספק -
POOL_ID: מזהה המאגר -
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.
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
ברשימת הקטגוריות, לוחצים על שם הקטגוריה שבה רוצים להעניק את התפקיד.
לוחצים על הכרטיסייה Permissions בחלק העליון של הדף.
לוחצים על הלחצן add_boxGrant access.
מופיעה תיבת הדו-שיח Add principals.
בשדה 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: הערך של המאפיין
-
בוחרים תפקיד (או תפקידים) בתפריט הנפתח Select a rol. התפקידים שבחרתם יופיעו בחלונית עם תיאור קצר של ההרשאות שהם מעניקים.
לוחצים על Save.
gcloud
כדי להשתמש ב-CLI של gcloud כדי להקצות תפקידי IAM למשאב בפרויקט, מבצעים את הפעולות הבאות:
מקבלים את מספר הפרויקט שבו מוגדר המשאב.
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
נותנים גישה למשאב.
כדי להשתמש ב-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.
-
התחזות לחשבון שירות
כדי ליצור חשבון שירות לעומס העבודה החיצוני, צריך לבצע את הפעולות הבאות:
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 theserviceusage.services.enablepermission. Learn how to grant roles.יצירת חשבון שירות שמייצג את עומס העבודה. מומלץ להשתמש בחשבון שירות ייעודי לכל עומס עבודה. חשבון השירות לא חייב להיות באותו פרויקט כמו מאגר הזהויות של עומסי העבודה, אבל אתם צריכים להפנות לפרויקט שמכיל את חשבון השירות.
הענקת גישה לחשבון השירות למשאבים שאליהם רוצים שלזהויות חיצוניות תהיה גישה.
כדי לאפשר לזהות המאוחדת להתחזות לחשבון השירות, מבצעים את הפעולות הבאות:
המסוף
כדי להשתמש במסוף Google Cloud כדי להעניק תפקידי IAM לזהות מאוחדת עם חשבון שירות, מבצעים את הפעולות הבאות:
חשבון שירות באותו פרויקט
כדי לתת גישה באמצעות התחזות לחשבון שירות שנמצא באותו פרויקט, מבצעים את הפעולות הבאות:
עוברים לדף Workload Identity Pools.
בוחרים באפשרות הענקת גישה.
בתיבת הדו-שיח Grant access to service account, בוחרים באפשרות Grant access using Service Account impersonation.
ברשימה Service accounts, בוחרים את חשבון השירות שאליו הזהויות החיצוניות יתחזו, ומבצעים את הפעולות הבאות:
כדי לבחור אילו זהויות מהמאגר יכולות להתחזות לחשבון השירות, מבצעים את אחת מהפעולות הבאות:
כדי לאפשר רק לזהויות ספציפיות ממאגר הזהויות של עומסי העבודה להתחזות לחשבון השירות, בוחרים באפשרות Only identities matching the filter.
ברשימה שם מאפיין, בוחרים את המאפיין שרוצים לסנן לפיו.
בשדה ערך מאפיין, מזינים את הערך הצפוי של המאפיין; לדוגמה, אם משתמשים במיפוי מאפיין
google.subject=assertion.sub, מגדירים את שם מאפיין להיותsubjectואת ערך מאפיין לערך של ההצהרהsubבאסימונים שהונפקו על ידי ספק הזהויות החיצוני.
כדי לשמור את ההגדרות האישיות, לוחצים על Save ואז על Dismiss.
חשבון שירות בפרויקט אחר
כדי לתת גישה באמצעות התחזות לחשבון שירות בחשבון שירות בפרויקט אחר, מבצעים את הפעולות הבאות:
עוברים לדף Service Accounts.
בוחרים את חשבון השירות שרוצים להתחזות אליו.
לוחצים על ניהול הגישה.
לוחצים על Add principal.
בשדה 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: המזהה של מאגר הזהויות של עומסי העבודה
-
ברשימת התפקידים Select a role (בחירת תפקיד), בוחרים את התפקיד Workload Identity User (משתמש ב-Workload Identity) (
roles/iam.workloadIdentityUser).כדי לשמור את ההגדרות, לוחצים על שמירה.
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.
ההגדרות האישיות מבצעות את הפעולות הבאות:
- משתמשים במשימה
AzureCLIכדי לקבל אסימון מזהה לחיבור השירות, והופכים אותו לזמין במשתנה בשםidToken. - שומרים את האסימון המזהה בקובץ זמני בשם
.workload_identity.jwt. - יוצרים קובץ תצורה של פרטי כניסה שמורה לספריות הלקוח לקרוא את האסימון המזהה מ-
.workload_identity.jwtולהשתמש בו כדי להתחזות לחשבון שירות. - מגדירים את משתנה הסביבה
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.
ההגדרות האישיות מבצעות את הפעולות הבאות:
- שולחים הוראה ל-GitLab להנפיק אסימון מזהה ולהפוך אותו לזמין במשתנה הסביבה בשם
WORKLOAD_IDENTITY_TOKEN. האסימון המזהה משתמש בספק מאגר הזהויות של עומסי העבודה בתור הקהל. - שומרים את האסימון המזהה בקובץ זמני בשם
.workload_identity.jwt. - יוצרים קובץ תצורה של פרטי כניסה שמורה לספריות הלקוח לקרוא את האסימון המזהה מ-
.workload_identity.jwtולהשתמש בו כדי להתחזות לחשבון שירות. - מגדירים את משתנה הסביבה
GOOGLE_APPLICATION_CREDENTIALSכך שיצביע על קובץ התצורה של פרטי הכניסה.
HCP Terraform
מגדירים את סביבת העבודה ב-HCP Terraform כך שתשתמש באיחוד שירותי אימות הזהויות של עומסי עבודה כדי לבצע אימות ל- Google Cloud באמצעות התחזות לחשבון שירות:
ב-HCP Terraform, פותחים את סביבת העבודה ועוברים אל Variables.
מוסיפים את המשתנים הבאים:
קטגוריית משתנים מפתח ערך משתנה הסביבה TFC_GCP_PROVIDER_AUTHtrueמשתנה הסביבה 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 זמין במאמר משתני סביבה אופציונליים.ברשימת המשתנים, ודאו ש-Category מוגדרת להיות
envלחמשת המשתנים שנוספו בשלב הקודם.מוודאים שההגדרות האישיות של Terraform משתמשות בגרסה
4.48.0ואילך של ספק Google Cloud , ומעדכנים אותה במידת הצורך, באופן הבא:terraform { required_providers { google = { source = "hashicorp/google" version = "~> 4.48.0" } } }שולחים את השינויים למאגר קוד המקור.
המאמרים הבאים
- מידע נוסף על איחוד זהויות של עומסי עבודה
- מידע נוסף על שיטות מומלצות לשימוש באיחוד שירותי אימות הזהות של עומסי עבודה בצינורות עיבוד נתונים לפריסה
- איך אפשר לבצע ניהול ספקים ומאגרים של זהויות של עומסי עבודה
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-03-05 (שעון UTC).