本文档介绍如何以非根用户身份创建和运行批处理作业。
默认情况下,Batch 以根用户身份执行可运行对象。如果您希望 Batch 以非根用户身份执行可运行对象(例如,运行不允许 root 用户或满足安全要求的应用),请创建一个使用 OS Login 的 Batch 作业。在批处理作业中启用 OS Login 时,OS Login 会在运行作业的虚拟机上为您配置用户帐号。然后,作业中的所有可运行对象都由虚拟机上的用户帐号执行,而不是由根用户执行。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并在满足项目和用户的前提条件以启用 Batch。
运行以下命令以启用 OS Login API(如果尚未启用):
gcloud services enable oslogin.googleapis.com
-
如需获取以非根用户身份创建和运行作业所需的权限,请让管理员向您授予以下 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 (
创建以非根用户身份运行的作业
通过执行以下操作,创建一个通过您自己的用户帐号运行可执行文件的 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"
}
}