如何管理 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.

的访问权限

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

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

  2. 是否有为资源(主题、订阅、计算引擎等)创建服务帐户admin/editor的方法由这个帐户创建?类似于 IAM 角色 - 在资源创建后成为管理员。

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

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

在 Google IAM 中 权限对应 1:1 与 REST 方法。要调用方法,调用者需要该权限。换句话说,在方法上授予权限以便调用它们,并且不在对象上授予权限以便modify/rename/delete它们,这在您的情况下是必要的。你想删除某个对象,对吧?

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

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

Understanding IAM custom roles

Cloud IAM Documentation > Understanding roles > Pub/Sub roles

Access Control > Required permissions

Access Control > Roles