ניהול גישה לפרויקטים, לתיקיות ולארגונים

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

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

ניתן לנהל את הגישה לפרויקטים, לתיקיות ולארגונים באמצעות מסוף Google Cloud, Google Cloud CLI, REST API או ספריות הלקוח של מנהל המשאבים.

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

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

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

  • על מנת לנהל את הגישה לפרויקט: פרויקט IAM אדמין (roles/resourcemanager.projectIamAdmin)
  • על מנת לנהל את הגישה לתיקייה: אדמין של תיקייה (roles/resourcemanager.folderAdmin)
  • על מנת לנהל את הגישה לפרויקטים, לתיקיות ולארגונים: אדמין ארגוני (roles/resourcemanager.organizationAdmin)
  • על מנת לנהל את הגישה כמעט לכל המשאבים ב-Google Cloud: אדמין אבטחה (roles/iam.securityAdmin)

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

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

ההרשאות הנדרשות

על מנת לנהל את הגישה לפרויקט, לתיקייה או לארגון, נדרשות ההרשאות הבאות:

  • על מנת לנהל את הגישה לפרויקטים:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • על מנת לנהל את הגישה לתיקיות:
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • על מנת לנהל את הגישה לארגונים:
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

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

הצג הגישה הנוכחית

ניתן לך לראות מי מקבל גישה לפרויקט, לתיקייה או לארגון באמצעות מסוף Google Cloud, ה-CLI של gcloud, ה-API ל-REST או ספריות הלקוח של מנהל המשאבים.

מסוף

  1. עברו לדף IAM במסוף Google Cloud.

    כניסה לדף IAM

  2. בחירת פרויקט, תיקייה או ארגון.

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

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

gcloud

  1. במסוף Google Cloud, מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

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

    על מנת לקבל את מדיניות ההרשאה של המשאב, מריצים את הפקודה get-iam-policy עבור המשאב:

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

    ספקו את הערכים הבאים:

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

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

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

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

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

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

REST

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

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

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

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

שיטת ה-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:owner@example.com"
      ]
    }
  ]
}

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

הענקת או ביטול תפקיד בודד

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

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

הקצאת תפקיד אחד

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

מסוף

  1. עברו לדף IAM במסוף Google Cloud.

    כניסה לדף IAM

  2. בחירת פרויקט, תיקייה או ארגון.

  3. צריך לבחור חשבון משתמש על מנת לתת לו תפקיד:

    • על מנת לתת תפקיד לחשבון משתמש שכבר יש לו תפקידים אחרים במשאב, לחץ על Edit principal בשורה הזו. ולחץ על Add another role.

      על מנת להקצות תפקיד לחשבון שירות שמנוהל באמצעות Google, מסמנים את תיבת הסימון Include google-provide roles על מנת לראות את כתובת האימייל של המשתמש.

    • על מנת להקצות תפקיד לחשבון משתמש שאין לו תפקידים קיימים במשאב, לחץ על Grant access ומזינים את כתובת האימייל של חשבון המשתמש או מזהה אחר.

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

  5. אופציונלי: מוסיפים תנאי לתפקיד.

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

כך תפקיד לחשבון משתמש עבור יותר מפרויקט אחד, תיקייה אחת או ארגון אחד:

  1. במסוף Google Cloud, עברו לדף Manage resources:

    כניסה לדף Manage resources

  2. בחרו את כל המשאבים שברצונך להעניק להם הרשאות.

  3. אם חלונית המידע לא מוצגת, לוחצים על הצגת חלונית המידע. לוחצים על Permissions.

  4. צריך לבחור חשבון משתמש על מנת לתת לו תפקיד:

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

    • על מנת לתת תפקיד לחשבון משתמש שעדיין אין לו תפקידים אחרים, לוחצים על Add principal ואז מזינים את כתובת האימייל של חשבון המשתמש או מזהה אחר.

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

  6. אופציונלי: מוסיפים תנאי לתפקיד.

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

