使用自定义服务帐号控制作业的访问权限

本文档介绍了如何指定 Batch 作业的服务帐号,该帐号会影响作业的虚拟机可以访问的资源和应用。如果您未指定自定义服务帐号,作业将默认使用 Compute Engine 默认服务帐号,该帐号默认会自动附加到项目中的所有虚拟机。因此,使用自定义服务帐号可以更好地控制作业的权限,并且是限制权限的建议最佳做法。

详细了解作业的服务帐号

准备工作

创建使用自定义服务帐号的作业

如需创建使用自定义服务帐号的作业,请选择以下方法之一:

  • 如本部分所示,在作业定义中指定自定义服务帐号。
  • 使用 Compute Engine 实例模板,并在实例模板和作业定义中指定自定义服务帐号。

本部分介绍如何创建使用自定义服务帐号的作业。您可以通过 gcloud CLI 或 Batch API 创建使用自定义服务帐号的作业。

gcloud

如需通过 gcloud CLI 创建使用自定义服务帐号的作业,请使用 gcloud batch jobs submit 命令,并在作业的配置文件中指定自定义服务帐号。

例如,如需创建一个使用自定义服务帐号的脚本作业,请使用以下代码:

  1. 在当前目录中创建一个名为 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 服务帐号

  2. 运行以下命令:

    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"
        }
    }
}

替换以下内容:

后续步骤