使用指定SA从Cloud Build部署Dataflow管道失败求助
问题与解决方案
问题描述
尝试通过Cloud Build使用指定服务账号(SA)而非默认Cloud Build服务账号部署Dataflow管道,但部署失败。已为目标SA配置Dataflow Admin、Dataflow Worker、Logs Writer、Service Account User、Storage Admin、Storage Object Admin等角色,并遵循官方文档完成Cloud Build配置。
部署命令如下:
os.system("python3.7 /workspace/runner.py \ --runner=DataflowRunner \ --job_name=test \ --project=XXXXXX \ --temp_location=gs://staging/tmp \ --region=europe-west1 \ --environment=dev \ --max_num_workers=20 \ --autoscaling_algorithm=THROUGHPUT_BASED \ --setup_file=/workspace/setup.py \ --service_account_email=XXXX@XXXX.iam.gserviceaccount.com \ ")
执行后出现403权限错误:
apitools.base.py.exceptions.HttpForbiddenError: HttpError accessing <https://dataflow.googleapis.com/v1b3/projects/my-prj/locations/europe-west1/jobs?alt=json>: response: <{'vary': 'Origin, X-Origin, Referer', 'content-type': 'application/json; charset=UTF-8', 'date': 'Tue, 18 Apr 2023 14:03:30 GMT', 'server': 'ESF', 'cache-control': 'private', 'x-xss-protection': '0', 'x-frame-options': 'SAMEORIGIN', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'status': '403', 'content-length': '812', '-content-encoding': 'gzip'}>, content <{ "error": { "code": 403, "message": "(3b12042024f17c98): 当前用户无法扮演服务账号XXXXXXX@XXXXXX.iam.gserviceaccount.com。请为你的用户账号授予[Owner, Editor, Service Account Actor]角色之一,或其他包含iam.serviceAccounts.actAs权限的角色。Causes: (3b12042024f17239): 当前用户无法扮演服务账号XXXX@XXXX.iam.gserviceaccount.com。请为你的用户账号授予[Owner, Editor, Service Account Actor]角色之一,或其他包含iam.serviceAccounts.actAs权限的角色。", "status": "PERMISSION_DENIED" } }
点击错误中的链接后返回401未授权(该问题为链接需身份验证,不影响核心错误排查):
{ "error": { "code": 401, "message": "请求缺少必需的身份验证凭据。预期OAuth 2访问令牌、登录Cookie或其他有效的身份验证凭据。", "status": "UNAUTHENTICATED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "CREDENTIALS_MISSING", "domain": "googleapis.com", "metadata": { "service": "dataflow.googleapis.com", "method": "google.dataflow.v1beta3.JobsV1Beta3.ListJobs" } } ] } }
解决方案
核心问题是Cloud Build运行时使用的服务账号没有权限扮演你在Dataflow命令中指定的目标SA,错误提示明确要求授予iam.serviceAccounts.actAs权限。
操作步骤
- 确定Cloud Build使用的服务账号:
- 若使用默认账号,格式为
[你的项目编号]@cloudbuild.gserviceaccount.com - 若已配置自定义Cloud Build服务账号,使用该账号的邮箱
- 若使用默认账号,格式为
- 为上述Cloud Build服务账号授予Service Account Actor角色(或直接授予
iam.serviceAccounts.actAs权限),授权对象为你在--service_account_email参数中指定的目标SA。
内容的提问来源于stack exchange,提问作者robin
相关产品推荐
相关产品推荐

