יצירת פרטי כניסה לטווח קצר בשביל חשבון שירות

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

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

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

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

בהתחזות ישירה לחשבון שירות מעורבים שני חשבונות משתמשים:

  • מבצע הקריאה החוזרת (caller)

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

  • חשבון השירות שנושא את ההרשאות

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

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

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

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

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

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

יצירת אסימון גישה לטווח קצר

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

מידע נוסף מופיע במאמר אסימוני גישה.

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

מתן ההרשאות הנדרשות

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

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

חשבון שירות

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

  • חשבון שירות של מבצע הקריאה החוזרת (CALLER_SA)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לתת הרשאות ל-CALLER_SA ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון השירות של מבצע הקריאה החוזרת, CALLER_SA.

    לדוגמה, demo@my-project.iam.gserviceaccount.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון השירות, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_SA: כתובת האימייל של חשבון השירות שמייצג את האפליקציה שמבקשת את האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

פרטי הכניסה של המשתמש

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

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

  • חשבון Google של מבצע הקריאה החוזרת (CALLER_ACCOUNT)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לאפשר ל-CALLER_ACCOUNT ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להעניק ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון Google של מבצע הקריאה החוזרת, CALLER_ACCOUNT.

    לדוגמה, username@google.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון המשתמש, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_ACCOUNT: כתובת האימייל של חשבון המשתמש ששימש לבקשת האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' ( roles/iam.serviceAccountTokenCreator).

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

יצירת אסימון הגישה

אפשר ליצור אסימון גישה ל-OAuth 2.0 באמצעות ה-CLI של gcloud, ה-API ל-REST או באמצעות ספריות הלקוח ב-Cloud וספריות הלקוח של Google API.

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

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

יצירת אסימון גישה מסוג OAuth 2.0 בשביל חשבון השירות שנושא את ההרשאות:

gcloud

  1. מתחברים ל-Google Cloud CLI בתור חשבון Google של מבצע הקריאה החוזרת.

    gcloud auth login CALLER_ACCOUNT
    
  2. מתחזים לחשבון השירות שנושא את ההרשאות כדי ליצור את האסימון.

    הפקודה gcloud auth print-access-token יוצרת אסימון גישה מסוג OAuth 2.0 בשביל חשבון שירות.

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

    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
      • מריצים את הפקודה הבאה:

        Linux‏, macOS או Cloud Shell

        gcloud auth print-access-token --impersonate-service-account=PRIV_SA
        

        Windows‏ (PowerShell)

        gcloud auth print-access-token --impersonate-service-account=PRIV_SA
        

        Windows‏ (cmd.exe)

        gcloud auth print-access-token --impersonate-service-account=PRIV_SA
        

        אמורים לקבל תגובה שדומה לזו:

        WARNING: This command is using service account impersonation. All API calls will be executed as
        [my-sa@my-project.iam.gserviceaccount.com].
        ya29.c.b0AXv0zTPnzTnDV8F8Aj5Fgy46Yf2v_v8eZIoKq7xGpfbpXuy23aQ1693m3gAuE8AZga7w6kdagN7a9bfdDYbdeoGY0CMHOClsCwIdutL7k_RFC672lOCbUgF5hS8Iu2nCA8hle-11LJXBLmaxFmH08ZTBJLuDrWSNd8cYqGYFunSC1K1qLIPBF18tsa0hxVgKPucI8b1A9L8_MK1JGLGcr0n7-zY77_lmbcdODG3NmIbLOGWOutjJgqSO_YoeCKK2QTUZIp5PG7RkKlXWnmYJA9pEahzNoQrs5sWZctc2bia9af_ITzqqlXC9h1Kj5-me6e8rd734MJvpagqYazRk0gGWpMb03XmMGpgPc_FBp4pnX9rGOzW83SNpcDz8zeFO1Q0Bo3N7CuZougjRce0y8I2_4rtw5ME_nV3wrCWa..................................................................................................................................................................................................................................................................................................
        

REST

