בקרת גישה באמצעות ניהול זהויות והרשאות גישה (IAM)

במסמך הזה מתוארות אפשרויות בקרת הגישה שזמינות לכם ב-Pub/Sub.

סקירה כללית

ב-Pub/Sub נעשה שימוש בניהול זהויות והרשאות גישה (IAM) לבקרת גישה.

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

ב-Pub/Sub, אפשר להגדיר בקרת גישה ברמת הפרויקט וברמת המשאב הבודד. הנה כמה דוגמאות לשימוש בבקרת גישה ב-Pub/Sub:

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

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

  • לתת גישה לכל משאבי Pub/Sub בפרויקט לקבוצת מפתחים.

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

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

סוגי התפקידים ב-Pub/Sub

בדומה למוצרים אחרים Google Cloud , ב-Pub/Sub יש תמיכה בשלושה סוגים של תפקידים:

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

  • תפקידים מוגדרים מראש: תפקידים מוגדרים מראש מאפשרים גישה פרטנית לGoogle Cloud משאבים ספציפיים. מידע נוסף על תפקידים מוגדרים מראש זמין במאמר תפקידים מוגדרים מראש. התפקידים המוגדרים מראש ב-Pub/Sub מפורטים בהמשך הקטע הזה.

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

הרשאות Pub/Sub שנדרשות

בקטעים הבאים מפורטות הרשאות Pub/Sub שנדרשות לגישה למשאבי Pub/Sub שונים.

ההרשאות הנדרשות לנושאים

בטבלה הבאה מפורטות ההרשאות הנדרשות לכל method של Pub/Sub API שקשורה לנושאים. בטבלה מפורטת כל method, ההרשאה הנדרשת ב-IAM כדי להפעיל אותה ותיאור של הפעולה שהיא מבצעת.

‏Method תיאור ההרשאה הנדרשת
projects.topics.create יוצר את הנושא שצוין עם השם שצוין. pubsub.topics.create בפרויקט בענן שמכיל את האפליקציה
projects.topics.delete מחיקת הנושא עם השם שצוין. pubsub.topics.delete בנושא המבוקש
projects.topics.get אחזור ההגדרה של נושא. pubsub.topics.get בנושא המבוקש
projects.topics.getIamPolicy מקבל את מדיניות בקרת הגישה ב-IAM לנושא. pubsub.topics.getIamPolicy בנושא המבוקש
projects.topics.list מוצגת רשימה של כל הנושאים. pubsub.topics.list בפרויקט בענן המבוקש
projects.topics.patch מעדכנים נושא קיים. pubsub.topics.update בנושא המבוקש
projects.topics.publish הוספה של הודעה אחת או יותר לנושא. pubsub.topics.publish בנושא המבוקש
projects.topics.setIamPolicy הגדרת מדיניות בקרת הגישה ב-IAM לנושא. pubsub.topics.setIamPolicy בנושא המבוקש
projects.topics.testIamPermissions מחזירה את ההרשאות שיש לפונקציית קריאה חוזרת (caller) במשאב שצוין. ללא

הרשאות שנדרשות למינויים

בטבלה הבאה מפורטות ההרשאות הנדרשות לכל method של Pub/Sub API שקשורה למינויים. בטבלה מפורטת כל הרשאת IAM שנדרשת כדי להפעיל כל method, וגם תיאור של הפעולה שה-method מבצעת.

