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
| package main
import ( "context" "fmt"
authorizationv1 "k8s.io/api/authorization/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" )
func checkUserPermissions(clientset *kubernetes.Clientset, user string, verb string, resource string, namespace string) { sar := &authorizationv1.SubjectAccessReview{ Spec: authorizationv1.SubjectAccessReviewSpec{ User: user, ResourceAttributes: &authorizationv1.ResourceAttributes{ Verb: verb, Group: "", Version: "v1", Resource: resource, Namespace: namespace, }, }, }
result, err := clientset.AuthorizationV1().SubjectAccessReviews().Create( context.TODO(), sar, metav1.CreateOptions{}) if err != nil { fmt.Printf("Error checking permissions: %v\n", err) return }
if result.Status.Allowed { fmt.Printf("✅ User %s CAN %s %s in namespace %s\n", user, verb, resource, namespace) } else { fmt.Printf("❌ User %s CANNOT %s %s in namespace %s\n", user, verb, resource, namespace) if result.Status.Reason != "" { fmt.Printf(" Reason: %s\n", result.Status.Reason) } } }
|