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