Help us understand the problem. What is going on with this article?

GCPのサービスエージェントがなくなったときは、APIを有効化すると復活する

原因不明です。復旧策を書きます。

まとめ

  • Google Cloudの「IAMと管理」の役割からサービスエージェントが消えてしまうことがあります
  • そうなると、さまざまな操作ができなくなる
  • APIの無効化したあと、APIの有効化をすると、サービスエージェントが復活する

Dataflow サービス エージェント がなくなってしまった事象の解決手順

GCPのとあるプロジェクトでDataflowを本番環境で試しました。

しかし、Google Cloudが自動的に作成するIAMの権限が足りないという旨のエラーが出るようになりました。

エラーメッセージの確認

JOB_MESSAGE_ERROR: Workflow failed. Causes: There was a problem refreshing your credentials. Please check:
1. Dataflow API is enabled for your project.
2. There is a robot service account for your project:
service-[project number]@dataflow-service-producer-prod.iam.gserviceaccount.com should have access to your project. If this account does not appear in the permissions tab for your project, contact Dataflow support., There is no cloudservices robot account for your project.  Please ensure that the Dataflow API is enabled for your project.

ひとつひとつチェックしていきます。

  • Dataflow APIは有効化されているか?
    • →有効化されている
  • service-[project number]@dataflow-service-producer-prod.iam.gserviceaccount.com がプロジェクトにアクセスできない
    • →該当のサービスアカウントにプロジェクトオーナー権限を与えても動作しなかった
    • オーナー権限を与える前は、「Compute ストレージ管理者」のみが与えられていた

別のプロジェクトとの比較

不穏だなと思ったので、別のアカウントを見に行くことにしました。

別のプロジェクト service-[project number]dataflow-service-producer-prod.iam.gserviceaccount.com を見ると、 *Dataflow サービス エージェント` という特殊な役割が付与されていました。

サービス エージェント とは何か、ドキュメントで調べてみます。

サービス アカウント(service-project-number@dataflow-service-producer-prod.iam.gserviceaccount.com)が使用されます。このアカウントは、Cloud Dataflow プロジェクト作成時に自動的に作成され、そのプロジェクトに対する Cloud Dataflow サービス エージェントの役割が割り当てられます。さらに、そのプロジェクトで Cloud Dataflow ジョブを実行する(これには Compute Engine ワーカーの起動も含まれます)のに必要な権限が付与されます。このアカウントは Cloud Dataflow サービス専用であり、プロジェクトに固有のものです。

(https://cloud.google.com/dataflow/docs/concepts/security-and-permissions?hl=ja#cloud_dataflow_service_account より抜粋)

なるほど。自動的に作成される 役割 のようです。そして各サービス(ここではCloud Dataflow)に必要な権限が付与されているようです。

じゃあ、サービスアカウトに作成されているはずの役割(サービスエージェント)を追加すればよさそうですね。

サービスエージェントの存在確認

「IAMと管理」の 役割 を見てみました。

いろんなサービス エージェントがあることが確認できましたが、 Dataflow サービス エージェント は見当たりませんでした。自動的に作られるはずのサービス エージェントがない。

仮説

上記のエラーメッセージから、「サービス エージェントはきっとAPI有効化されたときに初めて作成される」と仮説を立てて検証しました。

Cloud Dataflowはまだ本番で利用していなかったので、ためらいなくAPIを無効化しました。

そのあと、API有効化してIAMを見ると、 service-[project number]dataflow-service-producer-prod.iam.gserviceaccount.comDataf low サービス エージェント が役割として追加されていました。

仮説が正しかったようです。

再実行

エラーメッセージに書かれていた、APIの有効化とサービスアカウントの権限見直しを実施できたため、もう一度実行してみます。

無事終了しました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away