
本文旨在提供一份全面的教程,指导开发者如何在Python环境中实现Google Cloud Workload Identity Federation (WIF) 的客户端凭证配置。我们将探讨如何替代`gcloud iam workload-identity-pools create-cred-config`命令行工具,利用`google.auth.external_account`库程序化地生成用于AWS等外部身份提供商的凭证对象,并详细介绍两种实现路径:直接在Python应用中使用凭证对象,以及手动构建并保存兼容的JSON配置文件,从而在云函数或Python应用中无缝集成外部身份认证。
引言:理解GCP工作负载身份联合与凭证配置
Google Cloud Workload Identity Federation (WIF) 允许您将运行在非Google Cloud环境(如AWS、Azure、本地数据中心或其他SaaS提供商)中的工作负载,使用其现有的身份验证系统(例如AWS IAM角色),直接向Google Cloud进行身份验证,而无需使用服务账号密钥。这显著提升了安全性,因为它消除了管理长期凭证的需要。
当您的外部工作负载需要访问Google Cloud资源时,它们需要一种方式来获取Google Cloud的访问令牌。gcloud iam workload-identity-pools create-cred-config命令的作用就是生成一个客户端配置文件(通常是JSON格式),该文件描述了如何从外部身份提供商获取凭证,并将其交换为Google Cloud的访问令牌。这个文件通常用于配置Google Cloud客户端库,以便它们能够自动处理身份验证流程。
例如,对于AWS环境,gcloud命令可能如下所示:
立即学习“Python免费学习笔记(深入)”;
gcloud iam workload-identity-pools create-cred-config projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$IDENTITY_POOL/providers/$IDENTITY_POOL_PROVIDER --service-account=$SA --output-file=$ClientConfig --aws
这个命令会生成一个JSON文件,其内容类似于:
{ "type": "external_account", "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL/providers/IDENTITY_POOL_PROVIDER", "subject_token_type": "urn:ietf:params:oauth:token-type:aws-role", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "environment_id": "aws", "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/", "regional_url_template": "https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15", "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token", "imdsv2_session_token_headers": { "x-aws-ec2-metadata-token": "..." } }, "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken"}
该文件包含了客户端库与Workload Identity Federation交互所需的所有信息。
Python中实现凭证配置的挑战
在Python中,Google Cloud SDK提供了丰富的客户端库来与各种Google Cloud服务进行交互。然而,针对gcloud iam workload-identity-pools create-cred-config这样直接生成配置文件的特定命令,官方SDK中并没有一个完全对应的API来执行相同的操作并输出相同格式的文件。
原始问题中提及的iam_v1导入错误(Could not create or update Cloud Run service… Container Healthcheck failed.)通常与部署环境或依赖问题有关,而非直接用于生成WIF客户端配置。google.cloud.iam_v1是IAM服务本身的客户端库,用于管理IAM策略、角色等,而不是用于生成Workload Identity Federation的客户端配置。对于Workload Identity Federation的身份验证流程,我们主要依赖google.auth及其子包。
解决方案:利用 google.auth.external_account
尽管没有直接的SDK方法来生成与gcloud命令完全一致的配置文件,但我们可以利用google.auth.external_account库来程序化地实现相同的功能,即获取用于Workload Identity Federation的凭证。这个库是Google Auth库的一部分,专门设计用于处理来自外部身份提供商的凭证。
google.auth.external_account.ExternalAccountCredentials类允许我们通过提供必要的参数来构建一个凭证对象,这些参数与gcloud命令中的概念是对应的:
audience: 对应gcloud命令中projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$IDENTITY_POOL/providers/$IDENTITY_POOL_PROVIDER部分,它是Google Cloud身份池提供方的完整资源名称。service_account_impersonation_url: 对应–service-account参数。这是一个URL,指示Google Cloud IAM Credentials API为指定的Google服务账号生成一个短期访问令牌。格式通常是https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}:generateAccessToken。credential_source: 这是一个字典,定义了外部身份提供商(例如AWS)如何提供其令牌。它包含了从外部环境获取令牌所需的信息。对于AWS,它会包含AWS EC2元数据服务的URL等。subject_token_type: 外部令牌的类型。对于AWS,通常是urn:ietf:params:oauth:token-type:aws-role。token_url: Google Security Token Service (STS) 的URL,用于将外部令牌交换为Google Cloud的访问令牌。默认是https://sts.googleapis.com/v1/token。
实现路径一:程序化生成并使用凭证对象
如果您希望在Python应用程序中直接获取并使用认证凭证,而无需生成中间的JSON配置文件,那么这种方法是最推荐的。ExternalAccountCredentials对象可以直接传递给Google Cloud客户端库,使其能够自动处理身份验证。
示例代码:
import jsonfrom google.auth.external_account import ExternalAccountCredentialsfrom google.auth.transport.requests import Requestfrom google.auth import default# --- 配置参数 (请替换为您的实际值) ---PROJECT_NUMBER = "YOUR_PROJECT_NUMBER" # 您的GCP项目编号IDENTITY_POOL = "YOUR_IDENTITY_POOL_NAME" # 您的工作负载身份池名称IDENTITY_POOL_PROVIDER = "YOUR_IDENTITY_POOL_PROVIDER_NAME" #
以上就是在Python中配置GCP工作负载身份联合凭证:从gcloud命令到SDK实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1379027.html
微信扫一扫
支付宝扫一扫