Skip to content

Commit 32e8c4f

Browse files
committed
Give GCP Cloud Function an explicit service account to build/publish code
1 parent 7173c16 commit 32e8c4f

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

gcp/tf/builder.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// The builder service account has enough permissions to build the code for the cloud function
2+
3+
locals {
4+
truncated_len = min(length(var.name), 28 - length("builder-"))
5+
builder_name = "builder-${substr(var.name, 0, local.truncated_len)}"
6+
}
7+
8+
resource "google_service_account" "builder" {
9+
account_id = local.builder_name
10+
display_name = "Builder for pg db admin ${var.name}"
11+
}
12+
13+
// Allow cloud builder to impersonate the builder service account
14+
resource "google_service_account_iam_member" "cloudbuild_impersonate_cf_build" {
15+
service_account_id = google_service_account.builder.name
16+
role = "roles/iam.serviceAccountUser"
17+
member = "serviceAccount:${local.project_number}@cloudbuild.gserviceaccount.com"
18+
}
19+
20+
resource "google_project_iam_member" "builder_build" {
21+
project = local.project_id
22+
role = "roles/cloudbuild.builds.builder"
23+
member = "serviceAccount:${google_service_account.builder.email}"
24+
}
25+
26+
resource "google_project_iam_member" "builder_publish_artifacts" {
27+
project = local.project_id
28+
role = "roles/artifactregistry.writer"
29+
member = "serviceAccount:${google_service_account.builder.email}"
30+
}
31+
32+
resource "google_project_iam_member" "builder_code_access" {
33+
project = local.project_id
34+
role = "roles/storage.objectViewer"
35+
member = "serviceAccount:${google_service_account.builder.email}"
36+
}

gcp/tf/function.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ resource "google_cloudfunctions2_function" "function" {
1212
labels = var.labels
1313

1414
build_config {
15-
runtime = "go125"
16-
entry_point = "pg-db-admin"
15+
runtime = "go125"
16+
entry_point = "pg-db-admin"
17+
service_account = google_service_account.builder.email
1718

1819
environment_variables = {
1920
"SOURCE_HASH" : filebase64sha256(local.package_filename)

gcp/tf/gcp.tf

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
data "google_client_config" "this" {}
2+
data "google_project" "this" {}
23

34
locals {
4-
project_id = data.google_client_config.this.project
5-
region = data.google_client_config.this.region
6-
region_prefix = lower(substr(local.region, 0, 2))
5+
project_id = data.google_client_config.this.project
6+
project_number = data.google_project.this.number
7+
region = data.google_client_config.this.region
8+
region_prefix = lower(substr(local.region, 0, 2))
79
}
810

911
resource "google_project_service" "run" {

0 commit comments

Comments
 (0)