本文說明如何以非超級使用者身分建立及執行批次工作。
根據預設,Batch 會以超級使用者身分執行可執行檔。 如要讓 Batch 以非超級使用者身分執行執行檔 (例如執行不允許超級使用者的應用程式,或符合安全性需求),請建立使用 OS 登入的批次工作。在 Batch 工作中啟用 OS 登入功能後,系統會在工作執行的 VM 上為您設定使用者帳戶。作業中的所有可執行檔隨後都會由 VM 上的使用者帳戶執行,而非由超級使用者執行。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
如果尚未啟用,請執行下列指令來啟用 OS 登入 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)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- 專案的「批次工作編輯者」 (
建立以非超級使用者身分執行的工作
如要建立批次工作,透過自己的使用者帳戶執行執行檔,請按照下列步驟操作:
使用 Google Cloud CLI 或 REST API 建立工作,並在 JSON 檔案的主體中,將 runAsNonRoot 欄位設為 true:
"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"
}
}