הגדרה של איחוד שירותי אימות הזהות של עומסי עבודה עם מכונות וירטואליות של AWS או Azure

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

אם אתם משתמשים ב-Amazon Elastic Kubernetes Service‏ (Amazon EKS) או ב-Azure Kubernetes Service‏ (AKS), תוכלו לקרוא את המאמר הגדרת איחוד שירותי אימות הזהות של עומסי עבודה באמצעות Kubernetes כדי ללמוד איך להגדיר איחוד שירותי אימות הזהות של עומסי עבודה עבור האשכולות שלכם. בדף הזה מוסבר רק איך להגדיר איחוד שירותי אימות הזהות של עומסי עבודה למכונות וירטואליות ב-AWS וב-Azure.

באמצעות איחוד שירותי אימות הזהות של עומסי עבודה, עומסי עבודה שפועלים ב-AWS EC2 ובמכונות וירטואליות של Azure יכולים להחליף את פרטי הכניסה הספציפיים לסביבה באסימונים שלGoogle Cloud Security Token Service לטווח קצר.

פרטי כניסה ספציפיים לסביבה כוללים:

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

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

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

    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 .

הכנה של ספק הזהויות החיצוני

צריך לבצע את השלבים האלה פעם אחת לכל דייר (tenant) ב-Microsoft Entra ID ולכל חשבון AWS.

AWS

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

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

Azure

אתם צריכים ליצור אפליקציה חדשה ל-Microsoft Entra ID בדייר (tenant) ‏Microsoft Entra ID ולהגדיר אותה באופן שמאפשר להשתמש בה לאיחוד שירותי אימות הזהות של עומסי עבודה.

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

כדי ליצור את האפליקציה:

  1. יצירת אפליקציה וישות מורשית של שירות ב-Microsoft Entra ID.

  2. מגדירים לאפליקציה URI של מזהה אפליקציה. אפשר להשתמש ב-URI של מזהה האפליקציה שמוגדר כברירת מחדל (APPID) או לציין URI מותאם אישית.

    יהיה צורך ב-URI של מזהה האפליקציה בהמשך, כשמגדירים את ספק מאגר הזהויות של עומסי העבודה.

כדי לאפשר לאפליקציה לקבל אסימוני גישה לאפליקציה ל-Microsoft Entra ID, אפשר להשתמש בזהויות מנוהלות:

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

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

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

צריך לבצע את ההוראות האלה פעם אחת לכל חשבון AWS או לכל דייר (tenant) ב-Microsoft Entra ID. לאחר מכן תוכלו להשתמש באותו מאגר ובאותו ספק זהויות של כוח עבודה בכמה עומסי עבודה ובכמה פרויקטים של Google Cloud .

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

    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

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

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

‫Google Cloud משתמש במזהה הנושא ביומני הביקורת של Cloud ובמזהים של חשבונות המשתמשים כדי לזהות באופן ייחודי משתמש או תפקיד ב-AWS או ב-Azure.

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

AWS

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

  • account: מספר החשבון ב-AWS.
  • arn: שם ה-AWS ARN של הישות החיצונית.
  • userid: המזהה הייחודי של הישות ששלחה קריאה.

אם האפליקציה פועלת במכונה של Amazon Elastic Compute Cloud (EC2) עם תפקיד מחובר, אתם יכולים להשתמש במיפוי המאפיינים הזה:

google.subject=assertion.arn
attribute.account=assertion.account
attribute.aws_role=assertion.arn.extract('assumed-role/{role}/')
attribute.aws_ec2_instance=assertion.arn.extract('assumed-role/{role_and_session}').extract('/{session}')

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

  • שימוש ב-ARN בתור מזהה נושא – לדוגמה: "arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000
  • הצגה של המאפיין המותאם אישית account והקצאה של מספר חשבון AWS למאפיין הזה
  • הצגה של המאפיין המותאם אישית aws_role והקצאה של שם התפקיד ב-AWS למאפיין הזה – לדוגמה: ec2-my-role
  • הצגה של המאפיין המותאם אישית aws_ec2_instance והקצאה של מזהה מכונת EC2 למאפיין הזה – לדוגמה: i-00000000000000000

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

  • מכונת EC2 ספציפית:

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_ec2_instance/EC2_INSTANCE_ID
    

  • כל המשתמשים והמכונות בתפקיד מסוים:

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_NAME
    

Azure

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

google.subject=assertion.sub

