Workflows はサービス アカウントを使用して、ワークフローが Google Cloud リソースにアクセスできるようにします。サービス アカウントは、関数、アプリケーション、VM など、人以外の ID として機能する特別なアカウントです。これにより、人以外の認証を行うことができます。サービス アカウントは、ID とリソースの両方と考えることができます。
サービス アカウントを ID として考える際は、ワークフローなどのリソースにアクセスできるようにするために、サービス アカウントにロールを付与できます。
サービス アカウントをリソースとして考える際は、そのサービス アカウントに対するアクセスやアカウント管理を行うために、他のユーザーに役割を付与できます。
サービス アカウントは、アカウント固有のメールアドレスで識別されます。
本番環境のアプリケーションで認証を設定する方法についての詳細は、サービス アカウントとして認証するをご覧ください。
デフォルトのサービス アカウント
すべてのワークフローは、ワークフローの作成時に Identity and Access Management(IAM)サービス アカウントに関連付けられます。ワークフローの作成時にサービス アカウントを指定しない場合、ワークフローは、デフォルトの Compute Engine サービス アカウントをその ID に対して使用します。ワークフローに関連付けられたサービス アカウントを確認できます。このドキュメントのワークフローに関連付けられたサービス アカウントを確認するをご覧ください。
デフォルトのサービス アカウントは、テストと開発でのみ使用することをおすすめします。本番環境では、新しいサービス アカウントを作成し、ワークフローの管理に必要な最小限の権限を含む 1 つ以上の IAM のロールを付与することをおすすめします。
サービス アカウントの権限
サービス アカウントは ID であるため、他のプリンシパルと同様に、ロールを付与することでプロジェクト内のリソースにアクセスできます。たとえば、ワークフローによって Cloud Logging にログが送信されるようにするには、ワークフローを実行するサービス アカウントに logging.logEntries.create
権限を含むロール(たとえば、Logs Writer
ロール)が付与されていることを確認します。
ワークフローがそれ自体や他のワークフローを呼び出す(つまり、新しいワークフロー実行を作成する)場合を除き、ワークフロー サービス アカウントには workflows.invoker
のロールは必要ありません。詳細については、Workflows を呼び出すをご覧ください。
サービス アカウントを含むプリンシパルにロールを付与する方法の詳細については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
サービス アカウントをリソースに関連付ける
リソースを作成してサービス アカウントを関連付けるには、対象のリソースを作成し、サービス アカウントをリソースに関連付ける権限が必要です。サービス アカウントをリソースに関連付ける権限は、iam.serviceAccounts.actAs
権限を含むロールによって付与されます。
詳細については、サービス アカウントの認証に必要なロールをご覧ください。
Cloud Functions(第 2 世代)を呼び出す
Cloud Functions(第 2 世代)では、基礎となる Cloud Run サービスを管理することで、呼び出し権限を利用できます。ワークフローが Cloud Function(第 2 世代)サービスを呼び出す場合は、呼び出し元のサービス アカウントに Cloud Functions 起動元(roles/cloudfunctions.invoker
)ロールを付与する必要はありません。代わりに、Cloud Run 起動元(roles/run.invoker
)のロールを付与する必要があります。
詳細については、Cloud Functions のバージョンの比較をご覧ください。
カスタム サービス アカウントを使用してワークフローをデプロイする
独自のユーザー管理サービス アカウントを作成すると、ワークフローへのアクセスをより柔軟に制御できます。
サービス アカウントを作成して、その名前をメモします。
ワークフローで作業を行うためにアクセスする必要があるリソースに基づいて、適切なロールをサービス アカウントに付与します。
ワークフローをデプロイするすべてのプリンシパルが、サービス アカウントをリソースに関連付けできることを確認します。サービス アカウントを作成した場合は、この権限が自動的に付与されます。詳細については、サービス アカウント認証のロールをご覧ください。
サービス アカウントをリソースに関連付けるために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対するサービス アカウント ユーザー (
roles/iam.serviceAccountUser
) IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。この事前定義ロールには、サービス アカウントをリソースに関連付けるために必要な
iam.serviceAccounts.actAs
権限が含まれています。カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
プロジェクトに対するロールを付与します。
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
または、サービス アカウントにロールを付与します。
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
以下を置き換えます。
WORKFLOWS_PROJECT_ID
: ワークフロー リソースを含む Google Cloud プロジェクト IDPRINCIPAL
:user|group|serviceAccount:email
またはdomain:domain
形式のワークフロー デプロイヤの識別子。例:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
: サービス アカウントの完全なリソース名。例:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
ここで
SERVICE_ACCOUNT_PROJECT_ID
は、サービス アカウントを含む Google Cloud プロジェクト ID です。SERVICE_ACCOUNT_NAME
はサービス アカウントの名前です。
カスタム サービス アカウントを使用してワークフローをデプロイします。
プロジェクト間サービス アカウントを使用してワークフローをデプロイする
デフォルトでは、あるプロジェクトでサービス アカウントを作成したとき、そのアカウントを別のプロジェクトのリソースに接続することはできません。次の手順では、あるプロジェクトのサービス アカウントを別のプロジェクトのワークフローにアタッチする方法を示します。その後、異なるプロジェクトでサービス アカウントを使用してワークフローをデプロイできます。
サービス アカウントとワークフロー リソースが異なるプロジェクトにある場合、サービス アカウントが存在するプロジェクトから、次の手順を実行します。
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
プロジェクトの組織のポリシーを確認し、プロジェクトに
iam.disableCrossProjectServiceAccountUsage
ブール型制約が適用されていないことを確認します。詳細については、プロジェクト間でのサービス アカウントの接続を有効にするをご覧ください。サービス アカウントを作成して、その名前をメモします。
ワークフローで作業を行うためにアクセスする必要があるリソースに基づいて、適切なロールをサービス アカウントに付与します。
Workflows サービス エージェントにサービス アカウント トークン作成者のロール(
roles/iam.serviceAccountTokenCreator
)を付与します。これにより、サービス エージェントはプロジェクト間でのサービス アカウントのアクセスを管理できます。サービス エージェントは、特定のプロジェクトの Google Cloud サービスの ID です。詳細については、サービス エージェントをご覧ください。Console
Google Cloud コンソールの [ワークフロー] ページに移動します。
[作成] をクリックしてワークフローを作成するか、更新するワークフローの名前を選択します。
[サービス アカウント] リストで、[プロジェクトを切り替え] をクリックします。
別のプロジェクトのサービス アカウントを選択します。
プロンプトが表示されたら、Workflows サービス エージェントに
roles/iam.serviceAccountTokenCreator
ロールを付与します。
gcloud
Workflows サービス エージェントに
roles/iam.serviceAccountTokenCreator
ロールを付与します。gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
以下を置き換えます。
SERVICE_ACCOUNT_RESOURCE_NAME
: サービス アカウントの完全なリソース名。例:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
ここで
SERVICE_ACCOUNT_PROJECT_ID
は、サービス アカウントを含む Google Cloud プロジェクト ID です。SERVICE_ACCOUNT_NAME
はサービス アカウントの名前です。
WORKFLOWS_PROJECT_NUMBER
: ワークフロー リソースを含む Google Cloud プロジェクト番号。
ワークフローをデプロイするすべてのプリンシパルが、サービス アカウントをリソースに関連付けできることを確認します。サービス アカウントを作成した場合は、この権限が自動的に付与されます。詳細については、サービス アカウント認証のロールをご覧ください。
サービス アカウントをリソースに関連付けるために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対するサービス アカウント ユーザー (
roles/iam.serviceAccountUser
) IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。この事前定義ロールには、サービス アカウントをリソースに関連付けるために必要な
iam.serviceAccounts.actAs
権限が含まれています。カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
Console
Google Cloud コンソールの [ワークフロー] ページに移動します。
[作成] をクリックしてワークフローを作成するか、更新するワークフローの名前を選択します。
[サービス アカウント] リストで、[プロジェクトを切り替え] をクリックします。
別のプロジェクトのサービス アカウントを選択します。
プロンプトが表示されたら、プロジェクトに
roles/iam.serviceAccountUser
ロールを付与します。
gcloud
プロジェクトに対するロールを付与します。
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
または、サービス アカウントにロールを付与します。
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
以下を置き換えます。
WORKFLOWS_PROJECT_ID
: ワークフロー リソースを含む Google Cloud プロジェクト IDPRINCIPAL
:user|group|serviceAccount:email
またはdomain:domain
形式のワークフロー デプロイヤの識別子。例:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
: サービス アカウントの完全なリソース名。例:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
ここで
SERVICE_ACCOUNT_PROJECT_ID
は、サービス アカウントを含む Google Cloud プロジェクト ID です。SERVICE_ACCOUNT_NAME
はサービス アカウントの名前です。
プロジェクト間サービス アカウントを使用してワークフローをデプロイします。
ワークフローに関連付けられたサービス アカウントを確認する
特定のワークフローに関連付けられているサービス アカウントを確認できます。
Console
Google Cloud コンソールの [ワークフロー] ページに移動します。
[Workflows] ページで、ワークフロー名をクリックします。
[詳細を表示] ページで、[詳細] タブをクリックします。
ワークフローに関連付けられたサービス アカウントが表示されます。
gcloud
ターミナルを開きます。
次のコマンドを入力します。
gcloud workflows describe MY_WORKFLOW
MY_WORKFLOW
は、使用するワークフローの名前に置き換えます。関連するサービス アカウントを含むワークフローの完全な説明が返されます。例:
createTime: '2020-06-05T23:45:34.154213774Z' name: projects/myProject/locations/us-central1/workflows/myWorkflow serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com sourceContents: [...]