Dataproc Serverless创建批处理遇compute.requireOsLogin策略违规求助
解决Dataproc批处理因
compute.requireOsLogin组织策略导致的失败问题 当组织策略强制启用compute.requireOsLogin时,Dataproc作业失败通常是因为作业使用的服务账号没有权限通过OS Login访问集群节点,以下是几种可行的缓解方法:
1. 为默认Dataproc服务账号添加OS Login权限
Dataproc默认使用项目专属的服务账号,格式为service-<项目编号>@dataproc-accounts.iam.gserviceaccount.com,给该账号授予OS Login相关角色即可:
- 基础访问权限:授予
roles/compute.osLogin角色,允许服务账号登录节点 - 管理员权限(如需sudo操作):额外授予
roles/compute.osAdminLogin角色
使用gcloud命令配置:
# 替换<项目ID>和<项目编号>为实际值 gcloud projects add-iam-policy-binding <项目ID> \ --member="serviceAccount:service-<项目编号>@dataproc-accounts.iam.gserviceaccount.com" \ --role="roles/compute.osLogin"
2. 使用自定义服务账号运行Dataproc批处理
如果不想修改默认服务账号权限,可以创建自定义服务账号,赋予Dataproc作业所需权限和OS Login权限,然后指定该账号运行批处理:
- 创建自定义服务账号:
gcloud iam service-accounts create dataproc-custom-sa \ --description="Custom service account for Dataproc batch jobs" \ --display-name="Dataproc Custom SA"
- 授予必要权限(根据作业需求调整,示例包含基础Dataproc和存储权限,以及OS Login权限):
# 授予Dataproc Worker权限 gcloud projects add-iam-policy-binding <项目ID> \ --member="serviceAccount:dataproc-custom-sa@<项目ID>.iam.gserviceaccount.com" \ --role="roles/dataproc.worker" # 授予存储对象管理权限(如需读写GCS) gcloud projects add-iam-policy-binding <项目ID> \ --member="serviceAccount:dataproc-custom-sa@<项目ID>.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin" # 授予OS Login权限 gcloud projects add-iam-policy-binding <项目ID> \ --member="serviceAccount:dataproc-custom-sa@<项目ID>.iam.gserviceaccount.com" \ --role="roles/compute.osLogin"
- 提交批处理时指定自定义服务账号:
gcloud dataproc batches submit spark \ --project <项目ID> \ --region <集群区域> \ --service-account=dataproc-custom-sa@<项目ID>.iam.gserviceaccount.com \ # 其他作业参数(如--jar、--class等)
3. 检查自定义节点模板配置
如果使用了自定义节点模板,确保模板中没有显式禁用OS Login:
- 节点模板的
enable-oslogin配置必须设为true,或者不指定该参数(默认会继承组织策略的强制启用设置) - 若模板中存在
enable-oslogin: false,会与组织策略冲突,导致作业失败
内容的提问来源于stack exchange,提问作者Help_me_a_bit
相关产品推荐
相关产品推荐

