iam/iam.tf (86 lines of code) (raw):
resource "random_id" "this" {
byte_length = 4
}
resource "google_service_account" "this" {
account_id = "${var.serviceac}-${random_id.this.hex}"
display_name = var.dname
}
resource "google_service_account_key" "this" {
service_account_id = google_service_account.this.name
}
# Create credentials.json with private_key in current directory
resource "local_file" "this" {
content = base64decode(google_service_account_key.this.private_key)
filename = "credentials.json"
}
resource "google_project_iam_member" "this" {
project = var.project
role = google_project_iam_custom_role.this.name
member = "serviceAccount:${google_service_account.this.account_id}@${var.project}.iam.gserviceaccount.com"
}
resource "google_project_iam_custom_role" "this" {
role_id = "iam_least_privilege_${random_id.this.hex}"
title = "The IAM Least Privilege Role #${random_id.this.hex}"
permissions = [
"resourcemanager.projects.getIamPolicy",
"iam.serviceAccounts.list",
"iam.serviceAccountKeys.list",
"cloudkms.keyRings.list",
"logging.sinks.list",
"logging.logMetrics.get",
"monitoring.alertPolicies.list",
"dns.managedZones.list",
"compute.firewalls.list",
"compute.subnetworks.list",
"compute.instances.list",
"compute.projects.get",
"compute.disks.list",
"storage.buckets.list",
"cloudsql.instances.list",
"container.clusters.list",
"compute.backendServices.list",
"compute.sslCertificates.list",
"compute.sslPolicies.list",
"compute.snapshots.list",
"compute.targetHttpsProxies.list",
"storage.buckets.list",
"storage.buckets.getIamPolicy",
"bigquery.datasets.get",
"cloudkms.keyRings.getIamPolicy",
"compute.networks.list",
"dns.policies.list",
"appengine.applications.get",
"pubsub.topics.list",
"cloudkms.cryptoKeys.list",
"bigquery.tables.list",
"bigtable.instances.list",
"compute.images.list",
"compute.instanceTemplates.list",
"logging.logMetrics.list",
"resourcemanager.projects.get",
"cloudfunctions.functions.list",
"spanner.instances.getIamPolicy",
"spanner.instances.list",
"spanner.backups.list",
"spanner.backups.getIamPolicy",
"spanner.databases.list",
"spanner.databases.getIamPolicy",
"cloudfunctions.functions.getIamPolicy",
"pubsub.subscriptions.list",
"spanner.backups.list",
"compute.securityPolicies.list",
"compute.regions.list",
"dataproc.clusters.list",
"run.revisions.list",
"run.services.list",
"compute.images.getIamPolicy",
"accessapproval.settings.get",
"accessapproval.requests.get",
"serviceusage.services.list",
"secretmanager.secrets.list",
"compute.instanceGroupManagers.list",
"redis.instances.list",
"artifactregistry.repositories.list",
"osconfig.patchDeployments.list",
"compute.networks.getEffectiveFirewalls",
]
}