事象
Rails_admin 上から carriewaveを経由してGCSにアップロードする際に以下のエラーが発生しました。
forbidden: hogehoge@hogehoge.iam.gserviceaccount.com(opens in new tab) does not have storage.buckets.get access to the Google Cloud Storage bucket.
今までは、オブジェクトストレージ管理者権限のサービスアカウントで問題なく動作していたのですが、同じようにサービスアカウントを作成してもうまくいきませんでした。
原因
どこかのタイミングで、オブジェクトストレージの権限周りが変わったっぽいです。
https://cloud.google.com/storage/docs/access-control/iam-roles?hl=ja#legacy-roles
権限周りのドキュメントを見ていると 以前の権限(legacy-roles) とあるので、おそらくどこかのタイミングで オブジェクトストレージ管理者
では storage.buckets
周りの権限はセットでつかなくなったみたいですね。
なので、上記のサービスアカウントに ストレージバケット閲覧者
の権限をつけてあげることで動作ができるようになりました。
※実際に権限を付けるときは、 必要以上に権限を付けないように注意していただければと思います。
最後に
GCPの設定周りの変更って、既存サービスに影響ないように作ってくれることが多いので(それはかなりありがたいことなのだが)、新しく構築するときに今までと同じように作ってうまく行かないことが多々ありますよね。
コピペじゃなくて、ちゃんと根本を理解して環境構築することの重要性を再認識しました。