本文說明如何指定 Batch 作業的服務帳戶,這會影響作業 VM 可存取的資源和應用程式。如未指定自訂服務帳戶,作業預設會使用 Compute Engine 預設服務帳戶,該帳戶預設會自動附加至專案中的所有 VM。因此,使用自訂服務帳戶可更有效控管作業的權限,是限制權限的最佳做法。
進一步瞭解作業的服務帳戶。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得所需權限,以便使用自訂服務帳戶控管作業存取權,請要求管理員授予下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
找出要用於這項工作的服務帳戶。請確認這個服務帳戶具備執行工作的所有必要權限。
進一步瞭解如何查看服務帳戶,以及作業服務帳戶的必要權限。
建立使用自訂服務帳戶的工作
如要建立使用自訂服務帳戶的作業,請選取下列其中一個方法:
- 在工作定義中指定自訂服務帳戶,如本節所示。
- 使用 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 服務帳戶。