python - 使用python的GCP用户列表
问题描述
如何使用 python 获取帐户 GCP 中的用户列表。我找不到如何在帐户中授权使用 python 并获取列表。有谁能够帮我?
解决方案
我假设您刚刚开始使用 Google Cloud 和 Python SDK。如果您已经有经验,请跳到我的答案底部以获取实际示例代码。
Google Cloud Python SDK 的文档可能很难弄清楚。关键细节是 Google 使用自动化工具记录 API。Google 发布了一个文档,SDK 可以阅读该文档以自动构建 API。起初这可能看起来很奇怪,但仔细想想就非常聪明。自动更新自身以支持最新 API 实施的 SDK。
从根文档开始:Google API Client Library for Python Docs
靠近底部的是文档链接:
对于您的情况,在项目中列出具有 IAM 绑定的用户,向下滚动到cloudresourcemanager。有时有多个 API 版本。通常,选择最新版本。在这种情况下,v3。
知道要使用哪个 API 是根据经验构建的。随着您在 Google Cloud 中开发越来越多的软件,架构的逻辑变得自动化。
API 提供了多种实例方法。在您的情况下,实例方法是projects。
项目中有实例方法。在您的情况下,getIamPolicy()。
getIamPolicy(资源,正文=无,x__xgafv=无)
有时您需要查看 REST API 以了解参数和返回值。
资源管理器 REST API:方法:projects.getIamPolicy
例如,要了解 Python SDK 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)
推荐阅读
- java - Android Patterns.WEB_URL 无法正常工作
- azure - 如何获取包含过期日期、证书名称、指纹的 Azure 云服务(经典)证书详细信息
- sql - SQL 数据库中有多少表会被认为太多?
- c# - 如何使用 petapoco 调用 oracle 存储过程
- splunk - 如何在 Splunk 中冻结表头
- c# - 获取列表嵌套列表中的列表计数
- excel - 无法在 Build Machine 中运行本质上是数据驱动的 MSTest
- google-cloud-platform - 在实例模板中指定区域资源
- php - PHP 7 Soap Server 内存不足约 10MB(libxml XML_PARSE_HUGE 问题?)。如何解决这个问题?
- go - 如何将包中存在的文件读入属于同一包的另一个文件?