From 1e1b2bd594c74835fa8920da2ef0d3fd19f5cea8 Mon Sep 17 00:00:00 2001 From: KubeSphere CI Bot <47586280+ks-ci-bot@users.noreply.github.com> Date: Thu, 8 Sep 2022 10:25:41 +0800 Subject: [PATCH] [release-3.3] support recording disable and enable users in auditing (#5202) support recording disable and enable users in auditing Signed-off-by: wanjunlei Signed-off-by: wanjunlei Co-authored-by: wanjunlei --- pkg/apiserver/auditing/types.go | 38 +++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/pkg/apiserver/auditing/types.go b/pkg/apiserver/auditing/types.go index e3c2fe122..394216c4b 100644 --- a/pkg/apiserver/auditing/types.go +++ b/pkg/apiserver/auditing/types.go @@ -33,8 +33,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apiserver/pkg/apis/audit" "k8s.io/klog" - devopsv1alpha3 "kubesphere.io/api/devops/v1alpha3" + "kubesphere.io/api/iam/v1alpha2" auditv1alpha1 "kubesphere.io/kubesphere/pkg/apiserver/auditing/v1alpha1" "kubesphere.io/kubesphere/pkg/apiserver/query" @@ -192,7 +192,7 @@ func (a *auditing) LogRequestObject(req *http.Request, info *request.RequestInfo } } - if (e.Level.GreaterOrEqual(audit.LevelRequest) || e.Verb == "create") && req.ContentLength > 0 { + if a.needAnalyzeRequestBody(e, req) { body, err := ioutil.ReadAll(req.Body) if err != nil { klog.Error(err) @@ -212,11 +212,45 @@ func (a *auditing) LogRequestObject(req *http.Request, info *request.RequestInfo e.ObjectRef.Name = obj.Name } } + + // for recording disable and enable user + if e.ObjectRef.Resource == "users" && e.Verb == "update" { + u := &v1alpha2.User{} + if err := json.Unmarshal(body, u); err == nil { + if u.Status.State == v1alpha2.UserActive { + e.Verb = "enable" + } else if u.Status.State == v1alpha2.UserDisabled { + e.Verb = "disable" + } + } + } } return e } +func (a *auditing) needAnalyzeRequestBody(e *auditv1alpha1.Event, req *http.Request) bool { + + if req.ContentLength <= 0 { + return false + } + + if e.Level.GreaterOrEqual(audit.LevelRequest) { + return true + } + + if e.Verb == "create" { + return true + } + + // for recording disable and enable user + if e.ObjectRef.Resource == "users" && e.Verb == "update" { + return true + } + + return false +} + func (a *auditing) LogResponseObject(e *auditv1alpha1.Event, resp *ResponseCapture) { e.StageTimestamp = metav1.NowMicro()