#はじめに
PythonでGCSバケット内のオブジェクトを操作したい場合の権限について、単純にIAMで指定するGCSオブジェクトオーナー権限だけではPermissionエラーでしたのでメモしておきます。
#エラー内容
対象のサービスアカウントに"Storage オブジェクト管理者"や"Storage オブジェクト作成者"、"Storage オブジェクト閲覧者"の権限を付けてPythonを実行しても以下のエラーが出ます。
google.api_core.exceptions.Forbidden: 403 GET https://storage.googleapis.com/storage/v1/b/[バケット名]?projection=noAcl&prettyPrint=false: [サービスアカウント] does not have storage.buckets.get access to the Google Cloud Storage bucket.
pythonコードについては、こちらがよく書かれていますのでご参考下さい。
pythonによるGCSへのバケット・ファイルの操作(転送・取得・削除・読み込み等)まとめ
サービスアカウントのjson keyをダウンロードしてご利用ください。
#対策方法
"Storage レガシー オブジェクト オーナー"が必要です。
"Storage レガシー オブジェクト オーナー"に対象のサービスアカウントを追加してください。
こちらはIAM画面では設定できず、GCSバケット詳細のロールで設定が可能です。
#さいごに
よく調べてないのですが、公式ドキュメントあるのでしょうか。
まぁ、動いたから良しとします。
(コンソール画面で操作してしまいました。これからTerraformに落とします)