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 Run 関数(第 2 世代)を呼び出す
Cloud Run 関数(第 2 世代)では、基盤となる Cloud Run サービスを管理することで呼び出し権限を使用できます。ワークフローで Cloud Run 関数(第 2 世代)サービスを呼び出す場合、呼び出し元のサービス アカウントに Cloud Run 関数の起動元(roles/cloudfunctions.invoker
)ロールを付与する必要はありません。代わりに、Cloud Run の起動元(roles/run.invoker
)ロールを付与する必要があります。
詳細については、Cloud Run 関数のバージョンの比較をご覧ください。
カスタム サービス アカウントを使用してワークフローをデプロイする
独自のユーザー管理サービス アカウントを作成すると、ワークフローへのアクセスをより柔軟に制御できます。
サービス アカウントを作成して、その名前をメモします。
ワークフローで作業を行うためにアクセスする必要があるリソースに基づいて、適切なロールをサービス アカウントに付与します。
ワークフローをデプロイするすべてのプリンシパルが、サービス アカウントをリソースに関連付けできることを確認します。サービス アカウントを作成した場合は、この権限が自動的に付与されます。詳細については、サービス アカウント認証のロールをご覧ください。
サービス アカウントをリソースに関連付けるために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対するサービス アカウント ユーザー (
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: [...]