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 のロールは必要ありません。詳細については、ワークフローを呼び出すをご覧ください。
サービス アカウントを含むプリンシパルへのロール付与の詳細については、プロジェクト、フォルダ、組織へのアクセス権を管理するをご覧ください。
サービス アカウントをリソースに関連付ける
リソースを作成してサービス アカウントを関連付けるには、そのリソースを作成する権限と、サービス アカウントをリソースに関連付ける権限が必要です。サービス アカウントをリソースに関連付ける権限は、iam.serviceAccounts.actAs 権限を含むロールによって付与されます。
詳細については、サービス アカウントの認証に必要なロールをご覧ください。
Cloud Run functions の関数を呼び出す
Cloud Run functions では、基盤となる Cloud Run サービスを管理することで呼び出し権限を使用できます。ワークフローが Cloud Run functions サービスを呼び出す場合、呼び出し元のサービス アカウントに Cloud Functions 起動元(roles/cloudfunctions.invoker)ロールを付与する必要はありません。代わりに、Cloud Run の起動元(roles/run.invoker)ロールを付与する必要があります。
詳細については、Cloud Run 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 プロジェクト ID
- PRINCIPAL:- 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 です。詳細については、サービス エージェントをご覧ください。- コンソール- 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権限が含まれています。- カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。 - コンソール- 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プロジェクト ID
- PRINCIPAL:- 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 コンソールで、[ワークフロー] ページに移動します。 
- [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: [...]