1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-24 08:36:46 +00:00

feat: add user info in cel engine (#12410)

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
Charles-Edouard Brétéché 2025-03-14 10:35:44 +01:00 committed by GitHub
parent e190f84845
commit ff7f57713e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 23 additions and 7 deletions

View file

@ -43,6 +43,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
admissionv1 "k8s.io/api/admission/v1" admissionv1 "k8s.io/api/admission/v1"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
authenticationv1 "k8s.io/api/authentication/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@ -285,7 +286,7 @@ func (c *ApplyCommandConfig) applyCommandHelper(out io.Writer) (*processor.Resul
if err != nil { if err != nil {
return rc, resources1, skippedInvalidPolicies, responses1, err return rc, resources1, skippedInvalidPolicies, responses1, err
} }
responses3, err := c.applyValidatingPolicies(vps, jsonPayloads, celexceptions, resources1, variables.Namespace, rc, dClient) responses3, err := c.applyValidatingPolicies(vps, jsonPayloads, celexceptions, resources1, variables.Namespace, userInfo, rc, dClient)
if err != nil { if err != nil {
return rc, resources1, skippedInvalidPolicies, responses1, err return rc, resources1, skippedInvalidPolicies, responses1, err
} }
@ -416,6 +417,7 @@ func (c *ApplyCommandConfig) applyValidatingPolicies(
exceptions []*policiesv1alpha1.CELPolicyException, exceptions []*policiesv1alpha1.CELPolicyException,
resources []*unstructured.Unstructured, resources []*unstructured.Unstructured,
namespaceProvider func(string) *corev1.Namespace, namespaceProvider func(string) *corev1.Namespace,
userInfo *kyvernov2.RequestInfo,
rc *processor.ResultCounts, rc *processor.ResultCounts,
dclient dclient.Interface, dclient dclient.Interface,
) ([]engineapi.EngineResponse, error) { ) ([]engineapi.EngineResponse, error) {
@ -484,6 +486,10 @@ func (c *ApplyCommandConfig) applyValidatingPolicies(
return responses, fmt.Errorf("failed to map gvk to gvr %s (%v)\n", gvk, err) return responses, fmt.Errorf("failed to map gvk to gvr %s (%v)\n", gvk, err)
} }
gvr := mapping.Resource gvr := mapping.Resource
var user authenticationv1.UserInfo
if userInfo != nil {
user = userInfo.AdmissionUserInfo
}
// create engine request // create engine request
request := engine.Request( request := engine.Request(
contextProvider, contextProvider,
@ -495,6 +501,7 @@ func (c *ApplyCommandConfig) applyValidatingPolicies(
resource.GetNamespace(), resource.GetNamespace(),
// TODO: how to manage other operations ? // TODO: how to manage other operations ?
admissionv1.Create, admissionv1.Create,
user,
resource, resource,
nil, nil,
false, false,

View file

@ -32,6 +32,7 @@ import (
engineapi "github.com/kyverno/kyverno/pkg/engine/api" engineapi "github.com/kyverno/kyverno/pkg/engine/api"
policyvalidation "github.com/kyverno/kyverno/pkg/validation/policy" policyvalidation "github.com/kyverno/kyverno/pkg/validation/policy"
admissionv1 "k8s.io/api/admission/v1" admissionv1 "k8s.io/api/admission/v1"
authenticationv1 "k8s.io/api/authentication/v1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
@ -298,6 +299,10 @@ func runTest(out io.Writer, testCase test.TestCase, registryAccess bool) (*TestR
return nil, fmt.Errorf("failed to map gvk to gvr %s (%v)\n", gvk, err) return nil, fmt.Errorf("failed to map gvk to gvr %s (%v)\n", gvk, err)
} }
gvr := mapping.Resource gvr := mapping.Resource
var user authenticationv1.UserInfo
if userInfo != nil {
user = userInfo.AdmissionUserInfo
}
// create engine request // create engine request
request := engine.Request( request := engine.Request(
contextProvider, contextProvider,
@ -309,6 +314,7 @@ func runTest(out io.Writer, testCase test.TestCase, registryAccess bool) (*TestR
resource.GetNamespace(), resource.GetNamespace(),
// TODO: how to manage other operations ? // TODO: how to manage other operations ?
admissionv1.Create, admissionv1.Create,
user,
resource, resource,
nil, nil,
false, false,

View file

@ -14,6 +14,7 @@ import (
admissionutils "github.com/kyverno/kyverno/pkg/utils/admission" admissionutils "github.com/kyverno/kyverno/pkg/utils/admission"
admissionv1 "k8s.io/api/admission/v1" admissionv1 "k8s.io/api/admission/v1"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
authenticationv1 "k8s.io/api/authentication/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@ -53,7 +54,7 @@ func Request(
name string, name string,
namespace string, namespace string,
operation admissionv1.Operation, operation admissionv1.Operation,
// userInfo authenticationv1.UserInfo, userInfo authenticationv1.UserInfo,
object runtime.Object, object runtime.Object,
oldObject runtime.Object, oldObject runtime.Object,
dryRun bool, dryRun bool,
@ -69,11 +70,11 @@ func Request(
Name: name, Name: name,
Namespace: namespace, Namespace: namespace,
Operation: operation, Operation: operation,
// UserInfo: userInfo, UserInfo: userInfo,
Object: runtime.RawExtension{Object: object}, Object: runtime.RawExtension{Object: object},
OldObject: runtime.RawExtension{Object: oldObject}, OldObject: runtime.RawExtension{Object: oldObject},
DryRun: &dryRun, DryRun: &dryRun,
Options: runtime.RawExtension{Object: options}, Options: runtime.RawExtension{Object: options},
} }
return RequestFromAdmission(context, request) return RequestFromAdmission(context, request)
} }

View file

@ -21,6 +21,7 @@ import (
"go.uber.org/multierr" "go.uber.org/multierr"
admissionv1 "k8s.io/api/admission/v1" admissionv1 "k8s.io/api/admission/v1"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
authenticationv1 "k8s.io/api/authentication/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
@ -177,6 +178,7 @@ func (s *scanner) ScanResource(
resource.GetName(), resource.GetName(),
resource.GetNamespace(), resource.GetNamespace(),
admissionv1.Create, admissionv1.Create,
authenticationv1.UserInfo{},
&resource, &resource,
nil, nil,
false, false,