אם טענת sub חורגת ממגבלת 127 התווים של google.subject, מומלץ להשתמש בפונקציה extract כדי ליצור מזהה נושא – לדוגמה:

google.subject=assertion.sub.extract('/eid1/c/pub/t/{sub_claim}')

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

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

  1. מתחברים למכונה וירטואלית של Azure שהוקצתה לה זהות מנוהלת.

  2. משיגים אסימון גישה מ-Azure Instance Metadata Service ‏(IMDS):

    Bash

    curl \
      "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \
      -H "Metadata: true" | jq -r .access_token
    

    בפקודה הזו נעשה שימוש בכלי jq. כברירת מחדל, הכלי jq זמין ב-Cloud Shell.

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = (Invoke-RestMethod `
      -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" `
      -Headers @{Metadata="true"}).access_token
    Write-Host $SubjectToken
    

    מחליפים את APP_ID_URI ב-URI של מזהה האפליקציה שהגדרתם לאיחוד שירותי אימות הזהויות של עומסי עבודה.

  3. בדפדפן אינטרנט, נכנסים אל https://jwt.ms/ ומדביקים את אסימון הגישה בשדה.

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

בזהויות של שירות, בדרך כלל לא צריך ליצור מיפוי של google.groups או של כל מאפיין מותאם אישית אחר.

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

AWS

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

לדוגמה, בעזרת התנאי הבא אפשר להגביל גישה לתפקידי AWS ולדחות מזהי IAM אחרים:

assertion.arn.startsWith('arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/')

Azure

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

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

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

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

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

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

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

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

המסוף

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

    לדף New workload provider and pool

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

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

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

    AWS

    מגדירים את הגדרות הספק האלה:

    • Select a provider: בוחרים את הספק AWS.
    • Provider name: השם של הספק. השם משמש גם בתור מזהה הספק. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.

    Azure

    מגדירים את הגדרות הספק האלה:

    • Select a provider:בוחרים את הספק OpenID Connect (OIDC).
    • Provider name: השם של הספק. השם משמש גם כמזהה הספק. אי אפשר לשנות את מזהה הספק בשלב מאוחר יותר.
    • Issuer URL: ‏https://sts.windows.net/TENANT_ID. מחליפים את TENANT_ID במזהה הדייר (GUID) של הדייר ב-Microsoft Entra ID.
    • Allowed audiences: ‏ה-URI של מזהה האפליקציה שהשתמשתם בו כשרשמתם את האפליקציה ב-Microsoft Entra ID.
  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. מוסיפים ספק למאגר הזהויות של כוח העבודה:

    AWS

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

    gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \
      --location="global" \
      --workload-identity-pool="POOL_ID" \
      --account-id="ACCOUNT_ID" \
      --attribute-mapping="MAPPINGS" \
      --attribute-condition="CONDITIONS"
    

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

    דוגמה:

    gcloud iam workload-identity-pools providers create-aws example-provider \
      --location="global" \
      --workload-identity-pool="pool-1" \
      --account-id="123456789000" \
      --attribute-mapping="google.subject=assertion.arn"

    Azure

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

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

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

    • PROVIDER_ID: המזהה הייחודי של הספק.
    • POOL_ID: מזהה המאגר.
    • ISSUER_URI: מזהה הדייר (GUID) של הדייר ב-Microsoft Entra ID, שלפעמים מופיע בפורמט https://sts.windows.net/TENANT_ID. ה-URI של המנפיק יכול להשתנות, וכדי למצוא את ה-URI של המנפיק, אפשר לנפות באגים ב-JWT באמצעות JWT.io.
    • APPLICATION_ID_URI: ה-URI של מזהה האפליקציה שהשתמשתם בו כשרשמתם את האפליקציה ב-Microsoft Entra ID.
    • MAPPINGS: רשימה מופרדת בפסיקים של מיפויי המאפיינים שציינתם קודם.
    • CONDITIONS: (אופציונלי) התנאי למאפיין שציינתם קודם.

    דוגמה:

    gcloud iam workload-identity-pools providers create-oidc example-provider \
        --location="global" \
        --workload-identity-pool="pool-1" \
        --issuer-uri="https://sts.windows.net/00000000-1111-2222-3333-444444444444" \
        --allowed-audiences="api://my-app" \
        --attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"

אימות של עומסי עבודה

צריך לבצע את ההוראות האלה פעם אחת לכל עומס עבודה.

מתן הרשאה לעומס העבודה החיצוני לגשת למשאבי 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: הערך של המאפיין בהתאמה אישית במיפוי המאפיינים

