本文档介绍如何以 非根用户。
默认情况下,Batch 会以 root 用户身份执行可运行文件。如果您希望 Batch 以非根用户身份执行可运行文件(例如,运行不允许根用户或不符合安全要求的应用),请创建使用 OS Login 的批处理作业。在批处理作业中启用 OS Login 后,OS Login 会在作业运行的虚拟机上为您配置用户账号。作业中的所有可运行对象都是 然后由您的用户账号在虚拟机上执行,而不是由根用户执行。
准备工作
- 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件。
如果您尚未启用 OS Login API,请运行以下命令:
gcloud services enable oslogin.googleapis.com
-
如需获得以非 root 用户身份创建和运行作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
Service Account User (
roles/iam.serviceAccountUser
) 服务账号用户 针对作业的服务账号,该账号默认为默认的 Compute Engine 服务账号 -
针对项目的 Compute OS Login (
roles/compute.osLogin
) 或 Compute OS Admin Login (roles/compute.osAdminLogin
) -
如果您与项目所属的组织不同:
项目所属组织的 Compute OS Login External User (
roles/compute.osLoginExternalUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
创建以非 root 用户身份运行的作业
请执行以下操作,创建通过您自己的用户账号运行可执行文件的批处理作业:
使用 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"
}
}