שחזור גרסה קודמת של מדיניות הרשאות ב-IAM

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

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

אפשר גם להשתמש ב-Cloud Asset Inventory כדי למצוא את היסטוריית השינויים ב-IAM ולהשתמש בה כדי לשחזר את המדיניות.

התפקידים הנדרשים

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

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

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

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

שחזור מדיניות הרשאות עם המופע האחרון של setIamPolicy שהצליח

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

  1. מזהים את המופע האחרון של setIamPolicy שהצליח במדיניות ההרשאה ומאחזרים את insertId.
  2. משתמשים ב-insertId מהבקשה setIamPolicy כדי לייצא את מדיניות ההרשאה בפורמט YAML או JSON.
  3. משנים את קובץ הפלט כך שיתאים למדיניות ההרשאות הקודמת שפעלה, ומבטלים את מדיניות ההרשאות הנוכחית.

מזהים את המופע האחרון של setIamPolicy שהצליח ומאחזרים את insertId

כדי לזהות את המופע האחרון של setIamPolicy שבוצע בהצלחה ולאחזר את isertId, אפשר לעיין ביומני הביקורת באמצעות מסוף Google Cloud או ה-CLI של gcloud.

המסוף

  1. נכנסים לדף Logs Explorer במסוף Google Cloud .

    כניסה לדף Logs Explorer

  2. מזינים אחת מהשאילתות הבאות בעורך השאילתות. השאילתות האלה מחפשות ביומני הביקורת רשומות שכוללות את הערך SetIamPolicy בשדה methodName של protoPayload:

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

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      
    • כדי לקבל את היומנים של שינויים במדיניות ההרשאות שקשורים למשתמש או לחשבון שירות ספציפיים, משתמשים בשאילתה הבאה:

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      protoPayload.serviceData.policyDelta.bindingDeltas.member:"EMAIL_ADDRESS"
      

      מחליפים את מה שכתוב בשדות הבאים:

      • RESOURCE_TYPE: סוג המשאב שלגביו רוצים להציג את יומני הביקורת. הערכים התקינים הם projects,‏ folders או organizations.
      • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון. מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012. Google Cloud
      • EMAIL_ADDRESS: כתובת האימייל של המשתמש או של חשבון השירות – לדוגמה, example-service-account@example-project.iam.gserviceaccount.com.
  3. כדי להריץ את השאילתה, לוחצים על Run query.

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

  5. מעתיקים את insertId מהמופע האחרון של setIamPolicy לפני השינוי או המחיקה.

gcloud

הפקודה gcloud logging read קוראת רשומות ביומן.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • RESOURCE_TYPE: סוג המשאב שלגביו רוצים להציג את יומני הביקורת. אפשר להשתמש בערך projects,‏ folders או organizations.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • TIME_PERIOD: תקופת הזמן שלגביה מוצגים יומני הביקורת. הערכים שמוחזרים לא ישנים יותר מהערך הזה. אם לא מציינים ערך, ערך ברירת המחדל הוא 1d. מידע על פורמטים של שעות זמין במאמר gcloud topic datetimes.
  • RESOURCE_TYPE_SINGULAR: סוג המשאב שלגביו רוצים להציג את יומני הביקורת. אפשר להשתמש בערך project,‏ folder או organization.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud logging read \
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' \
    --freshness=TIME_PERIOD \
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

‏Windows (PowerShell)

