Skip to content

Commit 6f31e56

Browse files
authored
Implement the member_type on the users.yml (#36460)
It now supports user, serviceAccount and group. Groups where not being created before.
1 parent 1e7167b commit 6f31e56

4 files changed

Lines changed: 191 additions & 13 deletions

File tree

infra/enforcement/iam.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def _export_project_iam(self) -> List[Dict]:
113113
members_data[member_str] = {
114114
"username": username,
115115
"email": email_address,
116+
"member_type": member_type,
116117
"permissions": []
117118
}
118119

@@ -131,6 +132,7 @@ def _export_project_iam(self) -> List[Dict]:
131132
output_list.append({
132133
"username": data["username"],
133134
"email": data["email"],
135+
"member_type": data["member_type"],
134136
"permissions": data["permissions"]
135137
})
136138

@@ -225,6 +227,8 @@ def check_compliance(self) -> List[str]:
225227
elif not current_user and existing_user:
226228
differences.append(f"User {email} found in policy file but not in GCP.")
227229
elif current_user and existing_user:
230+
if current_user.get("member_type") != existing_user.get("member_type"):
231+
differences.append(f"User {email} has different member type. In GCP: {current_user.get('member_type')}, in file: {existing_user.get('member_type')}")
228232
if current_user["permissions"] != existing_user["permissions"]:
229233
msg = f"\nPermissions for user {email} differ."
230234
msg += f"\nIn GCP: {current_user['permissions']}"

infra/iam/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ To manage user roles, edit the `users.yml` file. Add or modify entries under the
3333
users:
3434
- username: <username>
3535
email: <email>
36+
member_type: <user|serviceAccount|group>
3637
permissions:
3738
- role: <role>
3839
title: <title> (optional)

infra/iam/users.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ locals {
2828
{
2929
username = user.username
3030
email = user.email
31+
member_type = user.member_type
3132
role = replace(perm.role, "PROJECT-ID", var.project_id)
3233
title = lookup(perm, "title", null)
3334
description = lookup(perm, "description", null)
@@ -46,7 +47,7 @@ resource "google_project_iam_member" "project_members" {
4647
}
4748
project = var.project_id
4849
role = each.value.role
49-
member = can(regex(".*\\.gserviceaccount\\.com$", each.value.email)) ? "serviceAccount:${each.value.email}" : "user:${each.value.email}"
50+
member = "${each.value.member_type}:${each.value.email}"
5051

5152
dynamic "condition" {
5253
# Condition is only created if expiry_date is set

0 commit comments

Comments
 (0)