‏Method תיאור ההרשאה הנדרשת
projects.subscriptions.acknowledge מאשר את ההודעות שמשויכות ל-ack_ids ב-AcknowledgeRequest. pubsub.subscriptions.consume במינוי המבוקש
projects.subscriptions.create יצירת מינוי לנושא מסוים. pubsub.subscriptions.create בפרויקט בענן שמכיל את הנושא וpubsub.topics.attachSubscription בנושא המבוקש. כדי ליצור מינוי S בפרויקט א שמצורף לנושא T בפרויקט ב, צריך להעניק את ההרשאות המתאימות גם בפרויקט א וגם בנושא T. במקרה הזה, אפשר לתעד את פרטי הזהות של המשתמש ביומני הביקורת של פרויקט ב'.
projects.subscriptions.delete מחיקת מינוי קיים. pubsub.subscriptions.delete במינוי המבוקש
projects.subscriptions.detach מנתק מינוי מנושא. pubsub.topics.detachSubscription בנושא שהמינוי משויך אליו.
projects.subscriptions.get אחזור פרטי ההגדרה של מינוי. pubsub.subscriptions.get במינוי המבוקש
projects.subscriptions.getIamPolicy קבלת מדיניות בקרת הגישה ב-IAM למינוי. pubsub.subscriptions.getIamPolicy במינוי המבוקש
projects.subscriptions.list רשימות שתואמות למינויים. pubsub.subscriptions.list בפרויקט בענן המבוקש
projects.subscriptions.modifyAckDeadline משנה את הזמן הקצוב לתגובה עבור הודעה ספציפית. pubsub.subscriptions.consume במינוי המבוקש
projects.subscriptions.modifyPushConfig משנה את ה-pushConfig של מינוי ספציפי. pubsub.subscriptions.update במינוי המבוקש
projects.subscriptions.patch עדכון של מינוי קיים. pubsub.subscriptions.update במינוי המבוקש
projects.subscriptions.pull שליפת הודעות מהשרת. pubsub.subscriptions.consume במינוי המבוקש
projects.subscriptions.seek חיפוש מינוי קיים בנקודת זמן מסוימת או בצילום מסך. pubsub.subscriptions.consume במינוי המבוקש וpubsub.snapshots.seek ב-snapshot המבוקש, אם יש כזה.
projects.subscriptions.setIamPolicy הגדרת מדיניות בקרת הגישה ב-IAM למינוי. pubsub.subscriptions.setIamPolicy במינוי המבוקש
projects.subscriptions.testIamPermissions מחזירה את ההרשאות שיש לפונקציית קריאה חוזרת (caller) במשאב שצוין. ללא

הרשאות נדרשות לסכימות

בטבלה הבאה מפורטות ההרשאות הנדרשות לכל method של Pub/Sub API שקשור לסכימות. בטבלה מפורטת כל הרשאת IAM שנדרשת כדי להפעיל כל method, וגם תיאור של הפעולה שה-method מבצעת.

‏Method תיאור ההרשאה הנדרשת
projects.schemas.commit שמירת גרסה חדשה של הסכימה. pubsub.schemas.commit on the requested schema
projects.schemas.create יוצר סכימה. pubsub.schemas.create בפרויקט בענן שמכיל את האפליקציה
projects.schemas.delete מחיקת סכימה. pubsub.schemas.delete on the requested schema
projects.schemas.deleteRevision מחיקה של גרסה ספציפית של סכימה. pubsub.schemas.delete on the requested schema
projects.schemas.get קבלת סכימה. pubsub.schemas.get on the requested schema
projects.schemas.getIamPolicy מקבל את מדיניות בקרת הגישה ב-IAM עבור סכימה. pubsub.schemas.getIamPolicy בסכימה המבוקשת
projects.schemas.list הצגת סכימות בפרויקט. pubsub.schemas.list בפרויקט בענן המבוקש
projects.schemas.listRevisions מציגה רשימה של כל הגרסאות של הסכימה שצוין השם שלה. pubsub.schemas.listRevisions on the requested schema
projects.schemas.rollback יוצר גרסה חדשה של סכימה מגרסה קודמת. pubsub.schemas.rollback on the requested schema
projects.schemas.validate מאמת הגדרת סכימה. pubsub.schemas.validate בפרויקט בענן שמכיל את האפליקציה
projects.schemas.validateMessage מאמת הודעה מול סכימה. pubsub.schemas.validate בפרויקט בענן שמכיל את האפליקציה

ההרשאות שנדרשות לצילום תמונות