gcloud logging read `
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' `
    --freshness=TIME_PERIOD `
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

‏Windows ‏(cmd.exe)

gcloud logging read ^
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' ^
    --freshness=TIME_PERIOD ^
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

מעתיקים את insertId מהמופע האחרון של setIamPolicy לפני השינוי או המחיקה.

שימוש ב-insertId כדי לייצא את מדיניות ההרשאות

משתמשים ב-insertId שאוחזר מהמופע האחרון של setIamPolicy כדי להריץ את הפקודה הבאה ב-CLI של gcloud ולייצא את מדיניות ההרשאה בפורמט JSON או YAML. אפשר לייצא כללי מדיניות הרשאה לארגונים ולפרויקטים.

ברמת הארגון

הפקודה gcloud logging read קוראת רשומות ביומן.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • ORGANIZATION_ID: הארגון שרוצים להציג ולייצא את מדיניות ההרשאות שלו.
  • INSERT_ID: הinsertId של הבקשה setIamPolicy.
  • FORMAT: הפורמט של התגובה. אפשר להשתמש ב-json או ב-yaml.
  • TIME_PERIOD: תקופת הזמן שיומני הביקורת מתייחסים אליה. הערכים שמוחזרים לא ישנים יותר מהערך הזה. אם לא מציינים ערך, ערך ברירת המחדל הוא 1d. מידע על פורמטים של שעות זמין במאמר gcloud topic datetimes.
  • OUTPUT_FILE: שם הקובץ והסיומת של הפלט. לדוגמה: previous_policy.json או previous_policy.yaml.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

‏Windows (PowerShell)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

‏Windows ‏(cmd.exe)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

ברמת הפרויקט

הפקודה gcloud logging read קוראת רשומות ביומן.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • INSERT_ID: הinsertId של הבקשה setIamPolicy.
  • TIME_PERIOD: תקופת הזמן שיומני הביקורת מתייחסים אליה. הערכים שמוחזרים לא ישנים יותר מהערך הזה. אם לא מציינים ערך, ערך ברירת המחדל הוא 1d. מידע על פורמטים של שעות זמין במאמר gcloud topic datetimes.
  • FORMAT: הפורמט של התגובה. אפשר להשתמש ב-json או ב-yaml.
  • OUTPUT_FILE: השם של הקובץ שבו רוצים לשמור את הפלט, לדוגמה previous_policy.json או previous_policy.yaml.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud logging read \
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' \
--freshness=TIME_PERIOD \
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

‏Windows (PowerShell)

gcloud logging read `
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' `
--freshness=TIME_PERIOD `
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

‏Windows ‏(cmd.exe)

gcloud logging read ^
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' ^
--freshness=TIME_PERIOD ^
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

שינוי קובץ הפלט וביטול מדיניות ההרשאות הנוכחית

משנים את קובץ הפלט בדרכים הבאות ומבטלים את מדיניות ההרשאות הנוכחית.

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

     ---
     protoPayload:
        request:
          policy:
    

    הקובץ שמתקבל מתחיל ב-auditConfigs:.

  2. טוענים את מדיניות ההרשאות הקיימת.

    gcloud

    הפקודה gcloud get-iam-policy מאחזרת את מדיניות ההרשאות של הפרויקט, התיקייה או הארגון.

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • RESOURCE_TYPE: סוג המשאב שרוצים לקבל את מדיניות ההרשאה שלו. הערכים התקינים הם projects,‏ resource-manager folders או organizations.

    • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

    • FORMAT: הפורמט הרצוי למדיניות ההרשאה. אפשר להשתמש ב-json או ב-yaml.

    • PATH: הנתיב לקובץ פלט חדש של מדיניות ההרשאות.

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    ‏Windows (PowerShell)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Windows‏ (cmd.exe)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    לדוגמה, הפקודה הבאה מקבלת את מדיניות ההרשאה של הפרויקט my-project ושומרת אותה בספריית הבית בפורמט JSON:

    gcloud projects get-iam-policy my-project --format json > ~/policy.json

    C#

    כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy GetPolicy(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
                projectId).Execute();
            return policy;
        }
    }
    

    Java

    כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.GetIamPolicyRequest;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class GetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
    
        getProjectPolicy(projectId);
      }
    
      // Gets a project's policy.
      public static Policy getProjectPolicy(String projectId) throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .build();
          return projectsClient.getIamPolicy(request);
        }
      }
    }

    Python

    כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def get_project_policy(project_id: str) -> policy_pb2.Policy:
        """Get policy for project.
    
        project_id: ID or number of the Google Cloud project you want to use.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        policy = client.get_iam_policy(request)
        print(f"Policy retrieved: {policy}")
    
        return policy

    REST

    ה-method get-iam-policy ב-API של מנהל המשאבים מקבלת את מדיניות ההרשאה של פרויקט, של תיקייה או של ארגון.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
    • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה שלכם. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו Google Cloud. מזהי תיקיות וארגונים מכילים רק ספרות, כמו my-project. 123456789012
    • POLICY_VERSION: הגרסה של המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.

    ה-method של ה-HTTP וכתובת ה-URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    תוכן בקשת JSON:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    התשובה תכיל את מדיניות ההרשאות של המשאב. לדוגמה:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    שומרים את התגובה בקובץ מהסוג המתאים (json או yaml).

  3. מעתיקים את הערך etag ממדיניות ההרשאות הנוכחית.

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

  5. בודקים את הקובץ כדי לוודא שהוא תואם למדיניות ההרשאות הקודמת. כדאי ליצור פרויקט חדש ולהחיל עליו את המדיניות כדי לוודא שהיא פועלת כמצופה.

  6. מגדירים את מדיניות ההרשאות כך שתחליף את מדיניות ההרשאות הנוכחית במדיניות ההרשאות שבקובץ הפלט שיצרתם.

    gcloud

    הפקודה gcloud set-iam-policy מגדירה את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • RESOURCE_TYPE: סוג המשאב שעבורו רוצים להגדיר את מדיניות ההרשאה. הערכים התקפים הם projects,‏ resource-manager folders או organizations.

    • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

    • PATH: הנתיב לקובץ שכולל את מדיניות ההרשאה החדשה.

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    ‏Windows (PowerShell)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Windows‏ (cmd.exe)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    התגובה מכילה את מדיניות ההרשאה המעודכנת.

    לדוגמה, הפקודה הבאה מגדירה את מדיניות ההרשאה ששמורה ב-policy.json כמדיניות ההרשאה של הפרויקט my-project:

    gcloud projects set-iam-policy my-project ~/policy.json

    C#

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy SetPolicy(string projectId, Policy policy)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            return service.Projects.SetIamPolicy(new SetIamPolicyRequest
            {
                Policy = policy
            }, projectId).Execute();
        }
    }
    

    Java

    כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.Policy;
    import com.google.iam.v1.SetIamPolicyRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    public class SetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
        // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
        Policy policy = Policy.newBuilder().build();
    
        setProjectPolicy(policy, projectId);
      }
    
      // Sets a project's policy.
      public static Policy setProjectPolicy(Policy policy, String projectId)
              throws IOException {
    
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          List<String> paths = Arrays.asList("bindings", "etag");
          SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .setPolicy(policy)
                  // A FieldMask specifying which fields of the policy to modify. Only
                  // the fields in the mask will be modified. If no mask is provided, the
                  // following default mask is used:
                  // `paths: "bindings, etag"`
                  .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
                  .build();
    
          return projectsClient.setIamPolicy(request);
        }
      }
    }

    Python

    כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def set_project_policy(
        project_id: str, policy: policy_pb2.Policy, merge: bool = True
    ) -> policy_pb2.Policy:
        """
        Set policy for project. Pay attention that previous state will be completely rewritten.
        If you want to update only part of the policy follow the approach read->modify->write.
        For more details about policies check out https://cloud.google.com/iam/docs/policies
    
        project_id: ID or number of the Google Cloud project you want to use.
        policy: Policy which has to be set.
        merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
        when MergeFrom is replacing only immutable fields and extending mutable.
        https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
        """
        client = resourcemanager_v3.ProjectsClient()
    
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
        current_policy = client.get_iam_policy(request)
    
        # Etag should as fresh as possible to lower chance of collisions
        policy.ClearField("etag")
        if merge:
            current_policy.MergeFrom(policy)
        else:
            current_policy.CopyFrom(policy)
    
        request = iam_policy_pb2.SetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        # request.etag field also will be merged which means you are secured from collision,
        # but it means that request may fail and you need to leverage exponential retries approach
        # to be sure policy has been updated.
        request.policy.CopyFrom(current_policy)
    
        policy = client.set_iam_policy(request)
        return policy
    
    

    REST

    ה-method set-iam-policy של ה-API של מנהל המשאבים קובע את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
    • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה שלכם. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו Google Cloud. מזהי תיקיות וארגונים מכילים רק ספרות, כמו my-project. 123456789012
    • POLICY: ייצוג ב-JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע במאמרי העזרה בנושא מדיניות.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    תוכן בקשת JSON:

    {
      "policy": POLICY
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    התגובה מכילה את מדיניות ההרשאה המעודכנת.

שחזור מדיניות הרשאה באמצעות מאגר משאבי הענן

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

  1. משתמשים במאגר משאבי הענן כדי לבדוק את היסטוריית השינויים של מדיניות ההרשאות ולזהות את מדיניות ההרשאות שרוצים לשחזר.
  2. מעתיקים את מדיניות ההרשאה ויוצרים קובץ חדש בפורמט JSON.
  3. מחליפים את מדיניות ההרשאות הנוכחית במדיניות שבקובץ החדש.

בדיקת היסטוריית השינויים במדיניות ההרשאות באמצעות מאגר משאבי הענן

המסוף

  1. נכנסים לדף Asset Inventory במסוף Google Cloud .

    מעבר למלאי הנכסים

  2. לוחצים על הכרטיסייה IAM Policy (מדיניות IAM).

  3. מריצים את השאילתה הבאה בשדה Filter:

    Resource : RESOURCE_ID

    מחליפים את RESOURCE_ID במזהה Google Cloudהפרויקט, התיקייה או הארגון. מזהי פרויקטים הם אלפאנומריים, למשל my-project. מזהי תיקיות וארגונים הם מספריים, למשל 123456789012.

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

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

gcloud

הפקודה gcloud asset get-history מאחזרת את ההיסטוריה המעודכנת של מדיניות ההרשאה בנכס שחופף לחלון זמן.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • RESOURCE_TYPE: סוג המשאב שלגביו רוצים להציג את יומני הביקורת. אפשר להשתמש בערך project,‏ folder או organization.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • ASSET_NAME: רשימה מופרדת בפסיקים של שמות משאבים בפורמט של המשאבים שרוצים לראות את היסטוריית מדיניות ההרשאות שלהם. לדוגמה, //cloudresourcemanager.googleapis.com/projects/my-project. המשאבים האלה יכולים להיות כל אחד מסוגי המשאבים שתומכים במדיניות הרשאות.
  • START_TIME: תחילת טווח הזמן. הטווח המקסימלי הוא 7 ימים. הערך חייב להיות השעה הנוכחית או שעה שחלה לפני 35 ימים לכל היותר. מידע על פורמטים של שעות זמין במאמר gcloud topic datetimes.
  • END_TIME: אופציונלי. נקודת הסיום של טווח הזמן. הטווח המקסימלי הוא 7 ימים. הערך חייב להיות השעה הנוכחית או שעה שחלה לפני לא יותר מ-35 ימים. אם לא מציינים שעת סיום, המערכת מניחה שהשעה היא השעה הנוכחית. מידע על פורמטים של שעות זמין במאמר gcloud topic datetimes.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud asset get-history \
    --RESOURCE_TYPE=RESOURCE_ID \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --content-type=iam-policy \
    --start-time=START_TIME \
    --end-time=END_TIME

‏Windows (PowerShell)

gcloud asset get-history `
    --RESOURCE_TYPE=RESOURCE_ID `
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... `
    --content-type=iam-policy `
    --start-time=START_TIME `
    --end-time=END_TIME

