שימוש ב-IAM כדי להגביל את הגישה ל-Cloud Deploy

כמו בכל Google Cloud המוצרים, Identity and Access Management (ניהול זהויות והרשאות גישה, IAM) מגן על Cloud Deploy על ידי שליטה בפעולות שמשתמשים מאומתים וחשבונות שירות יכולים לבצע.

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

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

מידע על תכונות מתקדמות של 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) מציינים לאיזה צינור העברה מוענקת הגישה.

כדי להעניק גישה לצינור עיבוד נתונים ספציפי לפריסה:

  1. יוצרים קובץ מדיניות עם הקישור הבא:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

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

  2. מריצים את הפקודה הבאה כדי להחיל את קובץ המדיניות על צינור העברת נתונים ספציפי:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

מתן גישה להגדרת יעד ספציפי

כדי להעניק לחשבון משתמש גישה ליעד ספציפי, אפשר להשתמש בקישורים של תפקידים. כדי לעשות את זה, צריך לקשר את התפקיד roles/clouddeploy.operator לחשבון המשתמש הזה, ואז כשמחילים את המדיניות (עם setIamPolicy) מציינים לאיזה יעד ניתנת הגישה.

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

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

  2. מריצים את הפקודה הבאה כדי להחיל את קובץ המדיניות על יעד ספציפי:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

איך מעניקים הרשאות לקידום הפצה ליעד ספציפי

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

    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, שהוא היעד שהגורם המרכזי מנסה לקדם אליו. הביטוי משווה את התפקיד ליעד שלשמו ניתן לחשבון המשתמש גישה לקידום.

  2. הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

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

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

איך מעניקים הרשאות לאישור השקות ליעד ספציפי

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

    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.

  2. הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

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

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

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

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

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

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

  2. הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

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

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

איך נותנים הרשאות לאישור השקות במהלך חלון זמן מסוים

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

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

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

  2. הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

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

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

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

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

  1. יוצרים קובץ מדיניות עם הקישור הבא:

    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.

  2. הגדרת הקישור לצינור עיבוד נתונים ספציפי למשלוח:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

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

    gcloud projects set-iam-policy PROJECT POLICY_FILE