From f94b6dd0e50ea99508934c7c4db8c18b8f971856 Mon Sep 17 00:00:00 2001 From: Simon Murray Date: Thu, 27 Jun 2024 09:39:49 +0100 Subject: [PATCH] Add User Auditing for Resources (#88) --- charts/identity/Chart.yaml | 4 +- go.mod | 2 +- go.sum | 2 + pkg/handler/groups/client.go | 11 +- pkg/handler/oauth2providers/client.go | 10 +- pkg/handler/organizations/client.go | 8 +- pkg/handler/projects/client.go | 19 +- pkg/openapi/schema.go | 388 +++++++++++++------------- 8 files changed, 229 insertions(+), 215 deletions(-) diff --git a/charts/identity/Chart.yaml b/charts/identity/Chart.yaml index 426360e5..3d8f43e7 100644 --- a/charts/identity/Chart.yaml +++ b/charts/identity/Chart.yaml @@ -4,8 +4,8 @@ description: A Helm chart for deploying Unikorn's IdP type: application -version: v0.2.16 -appVersion: v0.2.16 +version: v0.2.17 +appVersion: v0.2.17 icon: https://raw.githubusercontent.com/unikorn-cloud/assets/main/images/logos/dark-on-light/icon.png diff --git a/go.mod b/go.mod index b4b6c0ea..f5ed3631 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/oapi-codegen/runtime v1.1.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 - github.com/unikorn-cloud/core v0.1.49 + github.com/unikorn-cloud/core v0.1.54 go.opentelemetry.io/otel v1.24.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 go.opentelemetry.io/otel/sdk v1.24.0 diff --git a/go.sum b/go.sum index 76445e39..784ddab5 100644 --- a/go.sum +++ b/go.sum @@ -131,6 +131,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/unikorn-cloud/core v0.1.49 h1:ahAxrzvBnBICi+qN/AmTqKRJHpxl958gKVfBO3lz4G8= github.com/unikorn-cloud/core v0.1.49/go.mod h1:cP39UQN7aSmsfjQuSMsworI4oBIwx4oA4u20CbPpfZw= +github.com/unikorn-cloud/core v0.1.54 h1:e9LYpESifNsQUibem6zqyZP0SIn0zSFaSUwghYx3PeY= +github.com/unikorn-cloud/core v0.1.54/go.mod h1:cP39UQN7aSmsfjQuSMsworI4oBIwx4oA4u20CbPpfZw= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= diff --git a/pkg/handler/groups/client.go b/pkg/handler/groups/client.go index 8a636d9d..ed242abf 100644 --- a/pkg/handler/groups/client.go +++ b/pkg/handler/groups/client.go @@ -21,6 +21,7 @@ import ( "slices" "strings" + "github.com/unikorn-cloud/core/pkg/authorization/userinfo" coreopenapi "github.com/unikorn-cloud/core/pkg/openapi" "github.com/unikorn-cloud/core/pkg/server/conversion" "github.com/unikorn-cloud/core/pkg/server/errors" @@ -122,9 +123,11 @@ func (c *Client) Get(ctx context.Context, organizationID, groupID string) (*open return convert(result), nil } -func generate(organization *organizations.Meta, in *openapi.GroupWrite) *unikornv1.Group { +func generate(ctx context.Context, organization *organizations.Meta, in *openapi.GroupWrite) *unikornv1.Group { + userinfo := userinfo.FromContext(ctx) + out := &unikornv1.Group{ - ObjectMeta: conversion.OrganizationScopedObjectMetadata(&in.Metadata, organization.Namespace, organization.ID), + ObjectMeta: conversion.NewObjectMetadata(&in.Metadata, organization.Namespace).WithOrganization(organization.ID).WithUser(userinfo.Subject).Get(), Spec: unikornv1.GroupSpec{ Roles: in.Spec.Roles, }, @@ -147,7 +150,7 @@ func (c *Client) Create(ctx context.Context, organizationID string, request *ope return err } - resource := generate(organization, request) + resource := generate(ctx, organization, request) if err := c.client.Create(ctx, resource); err != nil { if kerrors.IsAlreadyExists(err) { @@ -171,7 +174,7 @@ func (c *Client) Update(ctx context.Context, organizationID, groupID string, req return err } - required := generate(organization, request) + required := generate(ctx, organization, request) updated := current.DeepCopy() updated.Labels = required.Labels diff --git a/pkg/handler/oauth2providers/client.go b/pkg/handler/oauth2providers/client.go index 52b1ffac..57505048 100644 --- a/pkg/handler/oauth2providers/client.go +++ b/pkg/handler/oauth2providers/client.go @@ -128,9 +128,11 @@ func (c *Client) List(ctx context.Context, organizationID string) (openapi.Oauth return convertList(nil, result), nil } -func (c *Client) generate(organization *organizations.Meta, in *openapi.Oauth2ProviderWrite) *unikornv1.OAuth2Provider { +func (c *Client) generate(ctx context.Context, organization *organizations.Meta, in *openapi.Oauth2ProviderWrite) *unikornv1.OAuth2Provider { + userinfo := userinfo.FromContext(ctx) + out := &unikornv1.OAuth2Provider{ - ObjectMeta: conversion.OrganizationScopedObjectMetadata(&in.Metadata, organization.Namespace, organization.ID), + ObjectMeta: conversion.NewObjectMetadata(&in.Metadata, organization.Namespace).WithOrganization(organization.ID).WithUser(userinfo.Subject).Get(), Spec: unikornv1.OAuth2ProviderSpec{ Issuer: in.Spec.Issuer, ClientID: in.Spec.ClientID, @@ -147,7 +149,7 @@ func (c *Client) Create(ctx context.Context, organizationID string, request *ope return err } - resource := c.generate(organization, request) + resource := c.generate(ctx, organization, request) if err := c.client.Create(ctx, resource); err != nil { if kerrors.IsAlreadyExists(err) { @@ -171,7 +173,7 @@ func (c *Client) Update(ctx context.Context, organizationID, providerID string, return err } - required := c.generate(organization, request) + required := c.generate(ctx, organization, request) updated := current.DeepCopy() updated.Labels = required.Labels diff --git a/pkg/handler/organizations/client.go b/pkg/handler/organizations/client.go index 8219ba7b..3d69e0e7 100644 --- a/pkg/handler/organizations/client.go +++ b/pkg/handler/organizations/client.go @@ -184,9 +184,11 @@ func (c *Client) Get(ctx context.Context, organizationID string) (*openapi.Organ return convert(result), nil } -func (c *Client) generate(in *openapi.OrganizationWrite) *unikornv1.Organization { +func (c *Client) generate(ctx context.Context, in *openapi.OrganizationWrite) *unikornv1.Organization { + userinfo := userinfo.FromContext(ctx) + out := &unikornv1.Organization{ - ObjectMeta: conversion.ObjectMetadata(&in.Metadata, c.namespace), + ObjectMeta: conversion.NewObjectMetadata(&in.Metadata, c.namespace).WithUser(userinfo.Subject).Get(), } if in.Spec.OrganizationType == openapi.Domain { @@ -214,7 +216,7 @@ func (c *Client) Update(ctx context.Context, organizationID string, request *ope return err } - required := c.generate(request) + required := c.generate(ctx, request) updated := current.DeepCopy() updated.Labels = required.Labels diff --git a/pkg/handler/projects/client.go b/pkg/handler/projects/client.go index e8b88776..e8c39165 100644 --- a/pkg/handler/projects/client.go +++ b/pkg/handler/projects/client.go @@ -23,6 +23,7 @@ import ( "strings" unikornv1core "github.com/unikorn-cloud/core/pkg/apis/unikorn/v1alpha1" + "github.com/unikorn-cloud/core/pkg/authorization/userinfo" coreopenapi "github.com/unikorn-cloud/core/pkg/openapi" "github.com/unikorn-cloud/core/pkg/server/conversion" "github.com/unikorn-cloud/core/pkg/server/errors" @@ -122,16 +123,18 @@ func (c *Client) Get(ctx context.Context, organizationID, projectID string) (*op return convert(result), nil } -func generate(organization *organizations.Meta, request *openapi.ProjectWrite) *unikornv1.Project { - resource := &unikornv1.Project{ - ObjectMeta: conversion.OrganizationScopedObjectMetadata(&request.Metadata, organization.Namespace, organization.ID), +func generate(ctx context.Context, organization *organizations.Meta, in *openapi.ProjectWrite) *unikornv1.Project { + userinfo := userinfo.FromContext(ctx) + + out := &unikornv1.Project{ + ObjectMeta: conversion.NewObjectMetadata(&in.Metadata, organization.Namespace).WithOrganization(organization.ID).WithUser(userinfo.Subject).Get(), } - if request.Spec.GroupIDs != nil { - resource.Spec.GroupIDs = *request.Spec.GroupIDs + if in.Spec.GroupIDs != nil { + out.Spec.GroupIDs = *in.Spec.GroupIDs } - return resource + return out } // Create creates the implicit project indentified by the JTW claims. @@ -141,7 +144,7 @@ func (c *Client) Create(ctx context.Context, organizationID string, request *ope return err } - resource := generate(organization, request) + resource := generate(ctx, organization, request) if err := c.client.Create(ctx, resource); err != nil { // TODO: we can do a cached lookup to save the API traffic. @@ -166,7 +169,7 @@ func (c *Client) Update(ctx context.Context, organizationID, projectID string, r return err } - required := generate(organization, request) + required := generate(ctx, organization, request) updated := current.DeepCopy() updated.Labels = required.Labels diff --git a/pkg/openapi/schema.go b/pkg/openapi/schema.go index 9e167a01..7e4a1eee 100644 --- a/pkg/openapi/schema.go +++ b/pkg/openapi/schema.go @@ -19,199 +19,201 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "acf6x4//FwAA//+8enzIDcoAAA==", + "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", + "AP//eFq7vKLLAAA=", } // GetSwagger returns the content of the embedded swagger specification file