Skip to content

Commit 0f18fd7

Browse files
ps-occrpimrannayer
andauthored
feat: Follow least privilege principal for backup service account (#597)
Co-authored-by: Imran Nayer <[email protected]>
1 parent 51c3bd6 commit 0f18fd7

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

modules/backup/main.tf

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ locals {
1919
create_service_account = var.service_account == null || var.service_account == "" ? true : false
2020
service_account = local.create_service_account ? google_service_account.sql_backup_serviceaccount[0].email : var.service_account
2121
backup_name = "sql-backup-${var.sql_instance}${var.unique_suffix}"
22+
role_name = var.enable_export_backup ? "roles/cloudsql.editor" : "roles/cloudsql.viewer"
2223
export_name = var.use_sql_instance_replica_in_exporter ? "sql-export-${var.sql_instance_replica}${var.unique_suffix}" : "sql-export-${var.sql_instance}${var.unique_suffix}"
2324
}
2425

@@ -38,8 +39,15 @@ resource "google_service_account" "sql_backup_serviceaccount" {
3839
resource "google_project_iam_member" "sql_backup_serviceaccount_sql_admin" {
3940
count = local.create_service_account ? 1 : 0
4041
member = "serviceAccount:${google_service_account.sql_backup_serviceaccount[0].email}"
41-
role = "roles/cloudsql.admin"
42+
role = local.role_name
4243
project = var.project_id
44+
condition {
45+
title = "Limit access to instance ${var.sql_instance}"
46+
expression = <<-EOT
47+
(resource.type == "sqladmin.googleapis.com/Instance" &&
48+
resource.name == "projects/${var.project_id}/instances/${var.sql_instance}")
49+
EOT
50+
}
4351
}
4452

4553
resource "google_project_iam_member" "sql_backup_serviceaccount_workflow_invoker" {

0 commit comments

Comments
 (0)