אם מגדירים חשבון שירות משויך עם פרטי הכניסה המתאימים, אפשר להשתמש ב-Cloud Scheduler כדי לקרוא ליעדי HTTP שנדרש אימות כדי לגשת אליהם.
הגדרה של חשבון שירות
חשבון שירות משמש בדרך כלל אפליקציה או עומס עבודה, והוא מזוהה באמצעות כתובת האימייל הייחודית שלו.
אפליקציות יכולות להשתמש בחשבונות שירות כדי לבצע קריאות מורשות ל-API על ידי אימות כחשבון השירות עצמו, וגישה לכל המשאבים שחשבון השירות מורשה לגשת אליהם.
הדרך הנפוצה ביותר לאפשר לאפליקציה לבצע אימות כחשבון שירות היא לצרף חשבון שירות למשאב שמפעיל את האפליקציה. לאחר מכן תוכלו להקצות לחשבון השירות תפקידים בניהול הזהויות והרשאות הגישה (IAM) כדי לאפשר לו לגשת Google Cloud למשאבים.
אם עדיין אין לכם חשבון שירות שבו אתם רוצים להשתמש למשימות של Cloud Scheduler עם יעדי HTTP, אתם צריכים ליצור חשבון שירות חדש. חשוב לזכור:
חשבון השירות צריך להיות שייך לפרויקט שבו נוצרת המשימה של Cloud Scheduler.
אל תשתמשו בסוכן השירות של Cloud Scheduler (
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). אי אפשר להשתמש בו למטרה הזו.אל תבטלו את התפקיד 'סוכן שירות של Cloud Scheduler' (
roles/cloudscheduler.serviceAgent) מסוכן השירות של Cloud Scheduler בפרויקט. הפעולה הזו תגרום ל403תגובות לנקודות קצה שדורשות אימות, גם אם לחשבון השירות של המשימה יש את התפקיד המתאים.
אם היעד נמצא בתוך Google Cloud, צריך להקצות את תפקידי ה-IAM הנדרשים לחשבון השירות. כל שירות בתוך Google Cloud דורש תפקיד ספציפי, והשירות המקבל מאמת אוטומטית את האסימון שנוצר. לדוגמה, בשביל Cloud Run ופונקציות Cloud Run מהדור השני, צריך להעניק את התפקיד
Cloud Run Invoker.כדי לקבל את ההרשאה שנדרשת כדי לצרף חשבון שירות למשאב, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות. התפקיד המוגדר מראש הזה כולל את ההרשאהiam.serviceAccounts.actAs, שנדרשת כדי לצרף חשבון שירות למשאב. (אם אתם יצרתם את חשבון השירות, ההרשאה הזו מוענקת לכם באופן אוטומטי).בשלב הקודם, אם יצרתם במיוחד חשבון שירות כדי להפעיל את השירות שהמשימה של Cloud Scheduler מכוונת אליו, אתם יכולים לפעול לפי העיקרון של הרשאות מינימליות על ידי קישור החשבון וההרשאה להפעיל אותו לשירות היעד:
המסוף
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב-Google Cloud .
עוברים לדף של סוג המשאב שרוצים להפעיל. לדוגמה, אם אתם מפעילים שירות Cloud Run, עוברים לדף שבו מופיעה רשימה של שירותי Cloud Run.
מסמנים את התיבה שמימין לשירות שרוצים להפעיל. (לא לוחצים על השירות עצמו).
לוחצים על הכרטיסייה Permissions (הרשאות).
אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel > Permissions.
לוחצים על Add principal.
בשדה New principals, מזינים את כתובת האימייל של חשבון השירות שיצרתם.
ברשימה Select a role, בוחרים את התפקיד שרוצים להקצות.
כדי לשמור על העיקרון של הרשאות מינימליות, כדאי לבחור תפקיד שמכיל רק את ההרשאות שהחשבון הראשי צריך.
לוחצים על Save.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLEמחליפים את מה שכתוב בשדות הבאים:
-
RESOURCE_TYPE: סוג המשאב של היעד. לדוגמה,runליעד Cloud Run. -
RESOURCE_ID: המזהה של היעד. לדוגמה, שם השירות של יעד Cloud Run. -
PRINCIPAL: המזהה של חשבון השירות. הפורמט הוא:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. לדוגמה,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com. -
ROLE: שם התפקיד שנדרש בשירות היעד כדי להפעיל אותו. לדוגמה,roles/run.invokerעבור יעד של פונקציית Cloud Run או פונקציית Cloud Run מהדור השני. - פרמטרים אופציונליים אחרים מתוארים במדריך העזר לשורת הפקודה gcloud.
דוגמאות:
מקצים לחשבון השירות
my-service-account@my-project.iam.gserviceaccount.comאת תפקיד ה-IAM Cloud Run Invoker (roles/run.invoker) בשירות Cloud Runmy-service:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invokerמקצים לחשבון השירות
my-service-account@my-project.iam.gserviceaccount.comאת תפקיד ה-IAM Cloud Run Invoker (roles/run.invoker) שנדרש לפונקציות Cloud Run מהדור השני בפונקציית Cloud Runmy-gen2-function:gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker \ --gen2
דוגמה לשימוש ב-Terraform כדי ליצור חשבון שירות עם הרשאה להפעיל שירות Cloud Run מופיעה במאמר יצירת חשבון שירות ל-Cloud Scheduler.
אם היעד שלכם הוא מחוץ ל- Google Cloud, השירות המקבל חייב לאמת את האסימון באופן ידני.
סוכן השירות שמוגדר כברירת מחדל ב-Cloud Scheduler מוגדר אוטומטית כשמפעילים את Cloud Scheduler API, אלא אם הפעלתם אותו לפני 19 במרץ 2019. במקרה כזה, אתם צריכים להעניק את התפקיד של סוכן השירות ב-Cloud Scheduler. כך הוא יוכל ליצור אסימוני כותרת בשם חשבון השירות שלכם כדי לבצע אימות ליעד.
יצירת משימה של Cloud Scheduler שמשתמשת באימות
כדי לבצע אימות בין Cloud Scheduler לבין יעד HTTP, Cloud Scheduler יוצר אסימון כותרת על סמך חשבון השירות של הלקוח, שמזוהה באמצעות כתובת האימייל שלו, ושולח אותו ליעד באמצעות HTTPS.
אפשר להשתמש באסימון מזהה (OIDC) או באסימון OAuth (גישה). בדרך כלל משתמשים ב-OIDC חוץ מממשקי Google API שמארחים ב-*.googleapis.com, כי ממשקי ה-API האלה מצפים לאסימון OAuth.
כדי ליצור משימה ב-Cloud Scheduler שמשתמשת באימות, צריך להוסיף את סוג האסימון ואת כתובת האימייל שמזהה את חשבון השירות של הלקוח כשיוצרים את המשימה:
המסוף
במסוף Google Cloud , עוברים לדף Cloud Scheduler.
לוחצים על Create job (יצירת משימה).
בשדה Name (שם), מזינים שם לעבודה שיהיה ייחודי לפרויקט. שימו לב: אי אפשר להשתמש מחדש בשם של משימה בפרויקט, גם אם מוחקים את המשימה המשויכת.
ברשימה Region, בוחרים אזור לעבודה.
מגדירים תדירות ואזור זמן לעבודה. המחרוזת שאתם מציינים כאן יכולה להיות כל מחרוזת שתואמת ל-unix-cron.
לוחצים על Continue.
ברשימה סוג היעד, בוחרים באפשרות HTTP.
מציינים כתובת URL ושיטת HTTP.
ברשימה Auth header (כותרת אימות), בוחרים את סוג הטוקן. בדרך כלל משתמשים באסימון OIDC חוץ מממשקי Google API שמארחים ב-
*.googleapis.com, כי בממשקי ה-API האלה נדרש אסימון OAuth.ברשימה Service account, בוחרים את כתובת האימייל בחשבון השירות.
אופציונלי: מציינים קהל שמגביל את הנמענים של אסימון OIDC. בדרך כלל, כתובת ה-URL של היעד של העבודה ללא פרמטרים של כתובת ה-URL. אם לא מציינים כתובת URL, המערכת משתמשת בכתובת ה-URL המלאה כקהל, כולל פרמטרים של בקשות.
מגדירים את ההגדרות האופציונליות.
לוחצים על יצירה.
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
מחליפים את מה שכתוב בשדות הבאים:
-
JOB_ID: שם ייחודי למשימה בפרויקט. שימו לב: אי אפשר להשתמש מחדש בשם של משימה בפרויקט, גם אם מוחקים את המשימה המשויכת. -
FREQUENCY: המרווח או התדירות שבהם המשימה תפעל. לדוגמה,every 3 hoursאוevery 10 mins. המחרוזת שאתם מציינים כאן יכולה להיות כל מחרוזת שתואמת ל-unix-cron. -
URI: כתובת ה-URL המוגדרת במלואה של נקודת הקצה. -
SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות. בדרך כלל משתמשים בטוקן OIDC חוץ מממשקי API של Google שמארחים ב-*.googleapis.com, כי ממשקי ה-API האלה מצפים לטוקן OAuth. (אפשר להשתמש בדגל--oauth-service-account-emailבמקום זאת כדי להגדיר סוג של אסימון OAuth). - פרמטרים אופציונליים אחרים מתוארים במדריך העזר לשורת הפקודה gcloud.
איך נותנים את התפקיד 'סוכן השירות של Cloud Scheduler'
חלק מהשירותים של Google Cloud Google Cloud צריכים גישה למשאבים שלכם כדי שיוכלו לפעול בשמכם. כדי לתת מענה לצורך הזה, Google Cloud יוצרת ומנהלת חשבונות שירות שנקראים סוכני שירות, ומוקצים להם תפקידים באופן אוטומטי כשמפעילים שירותים של Google Cloudומשתמשים בהם.
סוכן השירות של Cloud Scheduler צריך את התפקיד Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent). ללא התפקיד הזה, משימות Cloud Scheduler נכשלות. אפשר להעניק את התפקיד לסוכן השירות של Cloud Scheduler באופן ידני. כתובת האימייל של סוכן השירות היא בפורמט הבא:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
צריך להקצות את התפקיד רק אם מתקיים אחד מהתנאים הבאים:
- הפעלתם את Cloud Scheduler API לפני 19 במרץ 2019
- הסרת את התפקיד Cloud Scheduler Service Agent מסוכן השירות
כדי לוודא שסוכן השירות של Cloud Scheduler מוגדר בפרויקט ושהוקצה לו התפקיד Cloud Scheduler Service Agent, אפשר לראות את הרשאות הגישה הנוכחיות של הפרויקט. שימו לב: אם משתמשים במסוף Google Cloud כדי לראות את הגישה לפרויקט, צריך לסמן את התיבה Include Google-provided role grants.
במאמר איך יוצרים סוכני שירות ומעניקים להם תפקידים מוסבר איך מקצים תפקיד לסוכן השירות.
המאמרים הבאים
איך מבצעים אימות ב-Cloud Scheduler באופן פרוגרמטי