בטבלה הבאה מפורטות ההרשאות הנדרשות לכל method של Pub/Sub API שקשור לצילומי מצב. בטבלה מפורטת כל הרשאת IAM שנדרשת כדי להפעיל כל method, וגם תיאור של הפעולה שה-method מבצעת.

שיטת REST תיאור ההרשאה הנדרשת
projects.snapshots.create יוצר קובץ snapshot מהמינוי המבוקש. pubsub.snapshots.create בפרויקט בענן שמכיל את המינוי וpubsub.subscriptions.consume במינוי המקור.
projects.snapshots.delete הסרה של תמונת מצב קיימת. pubsub.snapshots.delete ב-snapshot המבוקש
projects.snapshots.getIamPolicy קבלת מדיניות בקרת הגישה ב-IAM עבור קובץ snapshot. pubsub.snapshots.getIamPolicy ב-snapshot המבוקש
projects.snapshots.list רשימה של תמונות המצב הקיימות. pubsub.snapshots.list בפרויקט בענן המבוקש
projects.snapshots.patch מעדכן תמונת מצב קיימת. pubsub.snapshots.update בקובץ ה-snapshot המבוקש
projects.snapshots.setIamPolicy הגדרת מדיניות בקרת הגישה ב-IAM לקובץ snapshot. pubsub.snapshots.setIamPolicy בקובץ ה-snapshot המבוקש
projects.snapshots.testIamPermissions מחזירה את ההרשאות שיש לפונקציית קריאה חוזרת (caller) במשאב שצוין. ללא

תפקידים זמינים ב-Pub/Sub

בטבלה הבאה מפורטים כל התפקידים ב-Pub/Sub וההרשאות שמשויכות לכל תפקיד:

Role Permissions

(roles/pubsub.admin)

Provides full access to topics and subscriptions.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

pubsub.*

  • pubsub.messageTransforms.validate
  • pubsub.schemas.attach
  • pubsub.schemas.commit
  • pubsub.schemas.create
  • pubsub.schemas.delete
  • pubsub.schemas.get
  • pubsub.schemas.getIamPolicy
  • pubsub.schemas.list
  • pubsub.schemas.listRevisions
  • pubsub.schemas.rollback
  • pubsub.schemas.setIamPolicy
  • pubsub.schemas.validate
  • pubsub.snapshots.create
  • pubsub.snapshots.createTagBinding
  • pubsub.snapshots.delete
  • pubsub.snapshots.deleteTagBinding
  • pubsub.snapshots.get
  • pubsub.snapshots.getIamPolicy
  • pubsub.snapshots.list
  • pubsub.snapshots.listEffectiveTags
  • pubsub.snapshots.listTagBindings
  • pubsub.snapshots.seek
  • pubsub.snapshots.setIamPolicy
  • pubsub.snapshots.update
  • pubsub.subscriptions.consume
  • pubsub.subscriptions.create
  • pubsub.subscriptions.createTagBinding
  • pubsub.subscriptions.delete
  • pubsub.subscriptions.deleteTagBinding
  • pubsub.subscriptions.get
  • pubsub.subscriptions.getIamPolicy
  • pubsub.subscriptions.list
  • pubsub.subscriptions.listEffectiveTags
  • pubsub.subscriptions.listTagBindings
  • pubsub.subscriptions.setIamPolicy
  • pubsub.subscriptions.update
  • pubsub.topics.attachSubscription
  • pubsub.topics.create
  • pubsub.topics.createTagBinding
  • pubsub.topics.delete
  • pubsub.topics.deleteTagBinding
  • pubsub.topics.detachSubscription
  • pubsub.topics.get
  • pubsub.topics.getIamPolicy
  • pubsub.topics.list
  • pubsub.topics.listEffectiveTags
  • pubsub.topics.listTagBindings
  • pubsub.topics.publish
  • pubsub.topics.setIamPolicy
  • pubsub.topics.update
  • pubsub.topics.updateTag

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/pubsub.editor)

