在 Python 中为 GCP 工作负载身份池生成凭据配置


在 python 中为 gcp 工作负载身份池生成凭据配置

本文旨在指导用户如何在 Python 中程序化地为 Google Cloud Platform (GCP) 工作负载身份池生成凭据配置,特别是针对与外部身份提供商(如 AWS)进行联合的场景。我们将探讨如何利用 `google.auth.external_account` 包来构建和使用这些凭据,以替代 `gcloud` 命令行工具的 `create-cred-config` 功能,并提供相应的代码示例和注意事项。

理解 GCP 工作负载身份联合与凭据配置

Google Cloud Platform 的工作负载身份联合(Workload Identity Federation)允许外部身份(如来自 AWS、Azure、或本地 OIDC 提供商的身份)模拟 GCP 服务账号,从而访问 GCP 资源,而无需下载和管理服务账号密钥。这显著提升了安全性,并简化了跨云或混合云环境的身份管理。

通常,您可以使用 gcloud iam workload-identity-pools create-cred-config 命令行工具来生成一个 JSON 格式的凭据配置文件。这个文件描述了如何从外部身份提供商获取令牌,并将其交换为 GCP 访问令牌,以便您的应用程序可以使用。例如,针对 AWS 的命令如下:

gcloud iam workload-identity-pools create-cred-config \
projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$IDENTITY_POOL/providers/$IDENTITY_POOL_PROVIDER \
--service-account=$SA_EMAIL \
--output-file=$ClientConfig \
--aws

然而,在 Python 应用程序中,尤其是当您希望动态生成或管理这些凭据时,直接通过 SDK 调用来实现这一功能的需求就变得尤为重要。

Python 中的解决方案:google.auth.external_account

GCP 官方客户端库中并没有直接与 gcloud create-cred-config 命令完全对应的 API 调用来生成一个外部账号凭据配置文件。但是,google.auth.external_account 包提供了一个强大的机制,允许您在 Python 代码中直接构造和使用这些外部账号凭据,从而实现相同的目标:通过工作负载身份联合获取 GCP 资源的访问权限。

标贝悦读AI配音 标贝悦读AI配音

在线文字转语音软件-专业的配音网站

标贝悦读AI配音 66 查看详情 标贝悦读AI配音

google.auth.external_account.ExternalAccountCredentials 类是此解决方案的核心。它允许您定义外部身份提供商的详细信息,以及如何将其令牌交换为 GCP 访问令牌。

关键参数解析

要构造 ExternalAccountCredentials 对象,您需要提供以下关键信息,这些信息与 gcloud 命令的参数相对应:

  1. audience: 目标受众字符串,格式为 //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$IDENTITY_POOL/providers/$IDENTITY_POOL_PROVIDER。它指明了您的外部身份将向哪个 GCP 工作负载身份池提供商进行身份验证。
  2. service_account_impersonation_url: 服务账号模拟的 URL,格式为 https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/$SERVICE_ACCOUNT_EMAIL:generateAccessToken。这指示了外部身份在通过工作负载身份池验证后,将模拟哪个 GCP 服务账号。
  3. credential_source: 凭据源配置。这是一个字典,描述了如何从外部身份提供商获取初始的身份令牌。对于 AWS,通常包含 "environment_id": "aws",google.auth.external_account 会自动尝试从标准 AWS 环境变量(如 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN)或 EC2 实例元数据中发现凭据。
  4. subject_token_type: 主题令牌类型。对于 AWS,这是 "urn:ietf:params:oauth:token-type:aws-federated-token"。
  5. token_url: GCP 安全令牌服务 (STS) 的 URL,用于交换外部令牌以获取 GCP 访问令牌。通常是 "https://sts.googleapis.com/v1/token"。

示例:在 Python 中使用 AWS 工作负载身份联合

以下代码示例展示了如何使用 google.auth.external_account 在 Python 中为 AWS 工作负载身份联合创建和使用凭据。

import os
import json
from google.auth.external_account import ExternalAccountCredentials
from google.cloud import storage # 以 Google Cloud Storage 客户端为例

# --- 1. 配置参数 (请替换为您的实际值) ---
# GCP 项目编号
PROJECT_NUMBER = "YOUR_GCP_PROJECT_NUMBER"
# 工作负载身份池 ID
IDENTITY_POOL = "YOUR_IDENTITY_POOL_ID"
# 工作负载身份池提供商 ID
IDENTITY_POOL_PROVIDER = "YOUR_IDENTITY_POOL_PROVIDER_ID"
# 要模拟的 GCP 服务账号的电子邮件地址
SERVICE_ACCOUNT_EMAIL = "your-service-account@your-gcp-project.iam.gserviceaccount.com"
# 外部凭据配置文件的输出路径 (如果需要生成文件)
OUTPUT_CONFIG_FILE = "gcp_aws_cred_config.json"