הורדה או יצירה של הגדרות אישיות של פרטי הכניסה

ספריות הלקוח ב-Cloud, ‏ה-CLI של gcloud ו-Terraform יכולים להשיג פרטי כניסה חיצוניים באופן אוטומטי, ולהשתמש בהם כדי להתחזות לחשבון שירות. כדי לאפשר לספריות ולכלים להשלים את התהליך הזה, צריך לספק קובץ תצורה של פרטי הכניסה. הקובץ יגדיר את הפרטים הבאים:

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

כדי ליצור קובץ תצורה של פרטי הכניסה:

המסוף

כדי להוריד קובץ תצורה של פרטי הכניסה במסוף Google Cloud :

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

    לדף Workload Identity Pools

  2. מאתרים את מאגר הזהויות של עומסי עבודה עבור ה-IdP שרוצים להשתמש בו ולוחצים עליו.

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

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

    2. בוחרים באפשרות Grant access using federated identities (הענקת גישה באמצעות זהויות מאוחדות) (מומלץ).

    3. לוחצים על הורדה.

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

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

    1. בוחרים באפשרות Connected service accounts.

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

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

  5. בתיבת הדו-שיח Configure your application, בוחרים את הספק שמכיל את הזהויות החיצוניות.

  6. מוסיפים את ההגדרות האלה:

    AWS

    אין דרישות נוספות שצריך להוסיף.

    Azure

    Application ID URL: ה-URI של מזהה האפליקציה באפליקציית Azure

  7. בוחרים באפשרות ‎ Download config‎ כדי להוריד את קובץ פרטי הכניסה, ואז לוחצים על Dismiss.

אם רוצים להשתמש בנקודות הקצה האזוריות של Security Token Service – לדוגמה, https://sts.us-central1.rep.googleapis.com – אפשר לעיין במאמר שימוש בנקודות קצה אזוריות של Security Token Service לשיפור המהימנות.

gcloud

כדי ליצור קובץ תצורה של פרטי הכניסה באמצעות gcloud iam workload-identity-pools create-cred-config:

AWS

כדי ליצור קובץ תצורה של פרטי הכניסה שמאפשר לספרייה לקבל אסימון גישה מהמטא-נתונים של מכונת EC2:

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --aws \
    --sts-location=REGION \
    --output-file=FILEPATH.json

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

  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה
  • POOL_ID: המזהה של מאגר הזהויות של כוח העבודה.
  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של עומסי העבודה.
  • SERVICE_ACCOUNT_EMAIL: אם אתם משתמשים בהתחזות לחשבון שירות, מחליפים את כתובת האימייל של חשבון השירות. אם לא משתמשים בהתחזות לחשבון שירות, לא צריך לציין את הדגל הזה.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: אם אתם משתמשים בהתחזות לחשבון שירות, צריך להחליף את הערך הזה במשך החיים של אסימון הגישה לחשבון השירות בשניות. אם לא ציינתם ערך, הגדרת ברירת המחדל היא שעה אחת. אם לא משתמשים בהתחזות לחשבון שירות, לא צריך לציין את הדגל הזה. כדי לציין משך חיים ארוך יותר משעה אחת, צריך להגדיר את אילוץ המדיניות הארגוניתconstraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • FILEPATH: הקובץ שבו שומרים את התצורה.
  • Region: אופציונלי. מציינים את האזור של נקודות הקצה האזוריות של Security Token Service, אם הן זמינות.

אם משתמשים ב-AWS IMDSv2, צריך להוסיף את הדגל --enable-imdsv2 לפקודה gcloud iam workload-identity-pools create-cred-config:

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --aws \
    --enable-imdsv2 \
    --sts-location=REGION \
    --output-file=FILEPATH.json

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

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION או AWS_DEFAULT_REGION
  • AWS_SESSION_TOKEN (אופציונלי)

ב-CLI ובספריות של gcloud נעשה שימוש במשתני הסביבה ב-AWS כששרת המטא-נתונים של AWS לא זמין.

Azure