Provides access to modify topics and subscriptions, and access to publish and consume messages.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

pubsub.messageTransforms.validate

pubsub.schemas.attach

pubsub.schemas.commit

pubsub.schemas.create

pubsub.schemas.delete

pubsub.schemas.get

pubsub.schemas.list

pubsub.schemas.listRevisions

pubsub.schemas.rollback

pubsub.schemas.validate

pubsub.snapshots.create

pubsub.snapshots.createTagBinding

pubsub.snapshots.delete

pubsub.snapshots.deleteTagBinding

pubsub.snapshots.get

pubsub.snapshots.list

pubsub.snapshots.listEffectiveTags

pubsub.snapshots.listTagBindings

pubsub.snapshots.seek

pubsub.snapshots.update

pubsub.subscriptions.consume

pubsub.subscriptions.create

pubsub.subscriptions.createTagBinding

pubsub.subscriptions.delete

pubsub.subscriptions.deleteTagBinding

pubsub.subscriptions.get

pubsub.subscriptions.list

pubsub.subscriptions.listEffectiveTags

pubsub.subscriptions.listTagBindings

pubsub.subscriptions.update

pubsub.topics.attachSubscription

pubsub.topics.create

pubsub.topics.createTagBinding

pubsub.topics.delete

pubsub.topics.deleteTagBinding

pubsub.topics.detachSubscription

pubsub.topics.get

pubsub.topics.list

pubsub.topics.listEffectiveTags

pubsub.topics.listTagBindings

pubsub.topics.publish

pubsub.topics.update

pubsub.topics.updateTag

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/pubsub.publisher)

Provides access to publish messages to a topic.

Lowest-level resources where you can grant this role:

  • Topic

pubsub.topics.publish

(roles/pubsub.subscriber)

Provides access to consume messages from a subscription and to attach subscriptions to a topic.

Lowest-level resources where you can grant this role:

  • Snapshot
  • Subscription
  • Topic

pubsub.snapshots.seek

pubsub.subscriptions.consume

pubsub.topics.attachSubscription

(roles/pubsub.viewer)

Provides access to view topics and subscriptions.

Lowest-level resources where you can grant this role:

  • Schema
  • Snapshot
  • Subscription
  • Topic

pubsub.messageTransforms.validate

pubsub.schemas.get

pubsub.schemas.list

pubsub.schemas.listRevisions

pubsub.schemas.validate

pubsub.snapshots.get

pubsub.snapshots.list

pubsub.snapshots.listEffectiveTags

pubsub.snapshots.listTagBindings

pubsub.subscriptions.get

pubsub.subscriptions.list

pubsub.subscriptions.listEffectiveTags

pubsub.subscriptions.listTagBindings

pubsub.topics.get

pubsub.topics.list

pubsub.topics.listEffectiveTags

pubsub.topics.listTagBindings

resourcemanager.projects.get

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

Service agent roles

Service agent roles should only be granted to service agents.

Role Permissions

(roles/pubsub.serviceAgent)

Grants Cloud Pub/Sub Service Account access to manage resources.

iam.serviceAccounts.get

iam.serviceAccounts.getAccessToken

iam.serviceAccounts.getOpenIdToken

iam.serviceAccounts.implicitDelegation

iam.serviceAccounts.list

iam.serviceAccounts.signBlob

iam.serviceAccounts.signJwt

resourcemanager.projects.get

resourcemanager.projects.list

serviceusage.services.use

