בדף הזה מפורטות הצעות לאבטחת יצירה והגדרה של תורים. העיקרון הוא להגביל את השימוש בשיטות לניהול התור לקבוצה קטנה של אנשים או ישויות. בארגונים גדולים, יכול להיות שיהיה צורך להשתמש בחשבון שירות כדי להריץ תוכנה שמבטיחה הגדרה נכונה של התור.
הרעיון הכללי הוא לחלק את המשתמשים ואת הישויות האחרות לשלוש קטגוריות:
- אדמינים של תורים – למשתמשים בקבוצה הזו יש הרשאה להתקשר לשיטות ניהול של תורים ב-Cloud Tasks, או להעלות קבצים מסוג
queue.yaml. הקבוצה הזו מוגבלת למספר קטן מאוד של משתמשים, כדי לצמצם את הסיכון לשיבוש הגדרת התור, במיוחד בגלל ערבוב לא מכוון של שיטות לניהול תורים שלqueue.yamlו-Cloud Tasks. - Cloud Tasks Workers – למשתמשים בקבוצה הזו יש הרשאה לבצע אינטראקציות נפוצות עם Cloud Tasks, כמו הוספת משימות לתור והוצאת משימות מהתור. אסור להם להפעיל שיטות לניהול תורים של Cloud Tasks.
- App Engine Deployers – בפרויקטים שיש בהם אפליקציות App Engine, למשתמשים בקבוצה הזו יש הרשאה לפרוס את האפליקציה. אין להם הרשאה להעלות קבצים מסוג
queue.yamlאו לבצע קריאות ל-Cloud Tasks API, וכך האדמינים של התור יכולים לאכוף את המדיניות המתאימה.
בסכימה הזו, משתמשים שהם אדמינים של תורים לא צריכים להיות גם עובדים ב-Cloud Tasks, כי זה יבטל את המטרה של ההפרדה.
אם בפרויקט נעשה שימוש רק בשיטות לניהול תורים של Cloud Tasks, יכול להיות שיהיה הגיוני שאדמינים של תורים לא יהיו גם מפריסים של App Engine, כי זה יאפשר להעלות קובץ queue.yaml שגוי.
פרויקטים וארגונים קטנים
בפרויקטים קטנים ובארגונים קטנים אפשר להקצות תפקידים בניהול הזהויות והרשאות הגישה (IAM) ישירות למשתמשים כדי להוסיף אותם לקבוצות שלמעלה. האפשרות הזו מתאימה לצוותים שמעדיפים הגדרה פשוטה או שמבצעים שינויים בהגדרת התור או פריסות של אפליקציות App Engine באופן ידני.
מוסיפים משתמשים לקבוצות האלה באופן הבא:
מנהל תור
כאדמינים של פרויקט, אתם יכולים להקצות את התפקיד
cloudtasks.queueAdminלמשתמשים שמורשים לבצע קריאות ל-API לניהול תורים של Cloud Tasks או להעלות קבצים מסוגqueue.yaml.gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/cloudtasks.queueAdmin
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט EMAIL: כתובת האימייל של המשתמש שהוא חבר בקבוצה
-
כמשתמש עם תפקיד
cloudtasks.queueAdmin, בהתאם לשיטות המומלצות שלמעלה, בוחרים אחת מהשיטות הבאות לשינוי הגדרת התור.משתמשים ב-Cloud Tasks API כדי לשנות את הגדרת התור.
העלאה של
queue.yamlבאמצעותgcloud:gcloud app deploy queue.yaml
Cloud Tasks Worker
לעתים קרובות יש הרבה משתמשים שיכולים ליצור אינטראקציה עם Cloud Tasks, ולכן אפשר להקצות תפקידים לחשבונות שירות במקום למשתמשים פרטיים. שימוש מהסוג הזה נפוץ בסביבת ייצור. מידע נוסף זמין במאמר פרויקטים וארגונים גדולים.
כאדמינים של פרויקט, אתם יכולים להקצות תפקידים למשתמשים שמורשים ליצור אינטראקציה עם Cloud Tasks אבל לא לשנות את הגדרות התור:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
מחליפים את
PROJECT_IDבמזהה הפרויקט.
משתמשים עם אחד או יותר מהתפקידים שצוינו למעלה יכולים ליצור אינטראקציה עם Cloud Tasks API.
App Engine Deployer
בתור אדמינים של פרויקטים, אתם יכולים להקצות תפקידים למשתמשים שמורשים לפרוס אפליקציות של App Engine, אבל לא מורשים לשנות את הגדרות התור או ליצור אינטראקציה עם משימות:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/storage.admin
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט EMAIL: כתובת האימייל של המשתמש שהוא חבר בקבוצה
-
כמשתמש עם התפקידים שצוינו למעלה, פורסים אפליקציית App Engine.
gcloud app deploy app.yaml
פרויקטים וארגונים גדולים
בפרויקטים גדולים ובארגונים גדולים אפשר להשתמש בחשבונות שירות כדי להפריד בין תפקידים ואחריות. ההגדרה הזו מתאימה לצוותים עם תשתית מורכבת לשינוי הגדרות התור, ואולי גם לפריסת אפליקציות של App Engine.
כדי לפעול לפי העיקרון של הרשאות מינימליות ולפשט את ניהול הגישה, ההוראות האלה מתבססות על התחזות לחשבון שירות. מידע נוסף על דוגמת עיצוב זו מופיע במאמר שימוש בהתחזות לחשבון שירות במאמרי העזרה של Google Cloud .
בהמשך מפורטות הוראות להגדרת חשבונות השירות האלה.
מנהל תור
בתור אדמין בפרויקט, יוצרים את חשבון השירות.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
מקצים לחשבון השירות את התפקיד
cloudtasks.queueAdminכדי שיוכל להעלות קובציqueue.yamlולבצע קריאות ל-API לניהול תורים של Cloud Tasks.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.queueAdmin
מחליפים את
PROJECT_IDבמזהה הפרויקט.מאפשרים באופן סלקטיבי התחזות לחשבון השירות 'אדמין של תור' שיצרתם.
בדרך כלל מדובר בקבוצה קטנה של ישויות שפועלות כאדמינים של התור. מקצים לחשבונות המשתמשים האלה את התפקיד
iam.serviceAccountTokenCreatorבחשבון השירות 'אדמין של תור' שיצרתם. הוראות מפורטות מופיעות במאמר איך נותנים או מבטלים תפקידים בודדים במסמכי ה-IAM.פועלים לפי השיטות המומלצות שמתוארות במאמר שימוש בניהול תורים או בקובץ queue.yaml, ובוחרים אחת מהשיטות הבאות לשינוי הגדרת התור:
שימוש ב-Cloud Tasks כדי לשנות את הגדרות התור.
העלאה
queue.yamlבאמצעות ה-CLI של gcloud
Cloud Tasks Worker
בתור אדמין בפרויקט, יוצרים את חשבון השירות.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
נותנים לחשבון השירות תפקידים כדי שהוא יוכל לבצע אינטראקציה עם Cloud Tasks, אבל לא יוכל לשנות את הגדרות התור.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
מחליפים את
PROJECT_IDבמזהה הפרויקט.מתן הרשאה סלקטיבית להתחזות לחשבון השירות 'Cloud Tasks Worker' שיצרתם.
לחשבונות ראשיים שפועלים עם Cloud Tasks, צריך להעניק את התפקיד
iam.serviceAccountTokenCreatorבחשבון השירות 'Cloud Tasks Worker' שיצרתם. כדי ללמוד איך, ראו הענקת או ביטול תפקיד יחיד במאמרי העזרה בנושא IAM.
App Engine Deployer
בתור אדמין בפרויקט, יוצרים את חשבון השירות.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
מקצים תפקידים לחשבון השירות כדי שהוא יוכל לפרוס אפליקציות של App Engine אבל לא
queue.yaml.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/storage.admin
מחליפים את
PROJECT_IDבמזהה הפרויקט.מאפשרים באופן סלקטיבי התחזות לחשבון השירות 'App Engine Deployer' שיצרתם.
כדי לאפשר לחשבונות משתמשים לפרוס שירותי App Engine, צריך להעניק להם את התפקיד
iam.serviceAccountTokenCreatorבחשבון השירות 'App Engine Deployer' שיצרתם. כדי ללמוד איך, ראו הענקת או ביטול תפקיד יחיד במסמכי התיעוד של IAM.
הגבלת הגישה לתורים בודדים
אם יש לכם כמה תורים בפרויקט ואתם רוצים להגביל את הגישה לתורים ספציפיים, אתם יכולים להשתמש במדיניות IAM ברמת התור במקום ברמת הפרויקט. כדי להגביל את הגישה לפי תור, משתמשים בפקודה gcloud tasks queues add-iam-policy-binding. לדוגמה:
gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \ --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
מחליפים את מה שכתוב בשדות הבאים:
-
QUEUE_NAME: השם של התור -
LOCATION: המיקום של התור -
PROJECT_ID: מזהה הפרויקט
המאמרים הבאים
- חשבונות שירות
- הסבר על חשבונות שירות
- ניהול הגישה לפרויקטים, לתיקיות ולארגונים
- יצירה וניהול של חשבונות שירות
- שימוש בהתחזות לחשבון שירות