服务帐户可以创建PubSub订阅但无法从中读取

时间:2017-10-26 00:43:44

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

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

当启动新主机时,我们的应用程序会创建一个新的PubSub订阅,侦听新创建的订阅,然后在完成后删除它。我们选择此模型而不是拥有多个预配置/硬编码订阅,因为主机数量随着时间的推移而不断扩大和缩小,如果可能,我们不希望特定于主机的配置(以主机订阅地图的形式),我们希望在本地开发环境中具有相同的行为,以便进行调试。

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

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

服务帐户是否有办法创建订阅,将它们附加到主题,然后从该订阅中读取...而不是让服务帐户访问任何其他订阅或主题?我知道我可以给服务帐户一个更高的级别"具有访问权限的角色可以读取所有订阅,但这会破坏拥有仅开发帐户的目的。

1 个答案:

答案 0 :(得分:0)

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

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