【问题标题】:Custom IAM policy binding for a custom service account in GCPGCP 中自定义服务帐号的自定义 IAM 策略绑定
【发布时间】:2021-05-05 01:59:22
【问题描述】:

我创建了一个服务帐户mycustomsa@myproject.iam.gserviceaccount.com

遵循 GCP 最佳实践,我想使用它来运行名为 instance-1(尚未创建)的 GCE VM。

此虚拟机必须能够为 Stackdriver 写入日志和指标。

我确定了:

  • roles/monitoring.metricWriter
  • roles/logging.logWriter

但是:

  1. 您是否建议我应该使用任何其他角色? (即实例管理员)

  2. 我应该如何在项目级别设置 IAM 策略绑定以限制此服务帐户仅用于 GCE 和 instance-1

【问题讨论】:

  • 你想用这个服务帐号和这个虚拟机做什么?您需要访问哪些服务?
  • 1/2) 您的意思是要将新服务帐户分配为 VM 的默认服务帐户吗?如果是,则服务帐户只需要虚拟机在运行时(例如登录到 Stackdriver)或有人登录到该实例(通过 SSH)时必须执行的任务的角色。答案需要一个明确的列表,列出 VM 需要做什么以及它的用途。
  • 2/2) 您不能将服务帐户限制为仅分配给一个资源(在您的示例中为虚拟机)。您可以使用Conditional Role Bindings 来限制服务帐户可以访问的资源(按名称,例如 Bucket A)。
  • 据我所知,如果给定 API 的 IAM 允许,服务帐户可以获得对特定资源(实例)的权限。例如,可以将权限授予一个选定的 BigQuery 表或选定的数据集,而不是给定项目中的所有数据集或表。
  • 这里我有一个疑问:我知道我可以将SA直接分配给一个实例,但该实例却是先验存在的。但是,我认为“更好的做法”是在创建此类实例时分配 SA。那是对的吗?您还有其他建议吗?

标签: google-cloud-platform google-compute-engine google-iam


【解决方案1】:

要在 Stackdriver 上编写日志和指标,这些角色是合适的,您需要定义实例将执行的活动类型。然而,正如 John 在评论中指出的那样,使用条件角色绑定 1 可能很有用,因为它们可以添加到新的或现有的 IAM 策略中,以进一步控制对 Google Cloud 资源的访问。

至于 SA 的最佳实践,我建议通过以下方式使 SA 尽可能安全:

-指定谁可以充当服务帐户。作为服务帐户用户的用户可以间接访问该服务帐户有权访问的所有资源。因此,在向用户授予 serviceAccountUser 角色时要小心。

-仅授予服务帐户实现其目标所需的最少权限集。了解如何向所有类型的成员(包括服务帐号)授予角色。

-为每个服务创建服务帐户,仅具有该服务所需的权限。

-使用服务帐户的显示名称来跟踪服务帐户。创建服务帐号时,请使用服务帐号的用途填充其显示名称。

-为您的服务帐户定义命名约定。

-实施流程以自动轮换用户管理的服务帐户密钥。

-利用 IAM 服务帐户 API 来实现密钥轮换。

-使用 serviceAccount.keys.list() 方法或控制台中的日志查看器页面审核服务帐户和密钥。

-不要删除在 App Engine 或 Compute Engine 上运行实例正在使用的服务帐户,除非您希望这些应用程序失去对服务帐户的访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2012-03-31
    相关资源
    最近更新 更多