Skip to content

Commit c27976d

Browse files
committed
FEA: Add maintainer_service_account_names input
1 parent 33f8a2a commit c27976d

File tree

5 files changed

+40
-37
lines changed

5 files changed

+40
-37
lines changed

iam_roles.tf

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,57 @@
11
locals {
2-
service_account_emails = toset(
3-
[
4-
"serviceAccount:${google_service_account.server_service_account.email}",
5-
]
2+
server_service_account_email = "serviceAccount:${google_service_account.server_service_account.email}"
3+
maintainer_service_account_emails = toset(
4+
[for account in google_service_account.maintainers : "serviceAccount:${account.email}"]
65
)
6+
all_service_account_emails = setunion(toset([local.server_service_account_email]), local.maintainer_service_account_emails)
77
}
88

99

1010
resource "google_project_iam_member" "iam__service_account_user" {
11-
for_each = local.service_account_emails
1211
project = var.google_cloud_project_id
1312
role = "roles/iam.serviceAccountUser"
14-
member = each.value
13+
member = local.server_service_account_email
1514
}
1615

1716

18-
# Allows the GHA to call "namespaces get" for Cloud Run to determine the resulting run URLs of the services.
19-
# This should also allow a service to get its own name by using:
20-
# https://stackoverflow.com/questions/65628822/google-cloud-run-can-a-service-know-its-own-url/65634104#65634104
2117
resource "google_project_iam_member" "run__developer" {
22-
for_each = local.service_account_emails
2318
project = var.google_cloud_project_id
2419
role = "roles/run.developer"
25-
member = each.value
20+
member = local.server_service_account_email
2621
}
2722

2823

2924
resource "google_project_iam_member" "storage__object_admin" {
30-
for_each = local.service_account_emails
3125
project = var.google_cloud_project_id
3226
role = "roles/storage.objectAdmin"
33-
member = each.value
27+
member = local.server_service_account_email
3428
}
3529

3630

3731
resource "google_project_iam_member" "error_reporting__writer" {
3832
project = var.google_cloud_project_id
3933
role = "roles/errorreporting.writer"
40-
member = "serviceAccount:${google_service_account.server_service_account.email}"
34+
member = local.server_service_account_email
4135
}
4236

4337

4438
resource "google_project_iam_member" "cloudsql__client" {
45-
for_each = local.service_account_emails
4639
project = var.google_cloud_project_id
4740
role = "roles/cloudsql.client"
48-
member = each.value
41+
member = local.server_service_account_email
4942
}
5043

5144

52-
# Ensure superuser developers can connect to, import and export from
53-
# production/staging databases via cloudsql from terminals
54-
# https://cloud.google.com/sql/docs/mysql/iam-roles
55-
# https://cloud.google.com/sql/docs/mysql/iam-permissions
56-
# resource "google_project_iam_member" "cloudsql_superusers" {
57-
# project = var.project
58-
# role = "roles/cloudsql.editor"
59-
# members = [
60-
# local.server_service_accounts["thclark"].member_signature,
61-
# local.server_service_accounts["cortadocodes"].member_signature,
62-
# local.server_service_accounts["nvnnil"].member_signature
63-
# ]
64-
# }
45+
# Ensure maintainers can connect to, import and export from production/staging databases via cloudsql from
46+
# terminals
47+
# - https://cloud.google.com/sql/docs/mysql/iam-roles
48+
# - https://cloud.google.com/sql/docs/mysql/iam-permissions
49+
resource "google_project_iam_member" "cloudsql_maintainers" {
50+
for_each = local.maintainer_service_account_emails
51+
project = var.google_cloud_project_id
52+
role = "roles/cloudsql.editor"
53+
member = each.value
54+
}
6555

6656

6757
# TODO REFACTOR REQUEST servers shouldn't be allowed to create and delete queues
@@ -76,17 +66,15 @@ resource "google_project_iam_member" "cloudsql__client" {
7666

7767
# Allow django-gcp.tasks to create periodic tasks in google cloud scheduler
7868
resource "google_project_iam_member" "cloudscheduler__admin" {
79-
for_each = local.service_account_emails
8069
project = var.google_cloud_project_id
8170
role = "roles/cloudscheduler.admin"
82-
member = each.value
71+
member = local.server_service_account_email
8372
}
8473

8574

86-
# Allow the server to pull
75+
# Allow the server to pull secrets.
8776
resource "google_project_iam_member" "secretmanager__secret_accessor" {
88-
for_each = local.service_account_emails
8977
project = var.google_cloud_project_id
9078
role = "roles/secretmanager.secretAccessor"
91-
member = each.value
79+
member = local.server_service_account_email
9280
}

iam_service_accounts.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,12 @@ resource "google_service_account" "server_service_account" {
44
display_name = "${var.resource_affix}--server--${var.environment}"
55
project = var.google_cloud_project_id
66
}
7+
8+
9+
resource "google_service_account" "maintainers" {
10+
for_each = var.maintainer_service_account_names
11+
account_id = "maintainer-${each.key}"
12+
display_name = "maintainer-${each.key}"
13+
project = var.google_cloud_project_id
14+
description = "Allow ${each.key} to access most resources related to Octue Twined services."
15+
}

secrets.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ resource "google_secret_manager_secret_iam_member" "service_account_secret_acces
1111
for_each = google_secret_manager_secret.secrets
1212
secret_id = each.value.secret_id
1313
role = "roles/secretmanager.secretAccessor"
14-
member = "serviceAccount:${google_service_account.server_service_account.email}"
14+
member = local.server_service_account_email
1515
depends_on = [google_secret_manager_secret.secrets]
1616
}

tasks.tf

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ resource "google_cloud_tasks_queue" "default" {
1818

1919

2020
resource "google_cloud_tasks_queue_iam_member" "default_queue_task_create" {
21-
for_each = local.service_account_emails
2221
name = google_cloud_tasks_queue.default.name
2322
location = google_cloud_tasks_queue.default.location
2423
role = "roles/cloudtasks.enqueuer"
25-
member = each.value
24+
member = local.server_service_account_email
2625
}

variables.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ variable "environment" {
2323
}
2424

2525

26+
variable "maintainer_service_account_names" {
27+
type = set(string)
28+
default = ["default"]
29+
description = "The names of each maintainer IAM service account that should be created. They'll automatically be prefixed with 'maintainer-'."
30+
}
31+
32+
2633
variable "secret_names" {
2734
description = "A list of secrets to be created and made accessible to the cloud run instance."
2835
type = set(string)

0 commit comments

Comments
 (0)