gcloud

  1. במסוף Google Cloud, מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. הפקודה add-iam-policy-binding מאפשרת להקצות תפקיד לחשבון משתמש במהירות.

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

    • RESOURCE_TYPE: סוג המשאב שברצונך לנהל את הגישה אליו. השתמש ב-projects, ב-resource-manager folders או ב-organizations.

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

    • PRINCIPAL: מזהה חשבון המשתמש או של החבר, שבדרך כלל יש אותו בצורה הבאה: PRINCIPAL_TYPE:ID. לדוגמה, user:my-user@example.com רשימה מלאה של הערכים האפשריים ב-PRINCIPAL זמינה בחומר העזר בנושא מדיניות.

      בסוג חשבון המשתמש user, שם הדומיין במזהה חייב להיות דומיין של Google Workspace או דומיין של Cloud Identity. לקבלת מידע נוסף על איך מגדירים דומיין ב-Cloud Identity. תוכל לעיין ב סקירה כללית על Cloud Identity

    • ROLE_NAME: שם התפקיד שברצונך לבטל. יש להזין תאריכים בפורמטים הבאים:

      • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
      • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
      • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

    • CONDITION: התנאי שברצונך להוסיף לקישור התפקידים. לא רוצה להוסיף תנאי? ניתן לך להשתמש בערך None. לקבלת מידע נוסף על התנאים זמין בסקירה הכללית על התנאים.

    להריץ את הפקודה הבאה:

    Linux, macOS או Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION
    

    Windows (PowerShell)‎

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION
    

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION
    

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

בטל תפקיד אחד

על מנת לבטל תפקיד אחד מחשבון משתמש:

מסוף

  1. עברו לדף IAM במסוף Google Cloud.

    כניסה לדף IAM

  2. בחירת פרויקט, תיקייה או ארגון.

  3. מחפשים את השורה שכוללת את חשבון המשתמש שברצונך לבטל את הגישה שלו. לאחר מכן, לחץ על Edit principal בשורה הזו.

  4. בלחיצה על Delete של התפקיד שברצונך לבטל, לחץ על Save.

gcloud

  1. במסוף Google Cloud, מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. על מנת לבטל במהירות תפקיד של משתמש, להוציא לפועל את הפקודה remove-iam-policy-binding:

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME

    ספקו את הערכים הבאים:

    • RESOURCE_TYPE: סוג המשאב שברצונך לנהל את הגישה אליו. השתמש ב-projects, ב-resource-manager folders או ב-organizations.

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

    • PRINCIPAL: מזהה של חשבון המשתמש או של המשתמש, שבדרך כלל מופיע בצורה הבאה: PRINCIPAL_TYPE:ID. לדוגמה: user:my-user@example.com רשימה מלאה של הערכים האפשריים ב-PRINCIPAL זמינה בחומר העזר בנושא מדיניות.

      בסוג חשבון המשתמש user, שם הדומיין במזהה חייב להיות דומיין של Google Workspace או דומיין שלCloud Identity. לקבלת מידע נוסף על איך מגדירים דומיין ב-Cloud Identity. תוכל לעיין ב סקירה כללית על Cloud Identity

    • ROLE_NAME: שם התפקיד שברצונכם לבטל. יש להזין תאריכים בפורמטים הבאים:

      • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
      • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
      • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

    לדוגמה, על מנת לבטל את התפקיד 'יצירת פרויקטים' מהמשתמש my-user@example.com בפרויקט my-project:

    gcloud projects remove-iam-policy-binding my-project \
        --member=user:my-user@example.com --role=roles/resourcemanager.projectCreator

הקצאה או ביטול של תפקידים מרובים באמצעות מסוף Google Cloud

ניתן להשתמש במסוף Google Cloud על מנת להעניק ולבטל כמה תפקידים לחשבון משתמש אחד:

  1. עברו לדף IAM במסוף Google Cloud.

    כניסה לדף IAM

  2. בחירת פרויקט, תיקייה או ארגון.

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

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

      על מנת לשנות את התפקידים של חשבון שירות שמנוהל באמצעות Google, מסמנים את התיבה Include google-role roles (הכללת תפקידים שהוקצו באמצעות Google) על מנת לראות את כתובת האימייל של המשתמש.

    • על מנת להקצות תפקידים לחשבון משתמש שאין לו תפקידים במשאב, לחצו על Grant Access ואז מזינים את כתובת האימייל של חשבון המשתמש או מזהה אחר של Google.

  4. עריכת תפקידי במאי:

    • על מנת להקצות תפקיד לחשבון משתמש שאין לו תפקידים קיימים במשאב, לחצו על Select a role ובחרו את התפקיד שברצונכם להקצות מהרשימה הנפתחת.
    • על מנת לתת תפקיד נוסף לחשבון המשתמש, לחצו על Add another role ובחרו את התפקיד שברצונכם להעניק מהרשימה הנפתחת.
    • על מנת להחליף תפקיד של משתמש אחד בתפקיד אחר, לחצו על התפקיד הקיים ובחרו את התפקיד שברצונכם להעניק מהרשימה הנפתחת.
    • על מנת לבטל אחד מהתפקידים של חשבון המשתמש, לחצו על הלחצן Delete של כל תפקיד שברצונכם לבטל.

    אתם יכולים גם להוסיף תנאי לתפקיד, לשנות את התנאי של תפקיד או להסיר את התנאי שלו.

  5. לוחצים עלשמירה.

