gpt4 book ai didi

java - 通过 IAM ServiceAccount 进行跨项目 PubSub 订阅

转载 作者:行者123 更新时间:2023-12-01 10:19:35 27 4
gpt4 key购买 nike

我有两个项目 Project-A 和 Project-B。

在 Project-A 上,我有一个服务帐户 loader@project-a.iam.gserviceaccount.com,我想用它来读取来自 Project-B PubSub 主题的消息。

我已在 Project-B projects/project-b/subscriptions/data 上创建了主题订阅。然后在“权限”选项卡中添加 loader@project-a.iam.gserviceaccount.com 作为订阅者。我相信它应该给我访问权限。

但是如果我尝试:

TestIamPermissionsRequest iamreq = new TestIamPermissionsRequest();
iamreq.setPermissions(Arrays.asList(
"pubsub.subscriptions.consume",
"pubsub.subscriptions.get"
));
pubsub.projects().subscriptions()
.testIamPermissions(topicSubscription, iamreq).execute();

它返回空的权限列表。

对于实际的拉取请求:

PullRequest pull = new PullRequest();
pull.setMaxMessages(1);
pull.setReturnImmediately(true);
pubsub.projects().subscriptions().pull(topicSubsription, pull).execute();

它失败了:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "User not authorized to perform this action.",
"reason" : "forbidden"
} ],
"message" : "User not authorized to perform this action.",
"status" : "PERMISSION_DENIED"
}

我已经仔细检查了服务帐户是否在订阅者列表中,还尝试再次删除/添加它等。尝试过不同的项目。它不会改变任何东西。

如果我在同一云项目下有 PubSub 主题订阅和服务帐户,那么它对于 testIamPermissionspull 请求都可以正常工作。这是否意味着 IAM 服务帐户无法用于从其他项目访问 PubSub?

请注意,它适用于从其他项目访问存储。这意味着该问题仅针对 PubSub。这就是为什么我认为我错过了 PubSub 配置方面的一些内容。但到底是什么?

最佳答案

要从主题订阅中使用,应将“订阅者”角色赋予订阅。遗憾的是,目前无法通过 Cloud Console 实现这一点。

问题是 Cloud Console 具有误导性,通过选择一个主题,我希望也设置主题订阅的权限(因为毕竟没有单独的主题订阅 UI)。但它不是这样工作的,权限表单仅将更改应用于选定的主题,忽略所有现有的主题订阅。基本上您无法查看或编辑订阅者权限,目前没有这样的 UI。

PS 不过,有一种方法可以通过 API 来做到这一点。但它不适合我的情况

关于java - 通过 IAM ServiceAccount 进行跨项目 PubSub 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35693962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com