【解決済】Cloud IAM でサービスエージェントから全権限を削除すると見えなくなる
Naofumi Yamada
Data Engineerことの発端#
AutoML Tables のサービスエージェント権限を持つサービスアカウントで、大量に推論してたら、推論がエラーを吐くようになった。 BigQuery ジョブ一覧を除くと以下のようなジョブが大量に失敗していた。
後からわかったことだが、AutoML Tables の入出力に BigQuery を指定すると Storage インポートエクスポートを自動でやってくれるだけであった。そのため、1 日のエクスポート上限 11 TB 弱に引っかかってしまった(インポートは上限なし)。
話を戻そう。これを知らずに異常発生と思い、サービスエージェント service-*************@gcp-sa-******.iam.gserviceaccount.com から全ての権限を剥奪した。
ゆっくり検証して、上記のように不正利用ではないことがわかって、サービスエージェントの権限を戻そうとした。
しかし、Cloud IAM のメンバーに service-*************@gcp-sa-******.iam.gserviceaccount.com が見つからないのだ。
いろいろ調べる#
API を一度無効にして、有効化することで戻るらしいが、AutoML Tables のデータが飛ぶ可能性を考えると怖くて実施できなかった。
サポートに問い合わせる#
こんな時頼りになるのが Google Cloud Platform サポート。 事情を説明するとこんな回答がきた。
1. を実行するも、以下のように、目新しい情報は見つからない。
UNIQUE_ID が分からないので、2. は実行できなかった。
ただ、実行結果を見るに削除されていないと判断し、見えなくなっているだけと仮説をおいて復旧を試みた。
解決策#
Cloud IAM から、service-*************@gcp-sa-******.iam.gserviceaccount.com に剥奪前と同等の権限を付与することで復旧した。
めでたいが、次回以降、曖昧な解決では困るので、サポートにもう一度連絡した。
権限のふられていないサービスアカウントを一覧する方法#
問い合わせたら、もう少し待ってときた。
今日、1 月 21 日(火)18 時に返信がきた。
重ねていうが、権限がついていないサービスアカウントを簡単に特定するコマンドはないということだ。 2 つのコマンドの差分を見て、特定、そのアカウントに元の権限を付与することで解決する。 元の権限が分からなければ、新規プロジェクトで API 有効化して Cloud IAM を見ればよい。
というわけで収束した。
まとめ#
サービスエージェント service-*************@gcp-sa-******.iam.gserviceaccount.com から全権を剥奪すると見えなくなる。
見えなくなっても、削除されておらず service-*************@gcp-sa-******.iam.gserviceaccount.com に元の権限を与えれば元通りである。
見えなくなった物を見るには、「1.IAMに登録されているサービスアカウントの一覧を表示」、「2.プロジェクトのIAMリストを権限を含めて表示」の差分を使う。