Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: Discover unused ClusterRoleBindings #335

Open
10 tasks
doronkg opened this issue Jul 25, 2024 · 4 comments
Open
10 tasks

feature: Discover unused ClusterRoleBindings #335

doronkg opened this issue Jul 25, 2024 · 4 comments
Assignees
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@doronkg
Copy link
Contributor

doronkg commented Jul 25, 2024

Is your feature request related to a problem?
ClusterRoleBindings can be created while referencing non-existing users/groups/ServiceAccounts on one hand or ClusterRoles on the other hand.

Go through all existing ClusterRoleBindings and verify if they are applied to existing subjects and ClusterRoles.
Utilize ShowReason flag to indicate that the reason the ClusterRoleBinding was considered unused was because it referenced an unused subject or ClusterRole.

NOTE: Since a ClusterRoleBinding can include multiple subject references, discovering a single non-existing subject (one of several existing ones) might indicate the ClusterRoleBinding as unused while it actually is, in that case, it shouldn't be considered as unused.

Examples

In the attached example, we could see a ClusterRoleBinding with references to both users: alice & bob.

  1. Assuming both users alice & bob does not exist, the ClusterRole is not applied to them, hence the ClusterRoleBinding will be considered as UNUSED.
  2. Assuming both users alice & bob exist, but the ClusterRole does not exist, it is not applied to them, hence the ClusterRoleBinding will be considered as UNUSED.
  3. Assuming user alice does exist and the ClusterRole is applied to it, even while bob does not exist - the ClusterRoleBinding will be considered as USED.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-global
subjects:
- kind: User
  name: alice
  apiGroup: rbac.authorization.k8s.io
- kind: User
  name: bob
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole 
  name: pod-reader 
  apiGroup: rbac.authorization.k8s.io

Describe the solution you'd like

$ kor clusterrolebindings
Unused ClusterRoleBindings:
+---+----------------+----------------------------------------------+-----------------------------+
| # | NAMESPACE |   RESOURCE NAME |                         REASON                                |
+---+----------------+----------------------------------------------+-----------------------------+
| 1 |           | example-crb-1   | ClusterRoleBinding references a non-existing ServiceAccount   |  
| 2 |           | example-crb-2   | ClusterRoleBinding references a non-existing ClusterRole      |
+---+----------------+----------------------------------------------+-----------------------------+

Feature checklist

  • pkg/kor/clusterrolebindings.go
  • pkg/kor/clusterrolebindings_test.go
  • pkg/kor/create_test_resources.go
  • pkg/kor/all.go
  • pkg/kor/delete.go
  • pkg/kor/multi.go
  • pkg/kor/exceptions/clusterrolebindings
  • cmd/kor/clusterrolebindings.go
  • charts/kor/templates/role.yaml
  • README.md
@yonahd yonahd added enhancement New feature or request good first issue Good for newcomers labels Jul 25, 2024
@doronkg
Copy link
Contributor Author

doronkg commented Oct 13, 2024

@nati-elmaliach would you also like to claim this issue following #362?
The logic would be pretty similar.

@nati-elmaliach
Copy link
Contributor

@nati-elmaliach would you also like to claim this issue following #362? The logic would be pretty similar.

Sure thing. @yonahd please assign it to me.

@nati-elmaliach
Copy link
Contributor

nati-elmaliach commented Oct 15, 2024

@doronkg @yonahd

Just a quick clarification:

  • A ClusterRoleBinding is not tied to any specific namespace. How would you prefer the output to be displayed?

  • This command make no sense kor clsuterrolebindings --include-namespaces. should it throw, show a warning, or ignored ?

@yonahd
Copy link
Owner

yonahd commented Oct 15, 2024

Great questions
You can see how it is handled in the persistent volume resource.
Let me know if this covers your questions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants