限制服务帐户可以配置的角色和资源的最佳实践

Posted

技术标签:

【中文标题】限制服务帐户可以配置的角色和资源的最佳实践【英文标题】:Best practice to limit what roles and resources service account can provision 【发布时间】:2021-12-16 02:13:45 【问题描述】:

我有一个正在用于 Terraform 的管道中的服务帐户。目前,它具有所有者角色,但我想限制它可以通过 Terraform 配置分配的角色。我想避免用户可以将其角色提升为所有者角色并绕过管道的情况。这也包括负责审核和批准的用户。

我正在关注本指南,但它显示了分配仅分配角色的角色,我还需要部署资源。 https://cloud.google.com/iam/docs/setting-limits-on-granting-roles#use-cases


      "members": [
        "finn@example.com"
      ],
      "role": "roles/resourcemanager.projectIamAdmin",
      "condition": 
        "title": "only_billing_roles",
        "description": "Only allows changes to role bindings for billing accounts",
        "expression":
          "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/billing.admin', 'roles/billing.user'])"
      
    

有没有办法在服务帐户上指定所有者角色,然后限制它可以分配的角色和可以部署的资源?

【问题讨论】:

角色包含一组允许您对资源执行特定操作的权限。您还可以选择允许委托人为项目、文件夹或组织中的特定资源设置 IAM 策略的角色。Example。 Compute Admin Role 表示它完全控制所有 Compute Engine 资源。欲了解更多信息,请参阅roles。 我希望服务帐户能够部署所有资源,但不能分配所有角色。有没有一种直接的方法可以在不创建自定义角色的怪物的情况下做到这一点? 我在这里看到 2 个选项 - 创建一个具有您需要的所有权限的自定义角色,但这会很麻烦。第二个选项是在运行 terraform 时提升服务帐户的角色并在之后将其删除 @Prany 第二个选项几乎听起来像是要走的路,但它仍然不会阻止用户在 Terraform 配置中为自己分配所有者角色。我真的需要限制服务帐户能够分配某些角色。我认为繁琐的选择是我唯一的方法。 【参考方案1】:

当您创建某个 Google Cloud resources 时,您可以选择附加服务帐号。附加的服务帐号充当在资源上运行的任何作业的身份,允许作业向 Google Cloud API 进行身份验证。

对于大多数 Google Cloud 服务,用户需要impersonate a service account 的权限才能将该服务帐号附加到资源。这意味着用户需要服务帐户的 iam.serviceAccounts.actAs 权限。

而且,当您在资源级别将所有者角色授予任何服务帐户时,它已经在资源级别授予编辑和管理角色权限。如果您对授予的权限有一定的要求,我建议create custom roles 并专门添加您要授予的权限。这将确保严格遵守最小权限原则。

有关自定义角色的更多信息,请参阅doc。

还请查看Securing Service Accounts 的最佳实践。

【讨论】:

以上是关于限制服务帐户可以配置的角色和资源的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak 授权 - 最佳实践角色与组

Blazor WebAssembly - 用户帐户和身份服务器的最佳实践

阿里最新开源配置中心和注册中心: Nacos 限流最佳实践

Docker容器实战十三:容器安全的最佳实践

AWS 架构最佳实践概述

弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践