Windows‏ (cmd.exe)

gcloud asset get-history ^
    --RESOURCE_TYPE=RESOURCE_ID ^
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... ^
    --content-type=iam-policy ^
    --start-time=START_TIME ^
    --end-time=END_TIME

התשובה מכילה את ההיסטוריה המעודכנת של מדיניות ההרשאות.

יצירת קובץ מדיניות הרשאה חדש

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

  1. מעתיקים את מדיניות ההרשאה שרוצים לשחזר, החל מהשורה "bindings" ועד לשורה "etag".

  2. מדביקים את מדיניות ההרשאה שהעתקתם לקובץ חדש, ומוסיפים סוגריים מסולסלים ({}) מסביב למדיניות. לדוגמה, מדיניות ההרשאה יכולה להיראות כך:

     {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-service-account@my-project.iam.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=",
     }
    
  3. שומרים את הקובץ בפורמט JSON. לדוגמה, אפשר לתת לקובץ החדש את השם previous_iam_policy.json.

הגדרת מדיניות ההרשאות החדשה

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

gcloud

הפקודה gcloud set-iam-policy מגדירה את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • RESOURCE_TYPE: סוג המשאב שעבורו רוצים להגדיר את מדיניות ההרשאה. הערכים התקפים הם projects,‏ resource-manager folders או organizations.

  • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

  • PATH: הנתיב לקובץ שכולל את מדיניות ההרשאה החדשה.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

