本文档介绍了如何指定 Batch 作业的服务账号,该账号会影响作业的虚拟机可以访问的资源和应用。如果您未指定自定义服务账号,作业默认使用 Compute Engine 默认服务账号,该账号默认会自动附加到项目中的所有虚拟机。因此,使用自定义服务账号可以更好地控制作业的权限,是限制权限的推荐最佳实践。
详细了解作业的服务账号。
准备工作
- 如果您之前未使用过 Batch,请查看开始使用 Batch 并完成项目和用户的前提条件,以启用 Batch。
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  如需获得控制使用自定义服务账号的作业的访问权限所需的权限,请让您的管理员为您授予以下 IAM 角色: - 
            如需创建作业,请执行以下操作:
            - 
  
  
    
      项目的 Batch Job Editor  (roles/batch.jobsEditor)
- 
  
  
    
      作业的服务账号(默认情况下为默认 Compute Engine 服务账号)的 Service Account User  (roles/iam.serviceAccountUser)
 
- 
  
  
    
      项目的 Batch Job Editor  (
- 
            查看服务账号:
              
  
  
    
      项目的 View Service Accounts  (roles/iam.serviceAccountViewer)
 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 
- 
            如需创建作业,请执行以下操作:
            
- 
确定要用于此作业的服务账号。请确保此服务账号拥有运行作业所需的所有必要权限。 
创建使用自定义服务账号的作业
如需创建使用自定义服务账号的作业,请选择以下方法之一:
- 在作业的定义中指定自定义服务账号,如本部分所示。
- 使用 Compute Engine 实例模板,并在实例模板和作业定义中指定自定义服务账号。
本部分提供了一个示例,说明如何创建使用自定义服务账号的作业。您可以使用 gcloud CLI、Batch API、Java、Node.js 或 Python 创建使用自定义服务账号的作业。
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 服务账号。