🔨
TerraformでCloudSQLを編集するときの権限エラー
やりたかったこと
すでにGCP上で立っているCloudSQL(プライベートIP接続)のインスタンスを、リードレプリカとか作りたくてterraformいじってたら軽くハマった。
コードはほぼこれ。google_service_networking_connection
のreserved_peering_ranges
ってのが配列だからレプリカ用のもここに突っ込めるんじゃないかーとか思っていろいろいじってた。
resource "google_service_networking_connection" "private_vpc_connection" {
provider = google-beta
network = google_compute_network.private_network.id
service = "servicenetworking.googleapis.com"
# ↓これ
reserved_peering_ranges = [google_compute_global_address.private_ip_address.name, google_compute_global_address.replica_ip_address.name]
}
そしたらいつの間にかapplyが通らなくなってた。
エラー内容
╷
│ Error: googleapi: Error 403: Permission denied to update connection for service 'servicenetworking.googleapis.com'.
│ Help Token: XXXXXXX, forbidden
│
│ with module.cloud-sql.google_service_networking_connection.private-vpc-connection,
│ on ../../modules/cloudsql/main.tf line 23, in resource "google_service_networking_connection" "private-vpc-connection":
│ 23: resource "google_service_networking_connection" "private-vpc-connection" {
│
いや、Permission denied
っていままで出来てたやろ...。そもそもterraformに使ってるサービスアカウントの権限編集者
ですし。
解決
とりあえずエラーでググって出てきた公式さん。
プロジェクト オーナーと Compute ネットワーク管理者のロール(roles/compute.networkAdmin)を持つ IAM メンバーが、割り振られた IP アドレス範囲を作成し、プライベート接続を管理できます。
もう分からんから騙されたと思ってComputeネットワーク管理者
も追加。
からのapplyしたら通りました。
(ただ結局google_service_networking_connection
はそれぞれ二つ作ることにした)
まとめ
-
編集者
権限にCompute ネットワーク管理者
は含まれない -
編集者
権限をあまり当てにしない
Discussion