本文說明如何以非根使用者身分建立及執行 Batch 工作。
根據預設,Batch 會以超級使用者身分執行可執行檔。 如要讓 Batch 以非根使用者身分執行可執行檔 (例如執行不允許根使用者的應用程式,或符合安全性需求),請建立使用 OS 登入的 Batch 工作。在 Batch 作業中啟用 OS 登入功能時,OS 登入會在作業執行的 VM 上為您設定使用者帳戶。作業中的所有可執行檔隨後都會由 VM 上的使用者帳戶執行,而非由根使用者執行。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
如果尚未啟用 OS Login API,請執行下列指令:
gcloud services enable oslogin.googleapis.com
-
如要取得必要權限,以非根使用者身分建立及執行工作,請要求管理員授予下列 IAM 角色:
-
批次工作編輯者 (
roles/batch.jobsEditor
) 專案 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 在作業的服務帳戶上,預設為預設的 Compute Engine 服務帳戶 -
專案的 Compute OS 登入 (
roles/compute.osLogin
) 或 Compute OS 管理員登入 (roles/compute.osAdminLogin
) -
如果您與專案隸屬於不同機構:
專案機構的「Compute OS 登入外部使用者」 (
roles/compute.osLoginExternalUser
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
批次工作編輯者 (
建立以非根使用者身分執行的工作
如要建立 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"
}
}