שליטה בגישה דרך מסוף Google Cloud

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

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

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

    כניסה לדף IAM

  2. בוחרים את הפרויקט הרצוי.

  3. לוחצים על הוספה.

  4. מקלידים שם ראשי אחד או יותר.

  5. ברשימה Select a role, בוחרים את התפקיד שרוצים להקצות.

  6. לוחצים על Save.

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

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

  1. נכנסים לרשימת Topics של Pub/Sub במסוף Google Cloud .

    לדף Topics

  2. במידת הצורך, בוחרים את הפרויקט שמופעל בו Pub/Sub.

  3. מבצעים אחת מהפעולות הבאות:

    • כדי להגדיר תפקידים לנושא אחד או יותר, בוחרים את הנושאים.

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

  4. אם חלונית המידע מוסתרת, לוחצים על Show info panel.

  5. בכרטיסייה Permissions, לוחצים על Add principal.

  6. מקלידים שם ראשי אחד או יותר.

  7. ברשימה Select a role, בוחרים את התפקיד שרוצים להקצות.

  8. לוחצים על Save.

שליטה בגישה באמצעות IAM API

ה-API של IAM ב-Pub/Sub מאפשר להגדיר ולקבל מדיניות בנושאים ובמינויים ספציפיים בפרויקט, ולבדוק את ההרשאות של משתמש למשאב נתון. כמו במקרה של שיטות Pub/Sub רגילות, אפשר להפעיל את השיטות של IAM API דרך ספריות הלקוח, דרך API Explorer או ישירות דרך HTTP.

שימו לב שאי אפשר להשתמש ב-Pub/Sub IAM API כדי לנהל מדיניות ברמת הפרויקט. Google Cloud

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

טעינת מדיניות

השיטה getIamPolicy() מאפשרת לקבל מדיניות קיימת. השיטה הזו מחזירה אובייקט JSON שמכיל את המדיניות שמשויכת למשאב.

הנה קוד לדוגמה לקבלת מדיניות למינוי:

C#‎

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# ‎ במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.


using Google.Cloud.Iam.V1;
using Google.Cloud.PubSub.V1;

public class GetSubscriptionIamPolicySample
{
    public Policy GetSubscriptionIamPolicy(string projectId, string subscriptionId)
    {
        PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
        SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
        Policy policy = publisher.IAMPolicyClient.GetIamPolicy(new GetIamPolicyRequest
        {
            ResourceAsResourceName = subscriptionName
        });
        return policy;
    }
}

gcloud

קבלת מדיניות המינויים:

gcloud pubsub subscriptions get-iam-policy \
   projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \
   --format json

פלט:

   {
     "etag": "BwUjMhCsNvY=",
     "bindings": [
       {
         "role": "roles/pubsub.admin",
         "members": [
           "user:user-1@gmail.com"
         ]
       },
       {
         "role": "roles/pubsub.editor",
         "members": [
           "serviceAccount:service-account-2@appspot.gserviceaccount.com",
           "user:user-3@gmail.com"
         ]
       }
     ]
   }

המשך

בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub ‏ (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברה לגרסה v2. כדי לראות רשימה של דוגמאות קוד מגרסה 1, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Go API.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/pubsub/v2"
)

