首页 > 解决方案 > 使用python的GCP用户列表

问题描述

如何使用 python 获取帐户 GCP 中的用户列表。我找不到如何在帐户中授权使用 python 并获取列表。有谁能够帮我?

标签: pythongoogle-cloud-platformscriptingsdk

解决方案


我假设您刚刚开始使用 Google Cloud 和 Python SDK。如果您已经有经验,请跳到我的答案底部以获取实际示例代码。

Google Cloud Python SDK 的文档可能很难弄清楚。关键细节是 Google 使用自动化工具记录 API。Google 发布了一个文档,SDK 可以阅读该文档以自动构建 API。起初这可能看起来很奇怪,但仔细想想就非常聪明。自动更新自身以支持最新 API 实施的 SDK。

从根文档开始:Google API Client Library for Python Docs

靠近底部的是文档链接:

API 的库参考文档

对于您的情况,在项目中列出具有 IAM 绑定的用户,向下滚动到cloudresourcemanager。有时有多个 API 版本。通常,选择最新版本。在这种情况下,v3。

知道要使用哪个 API 是根据经验构建的。随着您在 Google Cloud 中开发越来越多的软件,架构的逻辑变得自动化。

云资源管理器 API

API 提供了多种实例方法。在您的情况下,实例方法是projects

云资源管理器 API - 项目

项目有实例方法。在您的情况下,getIamPolicy()

getIamPolicy(资源,正文=无,x__xgafv=无)

有时您需要查看 REST API 以了解参数和返回值。

资源管理器 REST API:方法:projects.getIamPolicy

例如,要了解 Python SDK API 的响应,请查看 REST API 记录的响应,其中包括几个示例:

资源管理器 REST API:策略

现在我已经介绍了如何使用文档的基础知识,让我们创建一个示例来列出角色和 IAM 成员。

导入所需的 Python 库:

from google.oauth2 import service_account
import googleapiclient.discovery

使用您的项目 ID 创建一个变量。注意:不要使用项目名称。

PROJECT_ID='development-123456'

注意:在以下说明中,我使用服务帐户。在此答案的后面,我展示了一个使用 Google Cloud CLI (gcloud) 设置的 ADC(应用程序默认凭据)的示例。

使用您的 Google 云服务帐户 JSON 密钥文件的完整路径名创建一个变量:

SA_FILE='/config/service-account.json'

为所需的 Google Cloud IAM 范围创建一个变量。通常我使用以下范围,因为我更喜欢通过分配给服务帐户的 IAM 角色来控制权限:

SCOPES=['https://www.googleapis.com/auth/cloud-platform']

从服务帐户创建 OAuth 凭据:

credentials = service_account.Credentials.from_service_account_file(
        filename=SA_FILE,
        scopes=SCOPES)

现在我们可以开始使用 API 文档了。以下代码构建 API 发现文档并为cloudresourcemanager加载 API :

service = googleapiclient.discovery.build(
        'cloudresourcemanager',
        'v3',
        credentials=credentials)

现在调用将返回 JSON 响应的 API,详细说明与项目绑定的角色和成员:

resource = 'projects/' + PROJECT_ID

response = service.projects().getIamPolicy(resource=resource, body={}).execute()

以下是打印部分返回 JSON 的简单代码:

for binding in response['bindings']:
        print('Role:', binding['role'])

        for member in binding['members']:
                print(member)

使用 ADC(应用程序默认凭据)的完整示例:

import googleapiclient.discovery

PROJECT_ID='development-123456'

service = googleapiclient.discovery.build('cloudresourcemanager', 'v3')

resource = 'projects/' + PROJECT_ID

response = service.projects().getIamPolicy(resource=resource, body={}).execute()

for binding in response['bindings']:
        print('Role:', binding['role'])

        for member in binding['members']:
                print(member)

使用服务帐户的完整示例:

from google.oauth2 import service_account
import googleapiclient.discovery

PROJECT_ID='development-123456'

SA_FILE='/config/service-account.json'

SCOPES=['https://www.googleapis.com/auth/cloud-platform']

credentials = service_account.Credentials.from_service_account_file(
    filename=SA_FILE,
    scopes=SCOPES)

service = googleapiclient.discovery.build(
    'cloudresourcemanager', 'v3', credentials=credentials)

resource = 'projects/' + PROJECT_ID

response = service.projects().getIamPolicy(resource=resource, body={}).execute()

for binding in response['bindings']:
    print('Role:', binding['role'])

    for member in binding['members']:
        print(member)

推荐阅读