Permission Error 地獄
Error: Permission iam.serviceAccounts.signBlob is required ...
ふむふむ、Permissionがないっていってるんやな。適切なPermissionをつければ動くのだろう。
=> googling...
なるほど、よくわからん!!
なんか適当にそれっぽいの含んでそうな権限を付与したら動くようになった!
えいや!
Error: xxxxxxx@appspot.gserviceaccount.com does not have storage.objects.get access to ...
(´;ω;`)
またなんか出た。
=> googling...
なるほど、よくわからん!!
Error: xxxxx@appspot.gserviceaccount.com does not have storage.objects.create access to ...
...勘弁してください...
てなことよくありませんか?
私はよく起こります。
そのたびにわからないながらもググって、おなじようなエラーに直面した人の解決方法見て、
Storage Admin をIAMで付与すると動きました!
とかを鵜呑みにして、「これ本当に適切なのだろうか???」とか思いながらも、とりあえず動かすためには書かれていた権限を付与したり、最悪Project Ownerとか付与したりしてモヤモヤとしていました。
ドキュメント見ても、権限 storage.objects.create がどんなことができるかとかそういうことしか書いてなくて、
**これだ!**という確信がないままIAMでRoleを設定することになります。
苦節数年…やっと解法を得たので共有しておきます。
Permissionに対応するRoleが何か調べる方法
- GCPのConsole > IAM & admin > Role と進みます。
- 検索種別にPermissionを
- 必要とされるPermissionで検索
すると、なんということでしょう。該当するPermissionを含んだRole達がずらりとリストされます。
title部をクリックすると、このRoleに割当てられているPermissionが一覧で確認できます。
後は、この中から妥当なRoleを決めて、IAMに設定すればOKです。
選択すべきRole
おそらくですが、なるべく権限範囲の狭いRoleを付与するのが適切だと思われます。
先の例だと、Storage Admin
までは実は必要なく、Storage Object Admin
があれば、
storage.objects.get
storage.objects.create
をカバーしているのでStorage Object Admin
の方が適切かと。
iam.serviceAccounts.signBlob
だと Service Account Token Creator
かな?
とりあえず、何でも Project Owner からは卒業しましょう!(汗