GCP IAM:在通过python API创建服务帐户时/之后向服务帐户授予角色

Posted

技术标签:

【中文标题】GCP IAM:在通过python API创建服务帐户时/之后向服务帐户授予角色【英文标题】:GCP IAM: Granting a role to a service account while/after creating it via python API 【发布时间】:2021-12-19 16:52:21 【问题描述】:

目标: 使用 python,我想在 Google Cloud Platform 上的项目中创建一个服务帐户并授予该服务帐户一个角色。

问题: 文档解释了here 如何将单个角色授予服务帐户。但是,这似乎只能通过使用控制台或 gcloud 工具来实现,而不是使用 python。 python 的替代方法是更新项目的整个 IAM 策略以授予单个服务帐户的角色并覆盖它(描述为here)。 然而,覆盖整个策略似乎非常冒险,因为如果出现错误,整个项目的策略可能会丢失。 因此我想避免这种情况。

问题: 我正在使用here in the docs 提供的python 代码创建一个服务帐户。是否可以在使用此代码或以任何其他方式创建服务帐户时已经授予该角色?

【问题讨论】:

【参考方案1】:

创建服务帐号、创建服务帐号密钥、下载服务帐号 JSON 密钥文件和授予角色是单独的步骤。没有一个 API 可以同时创建服务帐号和授予角色。

任何时候更新项目的 IAM 绑定都是有风险的。 Google 会阻止多个应用程序同时更新 IAM。通过覆盖没有成员的策略,可以将每个人(用户和服务)锁定在项目之外。

我建议您创建一个测试项目并针对该项目开发和调试您的代码。使用对您的其他项目没有权限的凭据。否则,请使用 CLI 或 Terraform 将风险降至最低。

只要您了解 API、IAM 绑定和 JSON 数据结构,该 API 就非常易于使用。

【讨论】:

【参考方案2】:

正如约翰的回答中提到的,在操作 IAM 模块时应该非常小心,如果出现问题,可能会导致服务完全无法运行。 这是一个 Google 的文档,manipulates the IAM resources using the REST API。

所有者角色可以授予用户、serviceAccount 或属于组织的组。例如,group@myownpersonaldomain.com 可以作为所有者添加到 myownpersonaldomain.com 组织中的项目中,但不能添加到 examplepetstore.com 组织中。

【讨论】:

以上是关于GCP IAM:在通过python API创建服务帐户时/之后向服务帐户授予角色的主要内容,如果未能解决你的问题,请参考以下文章

GCP:在给定资源、成员和角色的情况下创建 IAM 策略绑定的通用例程

无法通过 api 为服务帐户创建 cloudsql 角色

GCP 为每个项目和 Terraform 预定义 IAM 角色

使用 Terraform 创建 GCP 自定义 IAM 角色

通过API向用户分配IAM角色

GCP:IAM 和 BigQuery