【发布时间】:2020-09-17 15:31:54
【问题描述】:
我们正在 GKE 上运行一个名为 Airflow (https://airflow.apache.org/) 的开源产品。该 pod 中运行的一些进程需要与 GCP 的 Dataproc 服务交互才能创建 Dataproc 集群。 我们正在使用Workload Identity 运行我们的 GKE 应用程序。
Kubernetes 服务帐户 (KSA) 已在 Google 服务帐户 (GSA) 资源 static11-dp-airf@mygcpproject.iam.gserviceaccount.com 上被授予 roles/iam.workloadIdentityUser:
$ gcloud iam service-accounts get-iam-policy \
> static11-dp-airf@mygcpproject.iam.gserviceaccount.com \
> --format=json \
> --format="table(bindings.role, bindings.members)" \
> --flatten="bindings[].members"
ROLE MEMBERS
roles/iam.workloadIdentityUser serviceAccount:mygcpproject.svc.id.goog[static11-dsp-dp-airflow/dp-airflow]
GSA 已被授予我们创建的自定义角色 dsp_service_account_dataproc_v1:
$ gcloud projects get-iam-policy mygcpproject --format=json | grep dsp_service_account_dataproc_v1 -B 8 -A 1
{
"members": [
"serviceAccount:static11-dp-airf@mygcpproject.iam.gserviceaccount.com"
],
"role": "projects/mygcpproject/roles/dsp_service_account_dataproc_v1"
},
该自定义角色已获得调用 dataproc API 所需的所有权限:
$ gcloud iam roles describe dsp_service_account_dataproc_v1 --project mygcpproject
etag: BwWuudZzoGI=
includedPermissions:
- dataproc.agents.create
- dataproc.agents.delete
- dataproc.agents.get
- dataproc.agents.list
- dataproc.agents.update
- dataproc.clusters.create
- dataproc.clusters.delete
- dataproc.clusters.get
- dataproc.clusters.list
- dataproc.clusters.update
- dataproc.clusters.use
- dataproc.jobs.cancel
- dataproc.jobs.create
- dataproc.jobs.delete
- dataproc.jobs.get
- dataproc.jobs.list
- dataproc.jobs.update
- dataproc.operations.delete
- dataproc.operations.get
- dataproc.operations.list
- dataproc.tasks.lease
- dataproc.tasks.listInvalidatedLeases
- dataproc.tasks.reportStatus
然而,当我尝试通过从 Airflow 调用 dataproc API 来创建 dataproc 集群时,它失败了:
https://dataproc.googleapis.com/v1beta2/projects/mygcpproject/regions/europe-west1/clusters?alt=json 时返回“用户无权充当服务帐户'static11-dp-airf@mygcpproject.iam.gserviceaccount.com'。要充当服务帐户,用户必须具有 [ Owner、Editor、Service Account Actor] 角色。有关更多详细信息,请参阅 https://cloud.google.com/iam/docs/understanding-service-accounts。">
我假设我在某个地方遗漏了一些东西,可能是一些需要授予的额外角色,但我不知道在哪里。任何建议将不胜感激。
【问题讨论】:
标签: google-kubernetes-engine google-cloud-dataproc