שיטת 'ה-API של פרטי הכניסה של חשבון השירות' (serviceAccounts.generateAccessToken) יוצרת אסימון גישה מסוג OAuth 2.0 בשביל חשבון שירות.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
  • LIFETIME: משך הזמן עד שיפוג התוקף של אסימון הגישה, בשניות. לדוגמה, 300s.

    כברירת מחדל, משך החיים המקסימלי של אסימון הוא שעה אחת (3,600 שניות). כדי להאריך את משך החיים המקסימלי של האסימונים האלה ל-12 שעות (43,200 שניות), מוסיפים את חשבון השירות למדיניות הארגון שכלול בה אילוץ הרשימה constraints/iam.allowServiceAccountCredentialLifetimeExtension.

שיטת ה-HTTP וכתובת ה-URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken

תוכן בקשת JSON:

{
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

אם הבקשה של generateAccessToken תאושר, גוף התגובה יכלול אסימון גישה מסוג OAuth 2.0 ומועד תפוגה. לאחר מכן אפשר יהיה להשתמש ב-accessToken כדי לאמת בקשה מטעם חשבון השירות, עד שמגיעים לזמן ה-expireTime:

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

יצירת אסימון מזהה של OpenID Connect (OIDC)

אסימונים מזהים מבוססים על מפרט OpenID Connect (OIDC). מספר מוגבל של שירותים ואפליקציות מקבלים אסימונים מזהים.

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

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

מתן ההרשאות הנדרשות

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

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

חשבון שירות

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

  • חשבון שירות של מבצע הקריאה החוזרת (CALLER_SA)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לתת ל-CALLER_SA הרשאות ליצירת פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להקצות ל-CALLER_SA את התפקיד 'יצירת אסימון זהות' ב-OpenID Connect של חשבון שירות (roles/iam.serviceAccountOpenIdTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון השירות של מבצע הקריאה החוזרת, CALLER_SA.

    לדוגמה, demo@my-project.iam.gserviceaccount.com.

  7. בוחרים בתפקיד 'יצירת אסימון זהות' ב-OpenID Connect של חשבון שירות (roles/iam.serviceAccountOpenIdTokenCreator).
  8. כדי להקצות את התפקיד לחשבון השירות, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_SA: כתובת האימייל של חשבון השירות שמייצג את האפליקציה שמבקשת את האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. משנים את מדיניות ההרשאה כדי להקצות ל-CALLER_SA את התפקיד 'יצירת אסימון זהות' ב-OpenID Connect של חשבון שירות (roles/iam.serviceAccountOpenIdTokenCreator).

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

פרטי הכניסה של המשתמש

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

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

  • חשבון Google של מבצע הקריאה החוזרת (CALLER_ACCOUNT)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לאפשר ל-CALLER_ACCOUNT ליצור פרטי כניסה לטווח קצר ל-PRIV_SA, צריך להקצות ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימון זהות' ב-OpenID Connect בחשבון שירות (roles/iam.serviceAccountOpenIdTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון Google של מבצע הקריאה החוזרת, CALLER_ACCOUNT.

    לדוגמה, username@google.com.

  7. בוחרים בתפקיד 'יצירת אסימון זהות' ב-OpenID Connect של חשבון שירות (roles/iam.serviceAccountOpenIdTokenCreator).
  8. כדי להקצות את התפקיד לחשבון המשתמש, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_ACCOUNT: כתובת האימייל של חשבון המשתמש ששימש לבקשת האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountOpenIdTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. משנים את מדיניות ההרשאה כדי להקצות ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימון זהות' ב-OpenID Connect של חשבון שירות ( roles/iam.serviceAccountOpenIdTokenCreator).

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountOpenIdTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountOpenIdTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

יצירת האסימון המזהה

אפשר ליצור אסימון מזהה של OpenID Connect (OIDC), באמצעות ה-CLI של gcloud, ה-API ל-REST או באמצעות ספריות הלקוח ב-Cloud וספריות הלקוח של Google API.

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

אסימונים מזהים OIDC תקפים לשעה אחת (3,600 שניות).

יוצרים אסימון מזהה OIDC בחתימה של Google בשביל חשבון השירות שנושא את ההרשאות:

gcloud

  1. מתחברים ל-Google Cloud CLI בתור חשבון Google של מבצע הקריאה החוזרת.

    gcloud auth login CALLER_ACCOUNT
    
  2. מתחזים לחשבון השירות שנושא את ההרשאות כדי ליצור את האסימון.

    הפקודה gcloud auth print-identity-token יוצרת אסימון מזהה OIDC לחשבון שירות.

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

    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • AUDIENCE_NAME: הקהל של האסימון, בדרך כלל כתובת ה-URL של האפליקציה או השירות שישתמש באסימון כדי לגשת אליהם.
      • מריצים את הפקודה הבאה:

        Linux‏, macOS או Cloud Shell

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
        

        Windows‏ (PowerShell)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
        

        Windows‏ (cmd.exe)

        gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
        

        אמורים לקבל תגובה שדומה לזו:

        WARNING: This command is using service account impersonation. All API calls will be executed as
        [my-sa@my-project.iam.gserviceaccount.com].
        eyJhbGciOiJSUzI1NiIsImtpZDNhMDg4ZDRmZmMjJkYTVmZTM5MDZjY2MiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ3d3cuZXhhbXBsJhenAiOiIxMTYzwNDYyMDk0ODIiLCJleHAiOjE2NTQ4ODU0MzEsImlhdCI6MTY1NDg4MTgzMSwiaXN6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIMDQ2MjA5NDgyIn0.F7mu8IHj5VQdu7ItFrnYAKyGd7YqXuOP_rFLc98q8BaFBycAF1zAQnSnwqnSUXba0UK9PDT_-IOry68qLwBObz4XlX9lk0ehpN0O0W9FcFToKLB6wefXXPd4h7xtuPe5KzmpSOqj2Qqv34HriGw00Nqd-oGSgNY_lZ4wGEf4rT4oQa_kEcrY57Q2G6pwd769BhgeFwoLi5aK_Cv2kvf_zfMszC-xlkP9zwWQ8XinJBwe-qcQBa4NTgrbueNtXsEjccBS366zmw
        

REST

שיטת 'ה-API של פרטי הכניסה של חשבון השירות' (serviceAccounts.generateIdToken) יוצרת אסימון מזהה מסוג OIDC בשביל חשבון שירות.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
  • AUDIENCE_NAME: הקהל של האסימון, בדרך כלל כתובת ה-URL של האפליקציה או השירות שישתמש באסימון כדי לגשת אליהם.

שיטת ה-HTTP וכתובת ה-URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken

תוכן בקשת JSON:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

אם הבקשה של generateId תאושר, גוף התגובה יכלול אסימון מזהה שתקף לשעה אחת. לאחר מכן אפשר יהיה להשתמש ב-token כדי לאמת בקשה מטעם חשבון השירות:

{
  "token": "eyJ0eXAi...NiJ9"
}

יצירת ‎(JWT) JSON Web Token בחתימה עצמית

אפשר להשתמש ב-JSON Web Tokens ‏(JWT) בחתימה עצמית במגוון תרחישים:

  • אימות ל-API שנפרס באמצעות API Gateway.
  • אימות קריאה ל-Google API כפי שמתואר במדריך האימות של Google.
  • תקשורת מאובטחת בין האפליקציות שלך. בתרחיש הזה, אפליקציה אחת יכולה לחתום על אסימון שאפליקציה אחרת יכולה לבדוק למטרות אימות.
  • התייחסות לחשבון שירות כספק זהויות באמצעות חתימה על JWT שמכיל הצהרות שרירותיות על משתמש, חשבון או מכשיר.

כדי ליצור JWT, מבצעים את הפעולות הבאות:

מתן ההרשאות הנדרשות

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

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

חשבון שירות

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

  • חשבון שירות של מבצע הקריאה החוזרת (CALLER_SA)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לתת הרשאות ל-CALLER_SA ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון השירות של מבצע הקריאה החוזרת, CALLER_SA.

    לדוגמה, demo@my-project.iam.gserviceaccount.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון השירות, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_SA: כתובת האימייל של חשבון השירות שמייצג את האפליקציה שמבקשת את האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

פרטי הכניסה של המשתמש

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

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

  • חשבון Google של מבצע הקריאה החוזרת (CALLER_ACCOUNT)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לאפשר ל-CALLER_ACCOUNT ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להעניק ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון Google של מבצע הקריאה החוזרת, CALLER_ACCOUNT.

    לדוגמה, username@google.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון המשתמש, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_ACCOUNT: כתובת האימייל של חשבון המשתמש ששימש לבקשת האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' ( roles/iam.serviceAccountTokenCreator).

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

יצירת ה-JWT

יצירת JWT בחתימה עצמית:

REST

שיטת 'ה-API של פרטי הכניסה של חשבון השירות' (serviceAccounts.signJwt) חותמת על JWT באמצעות מפתח פרטי בניהול מערכת של חשבון שירות.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
  • JWT_PAYLOAD: המטען הייעודי של JWT לחתימה שהוא אובייקט JSON שמכיל קבוצת הצהרות של JWT. מוסיפים את ההצהרות שנחוצות לתרחיש הרצוי, ושעומדות בדרישות האימות של השירות שרוצים לבצע אליו קריאה. אם מבצעים קריאה ל-Google API, מומלץ לעיין ב מדריך האימות של Google כדי לראות מהן דרישות ההצהרה.

    התוקף של ההצהרה exp (זמן התפוגה) צריך להיות בטווח של עד 12 שעות קדימה. כשמבצעים קריאה ל-Google API, צריך להגדיר את ההצהרהexp לא יותר משעה אחת קדימה.

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

    { \"iss\": \"PRIV_SA", \"sub\": \"PRIV_SA\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

שיטת ה-HTTP וכתובת ה-URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signJwt

תוכן בקשת JSON:

{
  "payload": "JWT_PAYLOAD"
}

כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

אם הבקשה של signJwt תאושר, גוף התגובה יכלול JWT חתום ומזהה של מפתח החתימה ששימש לחתימה על ה-JWT. אפשר להשתמש בערך signedJwt כאסימון למוכ"ז כדי לאמת בקשה באופן ישיר מטעם חשבון השירות. האסימון תקף עד לזמן התפוגה שצוין בבקשה:

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

יצירת אובייקט בינארי בחתימה עצמית (blob)

אובייקטים בינאריים בחתימה עצמית, או blobs, משמשים לשידור נתונים בינאריים כך שמקור הנתונים ידוע (כיוון שה-blob הוא בחתימה עצמית). אפשר להשתמש ב-blobs כדי ליצור חתימות, אובייקט ב-Cloud Storage שנדרש לתהליכי אימות שונים, כולל כתובות URL חתומות. למידע על חתימות, אפשר לעיין במשאבי העזרה של Cloud Storage.

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

מתן ההרשאות הנדרשות

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

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

חשבון שירות

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

  • חשבון שירות של מבצע הקריאה החוזרת (CALLER_SA)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לתת הרשאות ל-CALLER_SA ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון השירות של מבצע הקריאה החוזרת, CALLER_SA.

    לדוגמה, demo@my-project.iam.gserviceaccount.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון השירות, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_SA: כתובת האימייל של חשבון השירות שמייצג את האפליקציה שמבקשת את האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "serviceAccount:CALLER_SA"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwXhCB4eyjY=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_SA את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:CALLER_SA"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

פרטי הכניסה של המשתמש

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

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

  • חשבון Google של מבצע הקריאה החוזרת (CALLER_ACCOUNT)

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

  • חשבון שירות שנושא את ההרשאות (PRIV_SA)

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

כדי לאפשר ל-CALLER_ACCOUNT ליצור פרטי כניסה לטווח קצר בשביל PRIV_SA, צריך להעניק ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) ב-PRIV_SA.

הקצאת התפקיד הנדרש ב-PRIV_SA:

מסוף

  1. נכנסים לדף Service Accounts במסוף Google Cloud.

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.
  3. לוחצים על כתובת האימייל של חשבון השירות שנושא את ההרשאות, PRIV_SA.
  4. לוחצים על הכרטיסייה Permissions.
  5. תחת Principals with access to this service account לוחצים על Grant Access.
  6. מזינים את כתובת האימייל של חשבון Google של מבצע הקריאה החוזרת, CALLER_ACCOUNT.

    לדוגמה, username@google.com.

  7. בוחרים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).
  8. כדי להקצות את התפקיד לחשבון המשתמש, לוחצים על Save.

gcloud

הפקודה gcloud iam service-accounts add-iam-policy-binding מקצה תפקיד בחשבון שירות.

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

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון.
  • CALLER_ACCOUNT: כתובת האימייל של חשבון המשתמש ששימש לבקשת האסימון לטווח קצר.

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

Linux‏, macOS או Cloud Shell

gcloud iam service-accounts add-iam-policy-binding PRIV_SA \
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (PowerShell)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA `
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

Windows‏ (cmd.exe)

gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^
    --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json

אמורים לקבל תגובה שדומה לזו:

Updated IAM policy for serviceAccount [PRIV_SA].
{
  "bindings": [
    {
      "members": [
        "user:CALLER_ACCOUNT"
      ],
      "role": "roles/iam.serviceAccountTokenCreator"
    }
  ],
  "etag": "BwX1ZbefjXU=",
  "version": 1
}

REST

  1. צריך לקרוא את מדיניות ההרשאה ל-PRIV_SA:

    השיטה serviceAccounts.getIamPolicy מקבלת מדיניות הרשאה של חשבון שירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

    אמורה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

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

  2. צריך לשנות את מדיניות ההרשאה כדי להקצות ל-CALLER_ACCOUNT את התפקיד 'יצירת אסימונים בחשבון שירות' ( roles/iam.serviceAccountTokenCreator).

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

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "user:CALLER_ACCOUNT"
          ]
        }
      ]
    }
    
  3. כתיבת מדיניות ההרשאה המעודכנת:

    השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאה מעודכנת לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב-Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
    • POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את גרסת המדיניות העדכנית ביותר, שהיא גרסה 3 של המדיניות. פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן קבלת מדיניות.
    • POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.

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

      {
        "version": 1,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "role": "roles/serviceAccountAdmin",
            "members": [
              "user:admin@example.com"
            ]
          },
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "user:CALLER_ACCOUNT"
            ]
          }
        ]
      }
      

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

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

יצירת blob בחתימה עצמית

יצירת blob בחתימה עצמית לחשבון השירות שנושא את ההרשאות:

REST

שיטת 'ה-API של פרטי הכניסה של חשבון השירות' (serviceAccounts.signBlob) חותמת על blob באמצעות מפתח פרטי בניהול מערכת של חשבון שירות.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PRIV_SA: כתובת האימייל של חשבון השירות שנושא את ההרשאות שבשבילו נוצר האסימון לטווח קצר.
  • BLOB_PAYLOAD: מחרוזת מקודדת של base64 בבייטים. לדוגמה, VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu.

שיטת ה-HTTP וכתובת ה-URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob

תוכן בקשת JSON:

{
  "payload": "BLOB_PAYLOAD"
}

כדי לשלוח את הבקשה צריך להרחיב את אחת מהאפשרויות הבאות:

אם הבקשה של signBlob תאושר, גוף התגובה יכלול blob חתום ומזהה של מפתח החתימה ששימש לחתימה על ה-blob. אפשר להשתמש בערך signedBlob כאסימון למוכ"ז כדי לאמת בקשה באופן ישיר מטעם חשבון השירות. האסימון תקף עד שיפוג התוקף של המפתח הפרטי בניהול מערכת של חשבון השירות. המזהה של המפתח הזה הוא הערך של השדה keyId בתגובה.

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}