כדי ליצור קובץ תצורה של פרטי הכניסה שמאפשר לספרייה לקבל אסימון גישה מ-Azure Instance Metadata Service ‏(IMDS):

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --azure \
    --app-id-uri APPLICATION_ID_URI \
    --sts-location=REGION \
    --output-file=FILEPATH.json

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

  • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר זהויות של עומסי עבודה.
  • POOL_ID: המזהה של מאגר הזהויות של כוח העבודה.
  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של עומסי העבודה.
  • SERVICE_ACCOUNT_EMAIL: אם אתם משתמשים בהתחזות לחשבון שירות, מחליפים את כתובת האימייל של חשבון השירות. אם לא משתמשים בהתחזות לחשבון שירות, לא צריך לציין את הדגל הזה.
  • APPLICATION_ID_URI: ה-URI של מזהה האפליקציה באפליקציית Azure.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: אם משתמשים בהתחזות לחשבון שירות,משך החיים של אסימון הגישה לחשבון השירות בשניות. אם לא ציינתם ערך, הגדרת ברירת המחדל היא שעה אחת. אם לא משתמשים בהתחזות לחשבון שירות, לא צריך להוסיף את הדגל הזה. כדי לציין משך חיים ארוך יותר משעה אחת, צריך להגדיר את אילוץ המדיניות הארגוניתconstraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • FILEPATH: הקובץ שבו שומרים את התצורה.
  • Region: אופציונלי. מציינים את האזור של נקודות הקצה האזוריות של Security Token Service, אם הן זמינות.

שימוש בהגדרות פרטי הכניסה כדי לקבל גישה אל Google Cloud

כדי לאפשר לכלים ולספריות הלקוח להשתמש בהגדרות האישיות של פרטי הכניסה בסביבה שלכם ב-AWS או ב-Azure:

  1. מאתחלים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS ומפנים אותו לקובץ התצורה של פרטי הכניסה:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    כאשר FILEPATH הוא הנתיב היחסי לקובץ התצורה של פרטי הכניסה.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    כאשר FILEPATH הוא הנתיב היחסי לקובץ התצורה של פרטי הכניסה.
  2. משתמשים בספריית לקוח או בכלי שתומכים באיחוד שירותי אימות הזהות של עומסי עבודה, ויכולים למצוא פרטי כניסה באופן אוטומטי:

    C++‎

    ספריות הלקוח של C++‎‏Google Cloud תומכות באיחוד שירותי אימות הזהות של עומסי עבודה החל מגרסה v2.6.0. כדי להשתמש באיחוד שירותי אימות הזהות של עומסי עבודה, צריך ליצור את ספריות הלקוח ב-gRPC בגרסה 1.36.0 ואילך.

    Go

    ספריות לקוח ל-Go תומכות באיחוד שירותי אימות הזהות של עומסי עבודה אם נעשה בהן שימוש במודול golang.org/x/oauth2 בגרסה v0.0.0-20210218202405-ba52d332ba99 ואילך.

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

    cd $GOPATH/src/cloud.google.com/go
    go list -m golang.org/x/oauth2
    

    Java

    ספריות לקוח של Java תומכות באיחוד שירותי אימות הזהות של עומסי עבודה אם הן משתמשות בארטיפקט com.google.auth:google-auth-library-oauth2-http בגרסה 0.24.0 ואילך.

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

    mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
    

    Node.js

    ספריות לקוח של Node.js תומכות באיחוד שירותי אימות הזהות של עומסי עבודה אם הן משתמשות בגרסה 7.0.2 ואילך של חבילת google-auth-library.

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

    npm list google-auth-library
    

    כשיוצרים אובייקט GoogleAuth, אפשר לציין מזהה פרויקט או לאפשר ל-GoogleAuth לאתר את מזהה הפרויקט באופן אוטומטי. כדי לאתר את מזהה הפרויקט באופן אוטומטי, צריך להקצות לחשבון השירות בקובץ התצורה את התפקיד דפדפן (roles/browser) או תפקיד עם הרשאות דומות בפרויקט. לפרטים נוספים, ראו README לחבילת google-auth-library.

    Python

    ספריות לקוח של Python תומכות באיחוד זהויות של עומסי עבודה אם הן משתמשות בגרסה 1.27.0 ואילך של חבילת google-auth.

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

    pip show google-auth
    

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

    gcloud

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

    gcloud auth login --cred-file=FILEPATH.json
    

    מחליפים את FILEPATH בנתיב לקובץ התצורה של פרטי הכניסה.

    ב-CLI של gcloud יש תמיכה באיחוד שירותי אימות הזהות של עומסי עבודה ב-CLI של gcloud בגרסה 363.0.0 ואילך.

    Terraform

    יש תמיכה באיחוד שירותי אימות הזהות של עומסי עבודה אם משתמשים בספקGoogle Cloud בגרסה 3.61.0 ואילך:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 3.61.0"
        }
      }
    }
    

    BQ

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

    gcloud auth login --cred-file=FILEPATH.json
    

    מחליפים את FILEPATH בנתיב לקובץ התצורה של פרטי הכניסה.

    ב-bq, יש תמיכה באיחוד שירותי אימות הזהויות של עומסי עבודה ב-CLI של gcloud בגרסה 390.0.0 ואילך.

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

