本文档介绍了如何指定 Batch 作业的服务帐号,该帐号会影响作业的虚拟机可以访问的资源和应用。如果您未指定自定义服务帐号,作业将默认使用 Compute Engine 默认服务帐号,该帐号默认会自动附加到项目中的所有虚拟机。因此,使用自定义服务帐号可以更好地控制作业的权限,并且是限制权限的建议最佳做法。
详细了解作业的服务帐号。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并在满足项目和用户的前提条件以启用 Batch。
-
如需获取使用自定义服务帐号控制作业访问权限所需的权限,请让管理员向您授予以下 IAM 角色:
-
如需创建任务,请执行以下操作:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业服务帐号的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认的 Compute Engine 服务帐号
-
项目的 Batch Job Editor (
-
如需查看服务帐号,请执行以下操作:
查看项目的服务帐号 (
roles/iam.serviceAccountViewer
)
如需详细了解如何授予角色,请参阅管理访问权限。
-
如需创建任务,请执行以下操作:
-
确定要用于此作业的服务帐号。请确保此服务帐号具有运行作业所需的所有必要权限。
详细了解如何查看服务帐号和作业服务帐号的必要权限。
创建使用自定义服务帐号的作业
如需创建使用自定义服务帐号的作业,请选择以下方法之一:
- 如本部分所示,在作业定义中指定自定义服务帐号。
- 使用 Compute Engine 实例模板,并在实例模板和作业定义中指定自定义服务帐号。
本部分介绍如何创建使用自定义服务帐号的作业。您可以通过 gcloud CLI 或 Batch API 创建使用自定义服务帐号的作业。
gcloud
如需通过 gcloud CLI 创建使用自定义服务帐号的作业,请使用 gcloud batch jobs submit
命令,并在作业的配置文件中指定自定义服务帐号。
例如,如需创建一个使用自定义服务帐号的脚本作业,请使用以下代码:
在当前目录中创建一个名为
hello-world-service-account.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello World! This is task $BATCH_TASK_INDEX." } } ] } } ], "allocationPolicy": { "serviceAccount": { "email": "SERVICE_ACCOUNT_EMAIL" } } }
其中,
SERVICE_ACCOUNT_EMAIL
是您的服务帐号的电子邮件地址。如果未指定serviceAccount
字段,则值设置为默认 Compute Engine 服务帐号。运行以下命令:
gcloud batch jobs submit example-service-account-job \ --location us-central1 \ --config hello-world-service-account.json
API
如需通过 Batch API 创建使用自定义服务帐号的作业,请使用 jobs.create
方法,并在 allocationPolicy
字段中指定您的自定义服务帐号。
例如,如需创建使用自定义服务帐号的脚本作业,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-service-account-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
}
}
],
"allocationPolicy": {
"serviceAccount": {
"email": "SERVICE_ACCOUNT_EMAIL"
}
}
}
替换以下内容:
PROJECT_ID
:您的项目 ID。SERVICE_ACCOUNT_EMAIL
:您的服务帐号的电子邮件地址。如果未指定serviceAccount
字段,则值设置为默认 Compute Engine 服务帐号。