【问题标题】:How to manage GCP permissions to create a subscription and allow deletion of only the subscritpion created by this service account?如何管理 GCP 权限以创建订阅并只允许删除此服务帐户创建的订阅?
【发布时间】:2020-08-21 00:14:56
【问题描述】:

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

我想对我正在使用的服务帐户使用尽可能少的权限。目前,我已经创建了一个自定义角色,并授予了两个角色pubsub.subscriptions.create , pubsub.subscriptions.delete 的访问权限。

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

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

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

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

【问题讨论】:

  • 你提前知道订阅名的名称或模式吗?
  • 不是名称,而是我拥有的模式,我使用 UUID 生成订阅字符串。就像,如果生成的 UUID 是 uuid_genearted_1 订阅的名称将是 subscription_gen.uuid_generated_1
  • 您认为服务帐户可以删除具有此模式的任何订阅吗?或者是否存在与其他服务帐户创建的另一个订阅重叠的风险?
  • @guillaumeblaquiere 我不知道使用基于模式的条件。模式定义明确,对我有用。谢谢。
  • 太好了,我想在根据我这边的资源名称测试条件之前确定您的用例。但我必须得出结论,这是可行的!酷!!

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


【解决方案1】:

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

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

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

订阅创建者不会成为所创建对象的“管理员”,因为它可能在具有对象权限的访问管理服务中。如果可以在新创建的订阅上显式分配具有自定义角色的策略,则必须由具有可以管理权限的角色的帐户完成:例如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

【讨论】:

  • 我认为将权限绑定到方法是有意义的。如果过于关注 IAM,最好为 IAM 管理运行单独的服务。否则,我们可以授予普通帐户所需的权限。在我的例子中,由于模式定义明确(通常在大多数应用程序中它会明确定义),我可以使用该模式来限制访问。感谢您回答问题。
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多