Policy

מדיניות של ניהול זהויות והרשאות גישה (IAM), שמציינת את אמצעי בקרת הגישה למשאבים ב-Google Cloud.

Policy הוא אוסף של bindings. binding מקשרת members אחד או יותר, או חשבונות משתמש, לrole יחיד. חשבונות ראשיים יכולים להיות חשבונות משתמשים, חשבונות שירות, קבוצות Google ודומיינים (כמו G Suite). role היא רשימה של הרשאות עם שם. כל role יכול להיות תפקיד מוגדר מראש ב-IAM או תפקיד בהתאמה אישית שנוצר על ידי משתמש.

בסוגים מסוימים של משאבים ב-Google Cloud, אפשר גם לציין condition ב-binding. condition הוא ביטוי לוגי שמאפשר גישה למשאב רק אם ערך הביטוי הוא true. תנאי יכול להוסיף מגבלות על סמך מאפיינים של הבקשה, של המשאב או של שניהם. במאמרי העזרה של IAM מוסבר אילו משאבים תומכים בתנאים במדיניות ה-IAM שלהם.

דוגמה ל-JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

דוגמה ל-YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

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

ייצוג ב-JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
שדות
version

integer

מציין את הפורמט של המדיניות.

הערכים התקפים הם 0,‏ 1 ו-3. בקשות שמציינות ערך לא תקין נדחות.

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

  • קבלת מדיניות שכוללת קישור תפקיד מותנה
  • הוספה של קישור תפקיד מותנה למדיניות
  • שינוי של קישור תפקיד מותנה במדיניות
  • הסרה של קישור תפקידים, עם או בלי תנאי, ממדיניות שכוללת תנאים

חשוב לדעת: אם משתמשים בתנאים של IAM, צריך לכלול את השדה etag בכל פעם שמבצעים קריאה ל-setIamPolicy. אם משמיטים את השדה הזה, אז IAM מאפשר להחליף את מדיניות גרסה 3 במדיניות גרסה 1, וכל התנאים במדיניות גרסה 3 נמחקים.

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

במאמרי העזרה של IAM מוסבר אילו משאבים תומכים בתנאים במדיניות ה-IAM שלהם.

bindings[]

object (Binding)

משייך רשימה של members, או חשבונות משתמשים, לrole. אפשר גם לציין condition שקובע איך ומתי המערכת מחילה את bindings. כל אחד מהתגים bindings חייב להכיל לפחות גורם מרכזי אחד.

הbindings בPolicy יכול להפנות לעד 1,500 חשבונות משתמשים, ומתוכם עד 250 יכולים להיות קבוצות Google. כל מופע של חשבון משתמש נספר במסגרת המגבלות האלה. לדוגמה, אם ההרשאה bindings מעניקה 50 תפקידים שונים לחשבון המשתמש user:alice@example.com, ולא לחשבון משתמש אחר, תוכלו להוסיף עוד 1,450 חשבונות משתמשים להרשאה bindings במדיניות Policy.

auditConfigs[]

object (AuditConfig)

הגדרת רישום ביומני ביקורת בענן עבור המדיניות הזו.

etag

string (bytes format)

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

חשוב לדעת: אם משתמשים בתנאים של IAM, צריך לכלול את השדה etag בכל פעם שמבצעים קריאה ל-setIamPolicy. אם משמיטים את השדה הזה, אז IAM מאפשר להחליף את מדיניות גרסה 3 במדיניות גרסה 1, וכל התנאים במדיניות גרסה 3 נמחקים.

מחרוזת בקידוד Base64.

קישור

משייך members או מנהלים ל-role.

ייצוג ב-JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
שדות
role

string

התפקיד שמוקצה לרשימה של members או חשבונות משתמשים. לדוגמה, roles/viewer,‏ roles/editor או roles/owner.

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

members[]

string