‏Windows (PowerShell)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows‏ (cmd.exe)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

התגובה מכילה את מדיניות ההרשאה המעודכנת.

לדוגמה, הפקודה הבאה מגדירה את מדיניות ההרשאה ששמורה ב-policy.json כמדיניות ההרשאה של הפרויקט my-project:

gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setProjectPolicy(policy, projectId);
  }

  // Sets a project's policy.
  public static Policy setProjectPolicy(Policy policy, String projectId)
          throws IOException {

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return projectsClient.setIamPolicy(request);
    }
  }
}

Python

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_project_policy(
    project_id: str, policy: policy_pb2.Policy, merge: bool = True
) -> policy_pb2.Policy:
    """
    Set policy for project. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    policy: Policy which has to be set.
    merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
    when MergeFrom is replacing only immutable fields and extending mutable.
    https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
    """
    client = resourcemanager_v3.ProjectsClient()

    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"
    current_policy = client.get_iam_policy(request)

    # Etag should as fresh as possible to lower chance of collisions
    policy.ClearField("etag")
    if merge:
        current_policy.MergeFrom(policy)
    else:
        current_policy.CopyFrom(policy)

    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.CopyFrom(current_policy)

    policy = client.set_iam_policy(request)
    return policy

REST

ה-method set-iam-policy של ה-API של מנהל המשאבים קובע את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
  • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה שלכם. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו Google Cloud. מזהי תיקיות וארגונים מכילים רק ספרות, כמו my-project. 123456789012
  • POLICY: ייצוג ב-JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע במאמרי העזרה בנושא מדיניות.

שיטת ה-HTTP וכתובת ה-URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

תוכן בקשת JSON:

{
  "policy": POLICY
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

התגובה מכילה את מדיניות ההרשאה המעודכנת.