Google Cloud Composer-2 REST API服务账号认证方法咨询
使用服务账号认证Composer-2 REST API的正确方法
问题根源
你之前用id_token.fetch_id_token生成令牌无效,是因为Composer-2的REST API需要OAuth 2.0访问令牌,而非ID令牌。ID令牌用于身份验证到特定服务,而GCP的资源管理类API(包括Composer API)只接受带有云平台权限范围的访问令牌。
实现步骤
1. 配置服务账号
- 在GCP控制台创建或选择一个服务账号,为其分配对应权限:
- 基础管理:
roles/composer.admin(全权限)或roles/composer.editor(编辑权限) - 仅触发DAG:
roles/composer.environmentOperator
- 基础管理:
- 下载该服务账号的JSON密钥文件,保存为
service-account-key.json
2. 安装依赖
执行以下命令安装必要的Python库:
pip install google-auth requests
3. 代码示例
以下是使用服务账号获取访问令牌并调用Composer-2 API的完整代码:
import google.auth from google.auth.transport.requests import Request import requests # 加载服务账号密钥,指定云平台权限范围 credentials, project_id = google.auth.load_credentials_from_file( 'service-account-key.json', scopes=['https://www.googleapis.com/auth/cloud-platform'] ) # 刷新过期的凭证 if not credentials.valid: credentials.refresh(Request()) # 获取有效访问令牌 access_token = credentials.token # 示例:调用Composer API获取指定区域的环境列表 api_endpoint = f'https://composer.googleapis.com/v1/projects/{project_id}/locations/us-central1/environments' headers = {'Authorization': f'Bearer {access_token}'} response = requests.get(api_endpoint, headers=headers) response.raise_for_status() # 捕获请求错误 print(response.json())
额外注意事项
- GCP内部环境优化:如果代码运行在GCP服务(如Cloud Function、GKE、VM实例)中,无需手动加载密钥文件,直接使用默认应用凭证即可,替换加载密钥的代码为:
credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-platform']) - 权限最小化:遵循权限最小化原则,只给服务账号分配完成任务所需的最低权限,避免过度授权。
- 令牌有效期:访问令牌默认有效期为1小时,代码中通过
credentials.refresh()自动刷新,无需手动处理过期问题。
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