העניקו או בטלו תפקידים מרובים באופן תוכנתי

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

  1. יש לקרוא את מדיניות ההרשאה הנוכחית באמצעות חיוג אל getIamPolicy().
  2. על מנת להוסיף או להסיר חשבונות משתמשים או קישורי תפקידים, עורכים את מדיניות ההרשאה באמצעות עורך טקסט או באמצעות תכנות.
  3. צריך לכתוב setIamPolicy() על מנת לעדכן את מדיניות ההרשאה.

ניתן להשתמש ב-CLI של gcloud, ב-REST API או בספריות הלקוח של Resource Manager על מנת לעדכן את מדיניות ההרשאה.

המדיניות הנוכחית בנושא הרשאה

gcloud

  1. במסוף Google Cloud, מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. על מנת לקבל את מדיניות ההרשאה של המשאב, מריצים את הפקודה get-iam-policy עבור המשאב:

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

    ספקו את הערכים הבאים:

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

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

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

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

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

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

REST

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

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

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

שיטת ה-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:owner@example.com"
      ]
    }
  ]
}

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

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

עריכת מדיניות ההרשאות

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

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

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

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

אלה ערכי ה-placeholder:

  • ROLE_NAME: שם התפקיד שברצונך להעניק לו. יש להזין תאריכים בפורמטים הבאים:

    • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: מזהים של חשבונות המשתמשים שרוצים להקצות להם את התפקיד.

    בדרך כלל, מזהים ראשיים מופיעים בפורמט הבא: PRINCIPAL-TYPE:ID. למשל, user:my-user@example.com. רשימה מלאה של הערכים שאפשר לכלול ב-PRINCIPAL זמינה בחומר העזר בנושא מדיניות.

    בסוג חשבון המשתמש user, שם הדומיין במזהה חייב להיות דומיין של Google Workspace או דומיין שלCloud Identity. לקבלת מידע נוסף על איך מגדירים דומיין ב-Cloud Identity. אפשר לעיין ב סקירה כללית על Cloud Identity

  • CONDITIONS: אופציונלי. כל התנאים שמציינים מתי תוענק גישה.

הקצה תפקיד

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

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

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

gcloud

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

לדוגמה, נניח שמדיניות ההרשאה כוללת את קישור התפקיד הבא, שמעניק את התפקיד 'בודק אבטחה' (roles/iam.securityReviewer) ל-kai@example.com:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

על מנת לתת את אותו התפקיד ל-raha@example.com, צריך להוסיף את raha@example.com לקישור התפקידים הקיים:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

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

לדוגמה, נניח שמדיניות ההרשאה כוללת את קישור התפקיד הבא, שמעניק את התפקיד 'בודק אבטחה' (roles/iam.securityReviewer) ל-kai@example.com:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

על מנת לתת את אותו התפקיד ל-raha@example.com, צריך להוסיף את raha@example.com לקישור התפקידים הקיים:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

C#

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


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Go

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

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

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

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class AddMember {

  // Adds a member to a preexisting role.
  public static void addMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-add@example.com";

    List<Binding> bindings = policy.getBindings();

    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        b.getMembers().add(member);
        System.out.println("Member " + member + " added to role " + role);
        return;
      }
    }

    System.out.println("Role not found in policy; member not added");
  }
}

Python

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

def modify_policy_add_member(policy: dict, role: str, member: str) -> dict:
    """Adds a new member to a role binding."""

    binding = next(b for b in policy["bindings"] if b["role"] == role)
    binding["members"].append(member)
    print(binding)
    return policy

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

gcloud

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

לדוגמה, על מנת להקצות את התפקיד 'אדמין של Compute Storage (roles/compute.storageAdmin)' ל-raha@example.com, מוסיפים את התפקיד הבא למערך bindings של מדיניות ההרשאה:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

REST

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

