🔨

TerraformでCloudSQLを編集するときの権限エラー

2021/08/23に公開

やりたかったこと

すでにGCP上で立っているCloudSQL(プライベートIP接続)のインスタンスを、リードレプリカとか作りたくてterraformいじってたら軽くハマった。

コードはほぼこれ。
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/sql_database_instance#private-ip-instance
で、google_service_networking_connectionreserved_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に使ってるサービスアカウントの権限編集者ですし。

解決

とりあえずエラーでググって出てきた公式さん。
https://cloud.google.com/vpc/docs/configure-private-services-access#permissions

プロジェクト オーナーと Compute ネットワーク管理者のロール(roles/compute.networkAdmin)を持つ IAM メンバーが、割り振られた IP アドレス範囲を作成し、プライベート接続を管理できます。

もう分からんから騙されたと思ってComputeネットワーク管理者も追加。

からのapplyしたら通りました。
(ただ結局google_service_networking_connectionはそれぞれ二つ作ることにした)

まとめ

  • 編集者権限にCompute ネットワーク管理者は含まれない
  • 編集者権限をあまり当てにしない

Discussion