【问题标题】:Service account can create PubSub subscriptions but can't read from them服务帐户可以创建 PubSub 订阅,但不能从中读取
【发布时间】:2018-04-07 05:35:38
【问题描述】:

我创建了一个打算在我们的开发环境中使用的服务帐户,并且由于它的凭据已检查到源代码控制中,我想将其访问权限锁定在最低限度。

当启动新主机时,我们的应用会创建一个新的 PubSub 订阅,监听新创建的订阅,然后在完成后将其删除。我们选择了这个模型而不是拥有许多预配置/硬编码的订阅,因为主机的数量会随着时间的推移而增加和减少,如果可能的话,我们不想要特定于主机的配置(以主机订阅映射的形式)等等。我们希望在本地开发环境中具有相同的行为,非常适合调试。

我创建了一个特定的“开发”主题并授予我们的开发服务帐户 Pub/Sub Admin 角色,允许它附加订阅到该主题。我还授予服务帐户项目级权限,允许它创建订阅。服务帐户可以成功创建新订阅并将其附加到主题,但是当它尝试从新订阅中读取时,我收到权限被拒绝错误。

我猜这是因为在检查新创建的订阅时,我注意到创建它的服务帐户没有被授予对该订阅的任何类型的权限。我希望创建订阅的帐户至少拥有它的读取权限。

有没有办法让服务帐户创建订阅,将它们附加到某个主题,然后从该订阅中读取...而不授予服务帐户访问任何其他订阅或主题的权限?我知道我可以只给服务帐户一个“更高级别”的角色来读取所有订阅,但这违背了拥有一个仅限开发帐户的目的。

【问题讨论】:

    标签: google-cloud-platform google-cloud-pubsub google-cloud-iam


    【解决方案1】:

    在您的服务帐户创建订阅后,它可以对订阅调用 setIamPolicy 以授予自己对它的读取权限。之所以可行,是因为您为您的服务帐户授予了项目的 pubsub 管理员角色,其中包括对项目中的任何订阅调用 setIamPolicy 的能力。

    https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/setIamPolicy

    【讨论】:

    • 因为这是一个开发服务帐户,我不希望它能够在项目中的 any 订阅上调用 SetIamPolicy(),只有附加到开发的- 我授予它权限的唯一主题。有没有办法授予服务帐户权限以在非项目范围内读取新创建的订阅?如果权限仅针对每个项目而不是针对每个主题,那么除了创建一个新项目之外,没有办法拥有测试帐户(没有生产主题/订阅访问权限)...?
    • 啊,抱歉。我误解了。我不知道出于 IAM 策略的目的对主题或订阅进行分组的任何方式,并且看起来无法在创建时对订阅指定 IAM 策略。不理想,但您可以创建一个新项目只是为了持有订阅。
    • Brentonium,您找到解决方案了吗?我有类似的情况,我希望服务将自己添加为主题的订阅者。他们有很多,他们会来来去去,所以我不想通过 Cloud Console 手动管理他们的个人订阅。
    猜你喜欢
    • 2021-04-11
    • 2021-10-19
    • 2020-08-21
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    相关资源
    最近更新 更多