Skip to content

Commit 92c444f

Browse files
authored
feat: add organization-scoped IAM roles (#532)
## Summary The platform `iam-admin` role includes permissions for platform-level resources — `protectedresources` and `users` — that have no Organization parent and don't belong in the Organization resource hierarchy. When this role is granted at the organization level it gives access to platform-wide resources, which is broader than intended. This PR introduces three new roles scoped strictly to resources that have `Organization` as a parent: - **`iam-organization-viewer`**: Read access to `groups`, `groupmemberships`, `userinvitations`, and `policybindings` - **`iam-organization-editor`**: Inherits viewer; adds create/update/patch/delete on the same resources - **`iam-organization-admin`**: Inherits editor; acts as the org-level IAM admin role These roles intentionally exclude: - `iam.miloapis.com/users.*` — platform resource (no org parent) - `iam.miloapis.com/protectedresources.*` — platform resource (no org parent) - `iam.miloapis.com/roles.*` — scoped to `Service`, not `Organization` ## Test plan - [ ] Apply the new Role manifests to a dev cluster and verify they are accepted - [ ] Assign `iam-organization-admin` to a user on an organization and confirm they can manage groups/policybindings but cannot access platform-level IAM resources - [ ] Confirm `iam-organization-viewer` grants read-only access as expected 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2 parents 7f5c1ec + fcbd9dd commit 92c444f

4 files changed

Lines changed: 64 additions & 0 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: iam.miloapis.com/v1alpha1
2+
kind: Role
3+
metadata:
4+
name: iam-organization-admin
5+
annotations:
6+
kubernetes.io/display-name: IAM Organization Admin
7+
kubernetes.io/description: "Full access to organization-scoped IAM resources"
8+
spec:
9+
launchStage: Beta
10+
inheritedRoles:
11+
- name: iam-organization-editor
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
apiVersion: iam.miloapis.com/v1alpha1
2+
kind: Role
3+
metadata:
4+
name: iam-organization-editor
5+
annotations:
6+
kubernetes.io/display-name: IAM Organization Editor
7+
kubernetes.io/description: "Edit organization-scoped IAM resources"
8+
spec:
9+
launchStage: Beta
10+
inheritedRoles:
11+
- name: iam-organization-viewer
12+
includedPermissions:
13+
- iam.miloapis.com/groups.create
14+
- iam.miloapis.com/groups.update
15+
- iam.miloapis.com/groups.patch
16+
- iam.miloapis.com/groups.delete
17+
- iam.miloapis.com/groupmemberships.create
18+
- iam.miloapis.com/groupmemberships.update
19+
- iam.miloapis.com/groupmemberships.patch
20+
- iam.miloapis.com/groupmemberships.delete
21+
- iam.miloapis.com/userinvitations.create
22+
- iam.miloapis.com/userinvitations.update
23+
- iam.miloapis.com/userinvitations.patch
24+
- iam.miloapis.com/userinvitations.delete
25+
- iam.miloapis.com/policybindings.create
26+
- iam.miloapis.com/policybindings.update
27+
- iam.miloapis.com/policybindings.patch
28+
- iam.miloapis.com/policybindings.delete
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: iam.miloapis.com/v1alpha1
2+
kind: Role
3+
metadata:
4+
name: iam-organization-viewer
5+
annotations:
6+
kubernetes.io/display-name: IAM Organization Viewer
7+
kubernetes.io/description: "View organization-scoped IAM resources"
8+
spec:
9+
launchStage: Beta
10+
includedPermissions:
11+
- iam.miloapis.com/groups.get
12+
- iam.miloapis.com/groups.list
13+
- iam.miloapis.com/groups.watch
14+
- iam.miloapis.com/groupmemberships.get
15+
- iam.miloapis.com/groupmemberships.list
16+
- iam.miloapis.com/groupmemberships.watch
17+
- iam.miloapis.com/userinvitations.get
18+
- iam.miloapis.com/userinvitations.list
19+
- iam.miloapis.com/userinvitations.watch
20+
- iam.miloapis.com/policybindings.get
21+
- iam.miloapis.com/policybindings.list
22+
- iam.miloapis.com/policybindings.watch

config/roles/kustomization.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ resources:
77
- iam-viewer.yaml
88
- iam-editor.yaml
99
- iam-admin.yaml
10+
- iam-organization-viewer.yaml
11+
- iam-organization-editor.yaml
12+
- iam-organization-admin.yaml
1013
- resourcemanager-reader.yaml
1114
- resourcemanager-editor.yaml
1215
- resourcemanager-admin.yaml

0 commit comments

Comments
 (0)