מציין את חשבונות המשתמשים שמבקשים גישה למשאב ב-Google Cloud. ‫members יכול לקבל את הערכים הבאים:

  • allUsers: מזהה מיוחד שמייצג את כל מי שמשתמש באינטרנט, עם או בלי חשבון Google.

  • allAuthenticatedUsers: מזהה מיוחד שמייצג את כל מי שאומת באמצעות חשבון Google או חשבון שירות. לא כולל זהויות שמגיעות מספקי זהויות חיצוניים (IdPs) דרך איחוד זהויות.

  • user:{emailid}: כתובת אימייל שמייצגת חשבון Google ספציפי. לדוגמה, alice@example.com .

  • serviceAccount:{emailid}: כתובת אימייל שמייצגת חשבון שירות של Google. לדוגמה, my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: מזהה של חשבון שירות של Kubernetes. לדוגמה, my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: כתובת אימייל שמייצגת קבוצה ב-Google. לדוגמה, admins@example.com.

  • domain:{domain}: הדומיין (הראשי) של G Suite שמייצג את כל המשתמשים בדומיין הזה. לדוגמה, google.com או example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: זהות יחידה במאגר זהויות של כוח עבודה.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: כל הזהויות של כוח העבודה בקבוצה.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: כל הזהויות של כוח העבודה עם ערך מאפיין ספציפי.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: כל הזהויות במאגר זהויות של כוח עבודה.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: זהות אחת במאגר זהויות של עומסי עבודה.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: קבוצה במאגר הזהויות של עומסי העבודה.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: כל הזהויות במאגר זהויות של עומסי עבודה עם מאפיין מסוים.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: כל הזהויות במאגר הזהויות של עומסי העבודה.

  • deleted:user:{emailid}?uid={uniqueid}: כתובת אימייל (בתוספת מזהה ייחודי) שמייצגת משתמש שנמחק לאחרונה. לדוגמה, alice@example.com?uid=123456789012345678901. אם המשתמש שוחזר, הערך הזה חוזר ל-user:{emailid} והמשתמש ששוחזר שומר על התפקיד בהתאמה.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: כתובת אימייל (בתוספת מזהה ייחודי) שמייצגת חשבון שירות שנמחק לאחרונה. לדוגמה, my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. אם מבטלים את המחיקה של חשבון השירות, הערך הזה חוזר להיות serviceAccount:{emailid} וחשבון השירות שבוטלה המחיקה שלו שומר על התפקיד בקישור.

  • deleted:group:{emailid}?uid={uniqueid}: כתובת אימייל (בתוספת מזהה ייחודי) שמייצגת קבוצה ב-Google שנמחקה לאחרונה. לדוגמה, admins@example.com?uid=123456789012345678901. אם הקבוצה משוחזרת, הערך הזה חוזר ל-group:{emailid} והקבוצה המשוחזרת שומרת על התפקיד בהתאמה.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: זהות יחידה שנמחקה במאגר זהויות של כוח עבודה. לדוגמה, deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

התנאי שמשויך לקשירה הזו.

אם התנאי מקבל את הערך true, הקישור הזה חל על הבקשה הנוכחית.

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

במאמרי העזרה של IAM מוסבר אילו משאבים תומכים בתנאים במדיניות ה-IAM שלהם.

Expr

מייצג ביטוי טקסטואלי בתחביר של Common Expression Language ‏ (CEL). ‫CEL היא שפת ביטויים שדומה ל-C. התחביר והסמנטיקה של CEL מתועדים בכתובת https://github.com/google/cel-spec.

דוגמה (השוואה):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

דוגמה (שוויון):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

דוגמה (לוגיקה):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

דוגמה (טיפול בנתונים):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

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

ייצוג ב-JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
שדות
expression

string

ייצוג טקסטואלי של ביטוי בתחביר של Common Expression Language.

title

string

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

description

string

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

location

string

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

AuditConfig

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

אם יש AuditConfigs גם ל-allServices וגם לשירות ספציפי, המערכת משתמשת באיחוד של שני ה-AuditConfigs עבור השירות הזה: log_types שצוינו בכל AuditConfig מופעלים, ו-exemptedMembers בכל AuditLogConfig פטורים.

דוגמה למדיניות עם כמה AuditConfigs:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

בשירות sampleservice, המדיניות הזו מאפשרת רישום ביומן של DATA_READ, ‏ DATA_WRITE ו-ADMIN_READ. היא גם פוטרת את jose@example.com מרישום ביומן של DATA_READ, ואת aliya@example.com מרישום ביומן של DATA_WRITE.

ייצוג ב-JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
שדות
service

string

מציינים שירות שיופעל עבור רישום ביומן ביקורת. לדוגמה, storage.googleapis.com, cloudsql.googleapis.com. ‫allServices הוא ערך מיוחד שכולל את כל השירותים.

auditLogConfigs[]

object (AuditLogConfig)

ההגדרה של רישום ביומן לכל סוג הרשאה.

AuditLogConfig

המדיניות מספקת את ההגדרה לרישום ביומן של סוג הרשאות. דוגמה:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

הפעולה הזו מפעילה את הרישום ביומן של DATA_READ ו-DATA_WRITE, ופוטרת את jose@example.com מרישום ביומן של DATA_READ.

ייצוג ב-JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
שדות
logType

enum (LogType)

סוג היומן שההגדרה הזו מפעילה.

exemptedMembers[]

string

מציינת את הזהויות שלא גורמות לרישום ביומן עבור סוג ההרשאה הזה. הפורמט זהה לפורמט של Binding.members.

LogType

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

טיפוסים בני מנייה (enum)
LOG_TYPE_UNSPECIFIED ברירת מחדל. הערך הזה לא יכול להיות כזה.
ADMIN_READ האדמין קורא. דוגמה: CloudIAM getIamPolicy
DATA_WRITE כתיבת נתונים. דוגמה: יצירת משתמשים ב-CloudSQL
DATA_READ קריאות נתונים. דוגמה: רשימת משתמשים ב-CloudSQL