לדוגמה, על מנת להקצות את התפקיד 'אדמין של Compute Storage (roles/compute.storageAdmin)' ל-raha@example.com, מוסיפים את התפקיד הבא למערך bindings של מדיניות ההרשאה:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

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


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Java

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

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddBinding {

  // Adds a member to a role with no previous members.
  public static void addBinding(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/role-to-add";
    List<String> members = new ArrayList<>();
    members.add("user:member-to-add@example.com");

    Binding binding = new Binding();
    binding.setRole(role);
    binding.setMembers(members);

    policy.getBindings().add(binding);
    System.out.println("Added binding: " + binding.toString());
  }
}

Python

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

def modify_policy_add_role(policy: dict, role: str, member: str) -> dict:
    """Adds a new role binding to a policy."""

    binding = {"role": role, "members": [member]}
    policy["bindings"].append(binding)
    print(policy)
    return policy

ניתן לך להקצות רק תפקידים הקשורים לשירותי API שהופעלו. אם שירות מסוים, כמו Compute Engine, לא פעיל, לא ניתן לך להקצות תפקידים שקשורים אך ורק ל-Compute Engine. לקבלת מידע נוסף עיין ב הפעלה והשבתה של ממשקי API.

יש כמה אילוצים ייחודיים כשנותנים הרשאות לפרויקטים, במיוחד כשמקצה את התפקיד 'בעלים' (roles/owner). לקבלת מידע נוסף, עיין בprojects.setIamPolicy()מסמכי התיעוד.

ביטול תפקיד

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

gcloud

על מנת לבטל תפקיד, עורכים את מדיניות ה-JSON או YAML שמאפשרת את החזרת המדיניות באמצעות הפקודה get-iam-policy. השינוי הזה לא ייכנס לתוקף עד שתגדיר את מדיניות הרשאה המעודכנת.

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

REST

על מנת לבטל תפקיד, עורכים את מדיניות ה-JSON או YAML שמאפשרת את החזרת המדיניות באמצעות הפקודה get-iam-policy. השינוי הזה לא ייכנס לתוקף עד שתגדיר את מדיניות הרשאה המעודכנת.

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

C#

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


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Go

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

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

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

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class RemoveMember {

  // Removes member from a role; removes binding if binding contains 0 members.
  public static void removeMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-remove@example.com";

    List<Binding> bindings = policy.getBindings();
    Binding binding = null;
    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        binding = b;
      }
    }
    if (binding != null && binding.getMembers().contains(member)) {
      binding.getMembers().remove(member);
      System.out.println("Member " + member + " removed from " + role);
      if (binding.getMembers().isEmpty()) {
        policy.getBindings().remove(binding);
      }
      return;
    }

    System.out.println("Role not found in policy; member not removed");
    return;
  }
}

Python

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

def modify_policy_remove_member(policy: dict, role: str, member: str) -> dict:
    """Removes a  member from a role binding."""
    binding = next(b for b in policy["bindings"] if b["role"] == role)
    if "members" in binding and member in binding["members"]:
        binding["members"].remove(member)
    print(binding)
    return policy

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

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

gcloud

  1. במסוף Google Cloud, מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud מתחיל סשן של Cloud Shell ומופיעה הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. על מנת להגדיר את מדיניות ההרשאה של המשאב, מריצים את הפקודה set-iam-policy עבור המשאב:

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    ספקו את הערכים הבאים:

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

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

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

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

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

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

REST

השיטה setIamPolicy של מנהל המשאבים 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
}

על מנת לשלוח את הבקשה עליך להרחיב אחת מהאפשרויות הבאות:

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

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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.cloudresourcemanager.v3.model.SetIamPolicyRequest;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class SetPolicy {

  // Sets a project's policy.
  public static void setPolicy(Policy policy, String projectId) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    try {
      SetIamPolicyRequest request = new SetIamPolicyRequest();
      request.setPolicy(policy);
      Policy response = service.projects().setIamPolicy(projectId, request).execute();
      System.out.println("Policy set: " + response.toString());
    } catch (IOException e) {
      System.out.println("Unable to set policy: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def set_policy(project_id: str, policy: dict) -> dict:
    """Sets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )

    policy = (
        service.projects()
        .setIamPolicy(resource=project_id, body={"policy": policy})
        .execute()
    )
    print(policy)
    return policy

המאמרים הבאים

נסו זאת

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

התחל לעבוד בלי לשלם