Skip to content

Commit ebcf0cb

Browse files
committed
Use custom service account for search dataform
GCP is disabling the ability for Dataform instances to be run using the Default Dataform service Account, so all Dataform workflows must switch to a custom service account, which the Dataform Service Agent is given permissions on. Steps covered: - Set up custom service account "dataform-sa" - Change BigQuery internal project permissions from default service account to custom service account - Give default service account permissions to impersonate custom service account - Add custom service account to repo set up (to use this as the default account for running workflows) - Give custom service account secrets permissions to connect to our dataform Github repo
1 parent 9248946 commit ebcf0cb

1 file changed

Lines changed: 29 additions & 15 deletions

File tree

terraform/deployments/search-api-v2/dataform.tf

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# Create a service account for Dataform
2+
resource "google_service_account" "dataform_service_account" {
3+
account_id = "dataform-sa"
4+
display_name = "Dataform Service Account"
5+
project = var.gcp_project_id
6+
}
7+
18
variable "search_dataform_github_repository_url" {
29
description = "URL of the GitHub repository to link with Dataform"
310
type = string
@@ -14,22 +21,16 @@ resource "google_secret_manager_secret_iam_member" "member" {
1421
project = var.gcp_project_id
1522
secret_id = "github_search_v2_api_dataform_ssh_key"
1623
role = "roles/secretmanager.secretAccessor"
17-
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
18-
}
19-
20-
# Create a service account for Dataform
21-
resource "google_service_account" "dataform_service_account" {
22-
account_id = "dataform-sa"
23-
display_name = "Dataform Service Account"
24-
project = var.gcp_project_id
24+
member = google_service_account.dataform_service_account.member
2525
}
2626

2727
# Create Dataform repository with GitHub integration
2828
resource "google_dataform_repository" "search_api_v2" {
29-
provider = google-beta
30-
name = "search_api_v2"
31-
project = var.gcp_project_id
32-
region = var.gcp_region
29+
provider = google-beta
30+
name = "search_api_v2"
31+
project = var.gcp_project_id
32+
region = var.gcp_region
33+
service_account = google_service_account.dataform_service_account.email
3334

3435
git_remote_settings {
3536
url = var.search_dataform_github_repository_url
@@ -106,22 +107,35 @@ resource "google_dataform_repository_workflow_config" "search-monthly" {
106107
}
107108
}
108109

110+
# Permissions for Default Dataform Service Agent to impersonate our custom Dataform Service Account
111+
resource "google_service_account_iam_member" "dataform_sa_impersonation" {
112+
service_account_id = google_service_account.dataform_service_account.name
113+
role = "roles/iam.serviceAccountUser"
114+
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
115+
}
116+
117+
resource "google_service_account_iam_member" "dataform_sa_token_creator" {
118+
service_account_id = google_service_account.dataform_service_account.name
119+
role = "roles/iam.serviceAccountTokenCreator"
120+
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
121+
}
122+
109123
# BigQuery cross-project permissions
110124
# Service account permissions to access BigQuery
111125
resource "google_project_iam_member" "bigquery_data_editor" {
112126
project = "search-api-v2-${var.gcp_env}"
113127
role = "roles/bigquery.dataEditor"
114-
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
128+
member = google_service_account.dataform_service_account.member
115129
}
116130

117131
resource "google_project_iam_member" "bigquery_job_user" {
118132
project = "search-api-v2-${var.gcp_env}"
119133
role = "roles/bigquery.jobUser"
120-
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
134+
member = google_service_account.dataform_service_account.member
121135
}
122136

123137
resource "google_project_iam_member" "bigquery_data_viewer" {
124138
project = "search-api-v2-${var.gcp_env}"
125139
role = "roles/bigquery.dataViewer"
126-
member = "serviceAccount:service-${var.gcp_project_number}@gcp-sa-dataform.iam.gserviceaccount.com"
140+
member = google_service_account.dataform_service_account.member
127141
}

0 commit comments

Comments
 (0)