תרחישים מתקדמים

אימות של עומס עבודה באמצעות API ל-REST

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

  1. מקבלים פרטי כניסה מ-IdP החיצוני:

    AWS

    יוצרים מסמך JSON שמכיל מידע שבדרך כלל כלול בבקשה שנשלחת לנקודת הקצה GetCallerIdentity() ב-AWS, כולל חתימת בקשה תקינה.

    איחוד שירותי אימות הזהות של עומסי עבודה מתייחס למסמך ה-JSON הזה בתור אסימון GetCallerIdentity. האסימון מאפשר לאיחוד שירותי אימות הזהות של עומסי עבודה לאמת את הזהות בלי לחשוף את מפתח הגישה הסודי ל-AWS.

    דוגמה לאסימון GetCallerIdentity:

    {
      "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15",
      "method": "POST",
      "headers": [
        {
          "key": "Authorization",
          "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd"
        },
        {
          "key": "host",
          "value": "sts.amazonaws.com"
        },
        {
          "key": "x-amz-date",
          "value": "20200228T225005Z"
        },
        {
          "key": "x-goog-cloud-target-resource",
          "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider"
        },
        {
          "key": "x-amz-security-token",
          "value": "GizFWJTqYX...xJ55YoJ8E9HNU="
        }
      ]
    }
    

    באסימון נכללים השדות הבאים:

    • url: כתובת ה-URL של נקודת הקצה ב-AWS STS ל-GetCallerIdentity() עם גוף הבקשה הרגיל של GetCallerIdentity() שמצורף כפרמטרים של שאילתה. לדוגמה, https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15. מומלץ להשתמש בנקודות קצה אזוריות של STS ולתכנן תשתית אמינה לעומסי העבודה. מידע נוסף זמין במאמר נקודות קצה אזוריות של AWS STS.
    • method: ה-method של בקשת ה-HTTP: POST
    • headers: הכותרות של בקשות ה-HTTP. הן חייבות לכלול:
      • Authorization: חתימת הבקשה
      • host: שם המארח בשדה url. למשל, sts.amazonaws.com
      • x-amz-date: השעה שבה תשלחו את הבקשה, בפורמט ISO 8601 Basic. בדרך כלל, הערך הזה מוגדר לשעה הנוכחית, והוא משמש למניעה של התקפות שליחה מחדש
      • x-goog-cloud-target-resource: שם המשאב המלא של ספק הזהויות, בלי קידומת https: לדוגמה:
        //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
        
      • x-amz-security-token: אסימון לסשן חובה רק אם אתם משתמשים בפרטי כניסה מאובטחים זמניים.

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

    import json
    import urllib
    
    import boto3
    from botocore.auth import SigV4Auth
    from botocore.awsrequest import AWSRequest
    
    
    def create_token_aws(project_number: str, pool_id: str, provider_id: str) -> None:
        # Prepare a GetCallerIdentity request.
        request = AWSRequest(
            method="POST",
            url="https://sts.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15",
            headers={
                "Host": "sts.amazonaws.com",
                "x-goog-cloud-target-resource": f"//iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/providers/{provider_id}",
            },
        )
    
        # Set the session credentials and Sign the request.
        # get_credentials loads the required credentials as environment variables.
        # Refer:
        # https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html
        SigV4Auth(boto3.Session().get_credentials(), "sts", "us-east-1").add_auth(request)
    
        # Create token from signed request.
        token = {"url": request.url, "method": request.method, "headers": []}
        for key, value in request.headers.items():
            token["headers"].append({"key": key, "value": value})
    
        # The token lets workload identity federation verify the identity without revealing the AWS secret access key.
        print("Token:\n%s" % json.dumps(token, indent=2, sort_keys=True))
        print("URL encoded token:\n%s" % urllib.parse.quote(json.dumps(token)))
    
    
    def main() -> None:
        # TODO(Developer): Replace the below credentials.
        # project_number: Google Project number (not the project id)
        project_number = "my-project-number"
        pool_id = "my-pool-id"
        provider_id = "my-provider-id"
    
        create_token_aws(project_number, pool_id, provider_id)
    
    
    if __name__ == "__main__":
        main()

    מאתחלים את המשתנים הבאים:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request"
    SUBJECT_TOKEN=TOKEN
    

    PowerShell

    $SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request"
    $SubjectToken = "TOKEN"
    

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

    Azure

    מתחברים למכונה וירטואלית של Azure שהוקצתה לה זהות מנוהלת ומקבלים טוקן גישה מ-Azure Instance Metadata Service ‏ (IMDS):

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt"
    SUBJECT_TOKEN=$(curl \
      "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \
      -H "Metadata: true" | jq -r .access_token)
    echo $SUBJECT_TOKEN
    

    בפקודה הזו נעשה שימוש בכלי jq. כברירת מחדל, הכלי jq זמין ב-Cloud Shell.

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = (Invoke-RestMethod `
      -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" `
      -Headers @{Metadata="true"}).access_token
    Write-Host $SubjectToken
    

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

  2. משתמשים בSecurity Token Service API כדי להחליף את פרטי הכניסה באסימון גישה לטווח קצר:

    Bash

    STS_TOKEN=$(curl https://sts.googleapis.com/v1/token \
        --data-urlencode "audience=//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \
        --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
        --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \
        --data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \
        --data-urlencode "subject_token_type=$SUBJECT_TOKEN_TYPE" \
        --data-urlencode "subject_token=$SUBJECT_TOKEN" | jq -r .access_token)
    echo $STS_TOKEN
    

    PowerShell

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
    $StsToken = (Invoke-RestMethod `
        -Method POST `
        -Uri "https://sts.googleapis.com/v1/token" `
        -ContentType "application/json" `
        -Body (@{
            "audience"           = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID"
            "grantType"          = "urn:ietf:params:oauth:grant-type:token-exchange"
            "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token"
            "scope"              = "https://www.googleapis.com/auth/cloud-platform"
            "subjectTokenType"   = $SubjectTokenType
            "subjectToken"       = $SubjectToken
        } | ConvertTo-Json)).access_token
    Write-Host $StsToken
    

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

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

    כדי להשתמש בנקודות קצה אזוריות של Security Token Service, מחליפים את https://sts.googleapis.com/v1/token בערכים הבאים:

     https://sts.REGION.rep.googleapis.com/v1/token 

    מחליפים את REGION בGoogle Cloud מיקום, לדוגמה, us-central1 או europe-west4.

  3. אם אתם משתמשים בהתחזות לחשבון שירות, אתם צריכים להשתמש באסימון מ-Security Token Service כדי להפעיל את ה-method ‏generateAccessToken מ-IAM Service Account Credentials API בשביל לקבל אסימון גישה.

אסימונים לשירותי Cloud Run

כשניגשים לשירות של Cloud Run, צריך להשתמש באסימון מזהה.

Bash

TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \
    -H "Content-Type: text/json; charset=utf-8" \
    -H "Authorization: Bearer $STS_TOKEN" \
    -d @- <<EOF | jq -r .token
    {
        "audience": "SERVICE_URL"
    }
EOF
)
echo $TOKEN