func getIAMPolicy(w io.Writer, projectID, subscription string) error {
	// projectID := "my-project-id"
	// subscription := "projects/my-project/subscriptions/my-sub"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	req := &iampb.GetIamPolicyRequest{
		Resource: subscription,
	}
	policy, err := client.SubscriptionAdminClient.GetIamPolicy(ctx, req)
	if err != nil {
		return fmt.Errorf("Policy: %w", err)
	}
	for _, b := range policy.Bindings {
		for _, m := range b.Members {
			fmt.Fprintf(w, "role: %s, member: %s\n", b.Role, m)
		}
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.


import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import com.google.pubsub.v1.ProjectSubscriptionName;
import java.io.IOException;

public class GetSubscriptionPolicyExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String subscriptionId = "your-subscription-id";

    getSubscriptionPolicyExample(projectId, subscriptionId);
  }

  public static void getSubscriptionPolicyExample(String projectId, String subscriptionId)
      throws IOException {
    try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
      ProjectSubscriptionName subscriptionName =
          ProjectSubscriptionName.of(projectId, subscriptionId);
      GetIamPolicyRequest getIamPolicyRequest =
          GetIamPolicyRequest.newBuilder().setResource(subscriptionName.toString()).build();
      Policy policy = subscriptionAdminClient.getIamPolicy(getIamPolicyRequest);
      System.out.println("Subscription policy: " + policy);
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function getSubscriptionPolicy(subscriptionNameOrId) {
  // Retrieves the IAM policy for the subscription
  const [policy] = await pubSubClient
    .subscription(subscriptionNameOrId)
    .iam.getPolicy();

  console.log(`Policy for subscription: ${JSON.stringify(policy.bindings)}.`);
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.

/**
 * TODO(developer): Uncomment this variable before running the sample.
 */
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';

// Imports the Google Cloud client library
import {PubSub, Policy} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function getSubscriptionPolicy(subscriptionNameOrId: string) {
  // Retrieves the IAM policy for the subscription
  const [policy]: [Policy] = await pubSubClient
    .subscription(subscriptionNameOrId)
    .iam.getPolicy();

  console.log(`Policy for subscription: ${JSON.stringify(policy.bindings)}.`);
}

PHP

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של PHP במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub PHP API.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Prints the policy for a PubSub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function get_subscription_policy($projectId, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $subscription = $pubsub->subscription($subscriptionName);
    $policy = $subscription->iam()->policy();
    print_r($policy);
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.

from google.cloud import pubsub_v1

# TODO(developer): Choose an existing subscription.
# project_id = "your-project-id"
# subscription_id = "your-subscription-id"

client = pubsub_v1.SubscriberClient()
subscription_path = client.subscription_path(project_id, subscription_id)

policy = client.get_iam_policy(request={"resource": subscription_path})

print("Policy for subscription {}:".format(subscription_path))
for binding in policy.bindings:
    print("Role: {}, Members: {}".format(binding.role, binding.members))

client.close()

Ruby

בדוגמה הבאה נעשה שימוש בספריית הלקוח של Pub/Sub ב-Ruby, גרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה לגרסה v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.

# subscription_id = "your-subscription-id"

pubsub = Google::Cloud::PubSub.new

policy = pubsub.iam.get_iam_policy \
  resource: pubsub.subscription_path(subscription_id)

puts "Subscription policy:"
puts policy.bindings.first.role
הנה קוד לדוגמה לקבלת מדיניות בנושא מסוים:

C#‎

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# ‎ במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.


using Google.Cloud.Iam.V1;
using Google.Cloud.PubSub.V1;

public class GetTopicIamPolicySample
{
    public Policy GetTopicIamPolicy(string projectId, string topicId)
    {
        PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
        TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
        Policy policy = publisher.IAMPolicyClient.GetIamPolicy(new GetIamPolicyRequest
        {
            ResourceAsResourceName = topicName
        });
        return policy;
    }
}

gcloud

קבלת המדיניות בנושא

gcloud pubsub topics get-iam-policy \
    projects/${PROJECT}/topics/${TOPIC} \
    --format json

פלט:

{
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "role":" roles/pubsub.viewer",
      "members": [
        "user:user-1@gmail.com"
      ]
    }
  ]
}

המשך

בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub ‏ (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברה לגרסה v2. כדי לראות רשימה של דוגמאות קוד מגרסה 1, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Go API.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/pubsub/v2"
)

func getIAMPolicy(w io.Writer, projectID, topicID string) error {
	// projectID := "my-project-id"
	// topicID := "my-topic"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	req := &iampb.GetIamPolicyRequest{
		Resource: fmt.Sprintf("projects/%s/topics/%s", projectID, topicID),
	}
	policy, err := client.TopicAdminClient.GetIamPolicy(ctx, req)
	if err != nil {
		return fmt.Errorf("Policy: %w", err)
	}
	for _, b := range policy.Bindings {
		for _, m := range b.Members {
			fmt.Fprintf(w, "role: %s, member: %s\n", b.Role, m)
		}
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר תחילת העבודה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.


import com.google.cloud.pubsub.v1.TopicAdminClient;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy