このドキュメントでは、ジョブの VM がアクセスできるリソースとアプリケーションに影響を与える Batch ジョブのサービス アカウントを指定する方法について説明します。カスタム サービス アカウントを指定しない場合、ジョブは Compute Engine のデフォルト サービス アカウントの使用をデフォルトにします。これはデフォルトで、プロジェクト内のすべての VM に自動的にアタッチされます。そのため、カスタム サービス アカウントを使用すると、ジョブの権限をより詳細に管理でき、権限を制限する場合にベスト プラクティスとしておすすめです。
詳しくは、ジョブのサービス アカウントをご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
カスタム サービス アカウントを使用してジョブへのアクセスを制御するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
ジョブを作成するには:
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
-
プロジェクトのバッチジョブ編集者(
-
サービス アカウントを表示するには: プロジェクトのサービス アカウントの表示 (
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
: プロジェクトのプロジェクト IDSERVICE_ACCOUNT_EMAIL
: サービス アカウントのメールアドレス。serviceAccount
フィールドが指定されていない場合、値はデフォルトの Compute Engine サービス アカウントに設定されます。
Java
Node.js
Python
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。