כמו בכל Google Cloud המוצרים, Identity and Access Management (ניהול זהויות והרשאות גישה, IAM) מגן על Cloud Deploy על ידי שליטה בפעולות שמשתמשים מאומתים וחשבונות שירות יכולים לבצע.
במאמר הזה מתוארים חלק מהתכונות של IAM, ומופיעות בו הוראות להגנה על משלוחי האפליקציות שמנוהלים באמצעות Cloud Deploy. ריכזנו כאן כמה דרכים ספציפיות להגבלת הגישה לפעולות ולמשאבים ב-Cloud Deploy:
לפני שמתחילים
כדאי לקרוא ולהבין את המושגים הבסיסיים של IAM.
מידע על תכונות מתקדמות של IAM
בנוסף לתפקידים ולהרשאות, Cloud Deploy משתמש בתכונות הבאות של IAM כדי לספק את אמצעי הבקרה האלה:
מידע על מדיניות IAM
מדיניות IAM היא אוסף של קישורים ומטא-נתונים. קישור התפקיד מעניק תפקיד יחיד לחשבון משתמש אחד או יותר (משתמשים, קבוצות או חשבונות שירות), וגם תנאים תלויי הקשר ספציפיים שקובעים אם הקישור ייכנס לתוקף.
מידע נוסף על מדיניות IAM מופיע במאמר הסבר על מדיניות.
מידע על תנאים ב-IAM
באמצעות תנאי IAM, אתם יכולים לשלוט בגישה למשאבים ולפעולות ב-Cloud Deploy על סמך תנאים שמחושבים בזמן ריצה. לדוגמה, אתם יכולים להגביל את המבצע לקהל יעד מסוים כך שהוא יהיה זמין רק במהלך חלון זמן ספציפי.
מידע על מאפייני API
כשיוצרים תנאים ב-IAM, אפשר להפנות אל מאפייני API כדי לקבל מידע בזמן ריצה על בקשה. לדוגמה, אפשר להשתמש במאפיין API כדי לקבל את שם המשאב שאליו מתייחסת הבקשה. אחר כך אפשר להשוות אותו למשאב או למשאבים שיש לישות הגישה הרשאה לגשת אליהם.
הענקת גישה ברמת פירוט גבוהה באמצעות תכונות מתקדמות של IAM
תכונות ה-IAM המתקדמות האלה מאפשרות לכם לשלוט בגישה למשאבים ספציפיים ולסוגי משאבים בתנאים מסוימים.
התהליכים שמתוארים בקטע הזה מעניקים גישה למשאבים ספציפיים (יעדים, צינורות עיבוד נתונים להעברה). אפשר גם לתת גישה ברמת הפרויקט, שתשפיע על כל צינורות ההפצה או על כל יעדי הפרויקט. כדי להגדיר מדיניות IAM לפרויקט, משתמשים בפקודה gcloud projects set-iam-policy:
gcloud projects set-iam-policy PROJECT_ID POLICY_FILE
מתן גישה לצינור עיבוד נתונים ספציפי
אתם יכולים להעניק הרשאות לחשבון משתמש ליצור, לשנות ולמחוק את כל צינורות ההפצה, פשוט על ידי הקצאת תפקיד מתאים. אבל לפעמים יכול להיות שתרצו להעניק לישות הראשית גישה לפייפליין ספציפי אחד או יותר.
כדי לעשות זאת, משתמשים בקישורי תפקידים כדי לקשר את התפקיד roles/clouddeploy.developer לחשבון המשתמש, ואז כשמחילים את המדיניות (עם setIamPolicy) מציינים לאיזה צינור העברה מוענקת הגישה.
כדי להעניק גישה לצינור עיבוד נתונים ספציפי לפריסה:
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.developer members: - user:fatima@example.comבדוגמה שלמעלה, התפקיד מוענק למשתמש, אבל אפשר גם להעניק אותו לקבוצה או לחשבון שירות.
מריצים את הפקודה הבאה כדי להחיל את קובץ המדיניות על צינור העברת נתונים ספציפי:
gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
מתן גישה להגדרת יעד ספציפי
כדי להעניק לחשבון משתמש גישה ליעד ספציפי, אפשר להשתמש בקישורים של תפקידים. כדי לעשות את זה, צריך לקשר את התפקיד roles/clouddeploy.operator לחשבון המשתמש הזה, ואז כשמחילים את המדיניות (עם setIamPolicy) מציינים לאיזה יעד ניתנת הגישה.
גישה ליעד ספציפי מאפשרת לגורם המורשה לעדכן ולמחוק את היעד הזה.
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.operator members: - group:cd_operators@example.comבדוגמה שלמעלה, התפקיד מוקצה לקבוצה, אבל אפשר גם להקצות את התפקיד למשתמש או לחשבון שירות.
מריצים את הפקודה הבאה כדי להחיל את קובץ המדיניות על יעד ספציפי:
gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
איך מעניקים הרשאות לקידום הפצה ליעד ספציפי
ההנחה היא שכבר קיימת מדיניות שמקשרת את התפקיד לחשבון הראשי. כאן מוסיפים תנאי שמציין את היעד:
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.operator members: - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com condition: expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod" title: Deploy to prodבקישור התפקיד הזה, הפונקציה
conditionמקבלת צמד מפתח:ערך, שבו המפתח הואexpressionוהערך הוא ביטוי CEL. הביטוי הזה מתייחס לקבוצה של מאפיינים הקשריים לגבי הבקשה, והערך שלו הוא בוליאני.במקרה הזה, הביטוי נבדק כשחשבון המשתמש מנסה לקדם את הגרסה, כדי לוודא שיעד הקידום תואם ליעד בביטוי.
הביטוי משתמש במאפיין ה-API
clouddeploy.googleapis.com/rolloutTarget, שהוא היעד שהגורם המרכזי מנסה לקדם אליו. הביטוי משווה את התפקיד ליעד שלשמו ניתן לחשבון המשתמש גישה לקידום.הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:
gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILEאם רוצים להגדיר את הקישור הזה לכל צינורות האספקה, אפשר להגדיר אותו ברמת הפרויקט:
gcloud projects set-iam-policy PROJECT POLICY_FILE
איך מעניקים הרשאות לאישור השקות ליעד ספציפי
הקישור בקטע הזה מעניק לחשבון משתמש הרשאה לאשר השקות של צינור עיבוד נתונים, וכולל תנאי שמחיל את ההרשאה על יעד prod.
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.approver members: - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com condition: expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod" title: Deploy to prodבקישור התפקיד הזה, הפונקציה
conditionמקבלת צמד מפתח:ערך, שבו המפתח הואexpressionוהערך הוא ביטוי CEL. הביטוי מתייחס לקבוצה של מאפיינים הקשריים לגבי הבקשה, והערך שלו הוא בוליאני.במקרה הזה, הביטוי נבדק כשחשבון המשתמש מנסה לאשר את ההשקה, כדי לוודא שהיעד תואם ליעד בביטוי.
הביטוי משתמש במאפיין ה-API
clouddeploy.googleapis.com/rolloutTarget, שהוא היעד של ההשקה, ומשווה אותו ליעד שלגורם המרכזי ניתן אישור גישה אליו. המאפייןclouddeploy.googleapis.com/rolloutTargetהוא מאפיין ה-API היחיד שנתמך ב-Cloud Deploy.הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:
gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILEאם רוצים להגדיר את הקישור הזה לכל צינורות ההפצה, אפשר להגדיר אותו ברמת הפרויקט:
gcloud projects set-iam-policy PROJECT POLICY_FILE
הענקת הרשאות לקידום הפצה במהלך חלון זמן מסוים
הקישור בקטע הזה מעניק לחשבון משתמש הרשאה לקדם גרסאות של צינור, וכולל תנאי שמציין את חלון הזמן שבו הקישור בתוקף.
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.operator members: - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com condition: expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6 title: Promote during safe windowבקישור התפקיד הזה, הפונקציה
conditionמקבלת צמד מפתח:ערך, שבו המפתח הואexpressionוהערך הוא ביטוי CEL. הביטוי מתייחס לקבוצה של מאפיינים הקשריים לגבי הבקשה, והערך שלו הוא בוליאני. הביטוי הזה בודק אם השעה שבה נשלחה הבקשה היא בין יום שני ליום שישי.במקרה הזה, הביטוי מוערך כשחשבון המשתמש מנסה לקדם את הגרסה, כדי לוודא שיעד הקידום תואם ליעד בביטוי.
הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:
gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILEאם רוצים להגדיר את הקישור הזה לכל צינורות האספקה, אפשר להגדיר אותו ברמת הפרויקט:
gcloud projects set-iam-policy PROJECT POLICY_FILE
איך נותנים הרשאות לאישור השקות במהלך חלון זמן מסוים
הקישור בקטע הזה מעניק לחשבון משתמש הרשאה לאשר השקות, וכולל תנאי שמציין את חלון הזמן שבו הקישור בתוקף.
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.approver members: - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com condition: expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6 title: Approve during safe windowבקישור התפקיד הזה,
conditionמקבל צמד מפתח:ערך, שבו המפתח הואexpressionוהערך הוא ביטוי CEL שמפנה לקבוצה של מאפיינים תלויי-הקשר לגבי הבקשה, ומחזיר ערך בוליאני. הביטוי הזה בודק אם השעה שבה נשלחה הבקשה היא בין יום שני ליום שישי.במקרה הזה, הביטוי נבדק כשחשבון המשתמש מנסה לאשר את ההשקה, כדי לוודא שיעד ההשקה תואם ליעד בביטוי.
הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:
gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILEאם רוצים להגדיר את הקישור הזה לכל צינורות ההפצה, אפשר להגדיר אותו ברמת הפרויקט:
gcloud projects set-iam-policy PROJECT POLICY_FILE
מתן הרשאות לניסיון חוזר של עבודה, על סמך סוג העבודה
הקישור בקטע הזה מעניק לחשבון ראשי הרשאה לנסות שוב לבצע עבודה ב-Cloud Deploy, בהתאם לסוג העבודה
יוצרים קובץ מדיניות עם הקישור הבא:
bindings: - role: roles/clouddeploy.operator members: - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com condition: expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy" title: Retry deploy jobבקישור התפקיד הזה,
conditionמקבל צמד מפתח:ערך, כאשר המפתח הואexpressionוהערך הוא ביטוי CEL. הביטוי מתייחס לקבוצה של מאפיינים הקשריים לגבי הבקשה, והערך שלו הוא בוליאני.במקרה הזה, הביטוי נבדק כשחשבון המשתמש מנסה להפעיל מחדש את העבודה, כדי לוודא שסוג העבודה תואם לסוג העבודה בביטוי.
הביטוי משתמש במאפיין ה-API
clouddeploy.googleapis.com/jobType, שיכול להיותdeployאוverify.הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:
gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILEאם רוצים להגדיר את הקישור הזה לכל צינורות האספקה, אפשר להגדיר אותו ברמת הפרויקט:
gcloud projects set-iam-policy PROJECT POLICY_FILE