# --- 2. 构造 `audience` 和 `service_account_impersonation_url` ---
# audience 字符串,指示向哪个工作负载身份池提供商进行认证
audience = (
    f"//iam.googleapis.com/projects/{PROJECT_NUMBER}/locations/global/"
    f"workloadIdentityPools/{IDENTITY_POOL}/providers/{IDENTITY_POOL_PROVIDER}"
)

# 服务账号模拟 URL
service_account_impersonation_url = (
    f"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/"
    f"{SERVICE_ACCOUNT_EMAIL}:generateAccessToken"
)

# --- 3. 定义 `credential_source` 和其他相关参数 ---
# 对于 AWS,credential_source 字典描述了如何获取 AWS 临时凭据。
# google.auth.external_account 会自动检测 AWS 环境。
aws_credential_source_config = {
    "environment_id": "aws",
    # 如果在 EC2 实例上运行,这些 URL 用于获取实例元数据中的凭据。
    # 如果通过环境变量提供 AWS 凭据,这些字段并非严格必需,但包含它们
    # 可以使配置更完整,与 gcloud 生成的文件结构一致。
    # "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/",
    # "region_url": "http://169.254.169.254/latest/meta-data/placement/region"
}

# 主题令牌类型,对于 AWS 联合身份是固定的
subject_token_type = "urn:ietf:params:oauth:token-type:aws-federated-token"

# GCP STS 令牌交换 URL
token_url = "https://sts.googleapis.com/v1/token"

# --- 4. 创建 ExternalAccountCredentials 对象 ---
try:
    credentials = ExternalAccountCredentials(
        token_url=token_url,
        credential_source=aws_credential_source_config,
        audience=audience,
        service_account_impersonation_url=service_account_impersonation_url,
        subject_token_type=subject_token_type
    )

    print("成功创建 ExternalAccountCredentials 对象。")

    # --- 5. 使用凭据访问 GCP 服务 (以 Google Cloud Storage 为例) ---
    # 确保您的运行环境已配置有效的 AWS 凭据 (例如,通过环境变量或 AWS CLI 配置)。
    storage_client = storage.Client(credentials=credentials, project=PROJECT_NUMBER)
    print("\n尝试列出 GCP Cloud Storage 存储桶...")
    buckets = list(storage_client.list_buckets())
    print("成功通过工作负载身份联合认证并列出存储桶:")
    for bucket in buckets:
        print(f"- {bucket.name}")

except Exception as e:
    print(f"在使用凭据时发生错误: {e}")
    print("请确保您的 AWS 凭据已正确配置(例如

以上就是在 Python 中为 GCP 工作负载身份池生成凭据配置的详细内容,更多请关注其它相关文章!


# js  # json  # go  # access  # 工具  # python  # 格式为  # 云岭建设集团的网站  # 客户端  # 用erp补单能提高关键词排名吗  # 湖北关键词排名如何引流  # 海外营销推广怎么做的  # 沈阳企业网站优化服务  # seo建站推广  # 几种网络营销推广方法  # 网站内链优化建议  # 鹤壁网站建设  # 做好网站优化的三个要素  # 应用程序  # 命令行  # 为例  # 浮点  # 中为  # 您的  # 令牌  # red  # 配置文件  # google  # 环境变量  # ai  # session 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  《我的恋爱逃生攻略》中文名字输入方法  手机远程连接电脑方法  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  Mac hosts文件在哪里_Mac修改hosts文件详细教程  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  Python实时数据流中高效查找最大最小值  《桃源记2》资源采集攻略  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  OpenWeatherMap API:通过城市名称获取天气预报数据指南  发博客与长微博技巧  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  《下一站江湖2》独孤剑诀习得方法  @Team是什么?揭秘团队含义  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置  人教版电子教材在线获取指南  海棠阅读网页版_进入海棠网页版在线阅读中心  《百度畅听版》关闭兴趣推荐方法  键盘保修需要什么_键盘售后维修流程  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  胃动力不足?试试这5个调理方法  圆通快递官方入口不需要登录 在线查询入口快速查询  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  火柴人战争网页版在线玩  视频号视频怎么提取文案?提取的文案如何优化与使用?  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  响应式设计中动态背景颜色条的实现指南  《美篇》取消会员自动续费方法  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  实时数据流中高效查找最小值与最大值  风神瞳获取全攻略  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  作业帮网页版不用下载入口 在线问老师快速答疑  解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  英国搜索:多数英国人认为语言搜索是未来搜索  快手网页版官方访问 快手网页版页面在线打开  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  Win11怎么开启HDR_Windows 11显示器画质增强设置  J*aScript包管理器_Npm与Yarn对比  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  歌词怎么展示在|直播|间视频号?有什么注意事项?  电脑视频号|直播|如何分享屏幕  如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践  mysql怎么查询数据_mysql基础查询语句使用教程  Linux如何自动分析系统异常日志_Linux日志智能检测  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】 

 2025-11-14

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.