11locals {
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
1010resource "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
2117resource "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
2924resource "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
3731resource "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
4438resource "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
7868resource "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.
8776resource "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}
0 commit comments