-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelegator.tf
More file actions
54 lines (44 loc) · 1.79 KB
/
delegator.tf
File metadata and controls
54 lines (44 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Service account to delegate permission for DNS zone via IAM
locals {
delegator_name = "${substr(local.block_ref, 0, 30 - length("--12345"))}-${random_string.resource_suffix.result}"
}
resource "google_service_account" "delegator" {
account_id = local.delegator_name
display_name = "${local.resource_name} service account"
depends_on = [google_project_service.iam]
}
resource "google_project_iam_custom_role" "dns-delegator" {
role_id = replace("dns_delegator_${local.resource_name}", "-", "_")
title = "DNS delegator ${local.resource_name}"
description = "DNS delegator for ${local.resource_name}"
permissions = [
"dns.changes.create",
"dns.changes.get",
"dns.resourceRecordSets.create",
"dns.resourceRecordSets.delete",
"dns.resourceRecordSets.get",
"dns.resourceRecordSets.list",
"dns.resourceRecordSets.update",
"dns.managedZones.get",
"dns.managedZones.list",
]
depends_on = [google_project_service.iam]
}
resource "google_project_iam_member" "dns-delegator" {
role = google_project_iam_custom_role.dns-delegator.id
member = "serviceAccount:${google_service_account.delegator.email}"
project = data.google_project.this.project_id
}
locals {
delegators = toset(concat(var.nullstone_delegators, [local.ns_agent_service_account_email]))
}
// Allow Nullstone Agent(s) to impersonate the delegator account
resource "google_service_account_iam_binding" "delegator_nullstone_agent" {
service_account_id = google_service_account.delegator.id
role = "roles/iam.serviceAccountTokenCreator"
members = [for email in local.delegators : "serviceAccount:${email}"]
}
resource "google_service_account_key" "delegator" {
service_account_id = google_service_account.delegator.name
count = var.enable_delegator_key ? 1 : 0
}