Packer で Error 403: Required 'compute.zones.get' permission for... と出たとき・・・
クリスマスプレゼントが Error 403
だったとかは嫌なんですけど、出たものはしょうがないです。
エラー内容
> ./packer build gcp.json
googlecompute output will be in this color.
==> googlecompute: Checking image does not exist...
==> googlecompute: Creating temporary SSH key for instance...
==> googlecompute: Using image: ubuntu-1804-bionic-v20181222
==> googlecompute: Creating instance...
googlecompute: Loading zone: asia-northeast1-b
==> googlecompute: Error creating instance: googleapi: Error 403: Required 'compute.zones.get' permission for 'projects/<project name>/zones/asia-northeast1-b', forbidden
Build 'googlecompute' errored: Error creating instance: googleapi: Error 403: Required 'compute.zones.get' permission for 'projects/<project name>/zones/asia-northeast1-b', forbidden
==> Some builds didn't complete successfully and had errors:
--> googlecompute: Error creating instance: googleapi: Error 403: Required 'compute.zones.get' permission for 'projects/<project name>/zones/asia-northeast1-b', forbidden
==> Builds finished but no artifacts were created.
権限?
GCP の コンソール画面で使ってるサービスにはちゃんと権限ついてるのは確認しています。
何せ、権限で オーナー
つけてもダメなんですから・・・
ただ、色々とぐぐってみると、結局権限ぽい話に終着するんですよね。
結局南極・・・
大冒険も何もなく、gcloud コマンドでサービスアカウントから権限を一回剥奪して、付け直しただけで解決しました。
- gcloud で現状の権限を取得
> gcloud projects get-iam-policy <project name> --format json > iam.json
- iam.json の当該サービスアカウントの行を削除(同じ権限がある場合、
,
に注意) - 編集後の iam.json を使って一度権限を反映
> gcloud projects set-iam-policy <project name> iam.json
- もう一度現状の権限を取得
> gcloud projects get-iam-policy <project name> --format json > iam.json
- 付与したい権限の場所に使いたいサービスアカウントを入れて保存します
- 編集後の iam.json を使って再度権限を反映します
> gcloud projects set-iam-policy <project name> iam.json
うちの環境ではこれで大丈夫になりました。
終わりに
プロジェクト ID がいくつか紐づいてるアカウントで発生したので、何かそのあたりに原因があるんでしょうかね。
プロジェクトが1つしかないアカウントでは何も問題発生しなかったので。
権限周りは、AWS よりも GCP の方が若干くせがあるような気がします。
とりあえず、GUI でダメなときは、CLI 試してみようと思いました。
そういえば、このエラー、Terraformでも出ることあるらしいです。。。