本文档介绍了如何以非根用户身份创建和运行 Batch 作业。
默认情况下,Batch 以根用户身份执行可运行对象。 如果您希望 Batch 以非根用户身份执行可运行对象(例如,运行不允许 root 用户的应用或满足安全要求),请创建使用 OS Login 的 Batch 作业。在 Batch 作业中启用 OS Login 后,OS Login 会在作业运行的虚拟机上为您配置用户账号。然后,作业中的所有可运行对象都由您的用户账号在虚拟机上执行,而不是由根用户执行。
准备工作
- 如果您之前未使用过 Batch,请查看开始使用 Batch 并完成项目和用户的前提条件,以启用 Batch。
如果您尚未启用 OS Login API,请运行以下命令来启用:
gcloud services enable oslogin.googleapis.com
-
如需获得以非根用户身份创建和运行作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号(默认情况下为默认 Compute Engine 服务账号)的 Service Account User (
roles/iam.serviceAccountUser
) -
项目的 Compute OS Login (
roles/compute.osLogin
) 或 Compute OS Admin Login (roles/compute.osAdminLogin
) -
如果您与项目所属的组织不同:
项目所属组织中的 Compute OS Login External User (
roles/compute.osLoginExternalUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
创建以非根用户身份运行的作业
通过执行以下操作,创建一个通过您自己的用户账号运行可执行文件的 Batch 作业:
使用 Google Cloud CLI 或 REST API 创建作业,该作业在 JSON 文件的正文中包含设置为 true
的 runAsNonRoot
字段:
"runAsNonRoot": true
例如,以非根用户身份运行可执行文件的作业的 JSON 配置文件类似于以下内容:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX executed by $(whoami)."
}
}
]
},
"taskCount": 3,
"runAsNonRoot": true
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}