PowerShell

$Token = (Invoke-RestMethod `
    -Method POST `
    -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" `
    -Headers @{ "Authorization" = "Bearer $StsToken" } `
    -ContentType "application/json" `
    -Body (@{
        "audience" = "SERVICE_URL"
    } | ConvertTo-Json)).token
Write-Host $Token

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

  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות.
  • SERVICE_URL: כתובת ה-URL של השירות – לדוגמה, https://my-service-12345-us-central1.run.app. אפשר גם להגדיר אותו לנקודת קצה של שירות בהתאמה אישית. מידע נוסף מופיע במאמר בנושא הסבר על קהלים בהתאמה אישית.

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

כשניגשים לשירות אחר, צריך להשתמש באסימון גישה.

Bash

TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \
    -H "Content-Type: text/json; charset=utf-8" \
    -H "Authorization: Bearer $STS_TOKEN" \
    -d @- <<EOF | jq -r .accessToken
    {
        "scope": [ "https://www.googleapis.com/auth/cloud-platform" ]
    }
EOF
)
echo $TOKEN

PowerShell

$Token = (Invoke-RestMethod `
    -Method POST `
    -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" `
    -Headers @{ "Authorization" = "Bearer $StsToken" } `
    -ContentType "application/json" `
    -Body (@{
        "scope" = , "https://www.googleapis.com/auth/cloud-platform"
    } | ConvertTo-Json)).accessToken
Write-Host $Token

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

  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות.

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