关于google cloud pubsub:如何管理创建订阅的GCP权限,只允许删除该服务帐号创建的订阅?

How to manage GCP permissions to create a subscription and allow deletion of only the subscritpion created by this service account?

我正在尝试在应用程序运行时创建订阅,代码应该能够创建订阅并在完成后清理它。

我想以对我正在使用的服务帐户的最低权限执行此操作。现在,我已经创建了一个自定义角色,并授予了对角色 pubsub.subscriptions.create , pubsub.subscriptions.delete.

的两个访问权限

虽然这允许创建和清理订阅,但它不仅允许删除当前订阅,还允许删除同一项目中其他用户创建的订阅。

  • 如何分配权限,以便能够在 Pub/Sub 中创建订阅,删除此服务帐户创建的订阅?
    另一种说法是,我怎样才能在运行时创建订阅并仅修改此订阅的权限以包含 pubsub.subscriptions.delete。 (使用相同的服务帐户)。

  • 有没有办法为该帐户创建的资源(主题、订阅、计算引擎等)创建服务帐户管理员/编辑器?类似于 IAM 角色 - 创建资源后成为管理员。

  • 相关文档链接:
    https://cloud.google.com/pubsub/docs/access-control


    由于 Google IAM 的设计限制,这是不可能的。

    在 Google IAM 中,权限与 REST 方法是 1:1 对应的。要调用方法,调用者需要该权限。换句话说,权限被授予调用它们的方法,而不是对象,以便修改/重命名/删除它们,这在您的情况下是必要的。你想删除某个对象,对吧?

    要获得更精细的访问权限,您需要在订阅对象上显式分配具有自定义角色的策略,但您几乎无法在项目级别以下分配 Pub/Sub 自定义角色。

    订阅创建者不会成为所创建对象的"管理员",因为它可能在具有对象权限的访问管理服务中。如果可以在新创建的订阅上显式分配具有自定义角色的策略,则必须由具有可以管理权限的角色的帐户完成:例如 pubsub.admin。这意味着除了具有 pubsub.subscriptions.create*.delete 权限的现有自定义角色之外,您还必须将此角色授予您的服务帐户。一旦你这样做了,最小权限原则就变得毫无意义。

    了解 IAM 自定义角色

    Cloud IAM 文档 > 了解角色 > Pub/Sub 角色

    访问控制> 所需权限

    访问控制>角色