Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0c5ad4d
Add access monitoring rules cache and tctl interactions
EdwardDowling Apr 4, 2024
12c572f
Swap access monitoring rules collections to use upsert
EdwardDowling Apr 5, 2024
3c77709
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 5, 2024
ea08f6c
Update accessmonitoringrules cache test
EdwardDowling Apr 5, 2024
aae75d6
Readd missing err check
EdwardDowling Apr 5, 2024
11cd56b
Update lib/auth/grpcserver.go
EdwardDowling Apr 8, 2024
b996f8e
Update lib/auth/grpcserver.go
EdwardDowling Apr 8, 2024
1315fce
Update tool/tctl/common/resource_command.go
EdwardDowling Apr 8, 2024
4225808
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 8, 2024
cbfe35e
Add tctl isForced behaviour for access monitoring rules
EdwardDowling Apr 9, 2024
5ab37ce
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 9, 2024
a46abe8
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 9, 2024
c0b1cbc
Add missing methods to cache interface for access monitoring rules
EdwardDowling Apr 9, 2024
40959fe
Add info messages to tctl commands for accessmonitoring rule edits
EdwardDowling Apr 10, 2024
2eb7183
Add missing user message for forced rule creation
EdwardDowling Apr 11, 2024
f9fa132
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 11, 2024
697baf8
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 12, 2024
9091a51
Appease linter
EdwardDowling Apr 12, 2024
0d94930
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 16, 2024
c58be8c
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 16, 2024
e945bfa
Merge branch 'master' into edwarddowling/access-monitoring-rules-regi…
EdwardDowling Apr 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions api/client/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/gravitational/trace"

"github.com/gravitational/teleport/api/client/proto"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1"
"github.com/gravitational/teleport/api/types"
Expand Down Expand Up @@ -65,6 +66,10 @@ func EventToGRPC(in types.Event) (*proto.Event, error) {
out.Resource = &proto.Event_GlobalNotification{
GlobalNotification: r,
}
case *accessmonitoringrulesv1.AccessMonitoringRule:
out.Resource = &proto.Event_AccessMonitoringRule{
AccessMonitoringRule: r,
}
}
case *types.ResourceHeader:
out.Resource = &proto.Event_ResourceHeader{
Expand Down Expand Up @@ -479,6 +484,9 @@ func EventFromGRPC(in *proto.Event) (*types.Event, error) {
} else if r := in.GetGlobalNotification(); r != nil {
out.Resource = types.Resource153ToLegacy(r)
return &out, nil
} else if r := in.GetAccessMonitoringRule(); r != nil {
out.Resource = types.Resource153ToLegacy(r)
return &out, nil
} else {
return nil, trace.BadParameter("received unsupported resource %T", in.Resource)
}
Expand Down
6 changes: 6 additions & 0 deletions integrations/access/common/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/gravitational/trace"

"github.com/gravitational/teleport/api/client"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/types/accesslist"
"github.com/gravitational/teleport/integrations/access/common/teleport"
Expand Down Expand Up @@ -57,6 +58,11 @@ func (w *wrappedClient) ListAccessLists(ctx context.Context, pageSize int, pageT
return w.Client.AccessListClient().ListAccessLists(ctx, pageSize, pageToken)
}

// ListAccessMonitoringRules lists current access monitoring rules.
func (w *wrappedClient) ListAccessMonitoringRules(ctx context.Context, limit int, startKey string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error) {
return w.Client.AccessMonitoringRulesClient().ListAccessMonitoringRules(ctx, limit, startKey)
}

// wrapAPIClient will wrap the API client such that it conforms to the Teleport plugin client interface.
func wrapAPIClient(clt *client.Client) teleport.Client {
return &wrappedClient{
Expand Down
2 changes: 2 additions & 0 deletions integrations/access/common/teleport/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"context"

"github.com/gravitational/teleport/api/client/proto"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/types/accesslist"
"github.com/gravitational/teleport/integrations/lib/plugindata"
Expand All @@ -39,4 +40,5 @@ type Client interface {
SetAccessRequestState(ctx context.Context, params types.AccessRequestUpdate) error
ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error)
ListAccessLists(context.Context, int, string) ([]*accesslist.AccessList, string, error)
ListAccessMonitoringRules(ctx context.Context, limit int, startKey string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error)
}
1 change: 1 addition & 0 deletions lib/auth/accesspoint/accesspoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ func NewAccessCache(cfg AccessCacheConfig) (*cache.Cache, error) {
Notifications: cfg.Services,
Okta: cfg.Services.OktaClient(),
AccessLists: cfg.Services.AccessListClient(),
AccessMonitoringRules: cfg.Services.AccessMonitoringRuleClient(),
SecReports: cfg.Services.SecReportsClient(),
UserLoginStates: cfg.Services.UserLoginStateClient(),
Integrations: cfg.Services,
Expand Down
6 changes: 6 additions & 0 deletions lib/auth/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"google.golang.org/grpc"

"github.com/gravitational/teleport/api/client/proto"
accessmonitoringrules "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
integrationpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1"
kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1"
Expand Down Expand Up @@ -1154,6 +1155,11 @@ type Cache interface {

// NotificationsGetter defines list methods for notifications.
services.NotificationGetter

// ListAccessMonitoringRules returns a paginated list of access monitoring rules.
ListAccessMonitoringRules(ctx context.Context, limit int, startKey string) ([]*accessmonitoringrules.AccessMonitoringRule, string, error)
// GetAccessMonitoringRule returns the specified access monitoring rule.
GetAccessMonitoringRule(ctx context.Context, name string) (*accessmonitoringrules.AccessMonitoringRule, error)
}

type NodeWrapper struct {
Expand Down
12 changes: 12 additions & 0 deletions lib/auth/grpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import (
authpb "github.com/gravitational/teleport/api/client/proto"
"github.com/gravitational/teleport/api/constants"
"github.com/gravitational/teleport/api/gen/proto/go/assist/v1"
accessmonitoringrules "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
auditlogpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/auditlog/v1"
clusterconfigpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/clusterconfig/v1"
dbobjectpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/dbobject/v1"
Expand All @@ -71,6 +72,7 @@ import (
"github.com/gravitational/teleport/api/types/installers"
"github.com/gravitational/teleport/api/types/wrappers"
apiutils "github.com/gravitational/teleport/api/utils"
"github.com/gravitational/teleport/lib/accessmonitoringrules/accessmonitoringrulesv1"
Comment thread
EdwardDowling marked this conversation as resolved.
"github.com/gravitational/teleport/lib/auth/assist/assistv1"
"github.com/gravitational/teleport/lib/auth/clusterconfig/clusterconfigv1"
"github.com/gravitational/teleport/lib/auth/dbobject/dbobjectv1"
Expand Down Expand Up @@ -5445,6 +5447,16 @@ func NewGRPCServer(cfg GRPCServerConfig) (*GRPCServer, error) {
}
kubewaitingcontainerpb.RegisterKubeWaitingContainersServiceServer(server, kubeWaitingContsServer)

accessMonitoringRuleServer, err := accessmonitoringrulesv1.NewService(&accessmonitoringrulesv1.ServiceConfig{
Authorizer: cfg.Authorizer,
Backend: cfg.AuthServer.Services,
Cache: cfg.AuthServer.Cache,
})
if err != nil {
return nil, trace.Wrap(err)
}
accessmonitoringrules.RegisterAccessMonitoringRulesServiceServer(server, accessMonitoringRuleServer)

// Only register the service if this is an open source build. Enterprise builds
// register the actual service via an auth plugin, if we register here then all
// Enterprise builds would fail with a duplicate service registered error.
Expand Down
41 changes: 40 additions & 1 deletion lib/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
"github.com/gravitational/teleport"
"github.com/gravitational/teleport/api/client/proto"
apidefaults "github.com/gravitational/teleport/api/defaults"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1"
userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1"
Expand Down Expand Up @@ -172,6 +173,7 @@ func ForAuth(cfg Config) Config {
{Kind: types.KindKubeWaitingContainer},
{Kind: types.KindNotification},
{Kind: types.KindGlobalNotification},
{Kind: types.KindAccessMonitoringRule},
}
cfg.QueueSize = defaults.AuthQueueSize
// We don't want to enable partial health for auth cache because auth uses an event stream
Expand Down Expand Up @@ -549,6 +551,7 @@ type Cache struct {
lowVolumeEventsFanout *utils.RoundRobin[*services.FanoutV2]
kubeWaitingContsCache *local.KubeWaitingContainerService
notificationsCache services.Notifications
accessMontoringRuleCache services.AccessMonitoringRules

// closed indicates that the cache has been closed
closed atomic.Bool
Expand Down Expand Up @@ -715,6 +718,8 @@ type Config struct {
KubeWaitingContainers services.KubeWaitingContainer
// Notifications is the notifications service
Notifications services.Notifications
// AccessMonitoringRules is the access monitoring rules service.
AccessMonitoringRules services.AccessMonitoringRules
// Backend is a backend for local cache
Backend backend.Backend
// MaxRetryPeriod is the maximum period between cache retries on failures
Expand Down Expand Up @@ -920,6 +925,12 @@ func New(config Config) (*Cache, error) {
return nil, trace.Wrap(err)
}

accessMonitoringRuleCache, err := local.NewAccessMonitoringRulesService(config.Backend)
if err != nil {
cancel()
return nil, trace.Wrap(err)
}

fanout := services.NewFanoutV2(services.FanoutV2Config{})
lowVolumeFanouts := make([]*services.FanoutV2, 0, config.FanoutShards)
for i := 0; i < config.FanoutShards; i++ {
Expand Down Expand Up @@ -956,6 +967,7 @@ func New(config Config) (*Cache, error) {
webSessionCache: local.NewIdentityService(config.Backend).WebSessions(),
webTokenCache: local.NewIdentityService(config.Backend).WebTokens(),
windowsDesktopsCache: local.NewWindowsDesktopService(config.Backend),
accessMontoringRuleCache: accessMonitoringRuleCache,
samlIdPServiceProvidersCache: samlIdPServiceProvidersCache,
userGroupsCache: userGroupsCache,
oktaCache: oktaCache,
Expand Down Expand Up @@ -3108,11 +3120,38 @@ func (c *Cache) ListGlobalNotifications(ctx context.Context, pageSize int, start
return nil, "", trace.Wrap(err)
}
defer rg.Release()

out, nextKey, err := rg.reader.ListGlobalNotifications(ctx, pageSize, startKey)
return out, nextKey, trace.Wrap(err)
}

// ListAccessMonitoringRules returns a paginated list of access monitoring rules.
func (c *Cache) ListAccessMonitoringRules(ctx context.Context, pageSize int, nextToken string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error) {
ctx, span := c.Tracer.Start(ctx, "cache/ListAccessMonitoringRules")
defer span.End()

rg, err := readCollectionCache(c, c.collections.accessMonitoringRules)

if err != nil {
return nil, "", trace.Wrap(err)
}
defer rg.Release()
out, nextKey, err := rg.reader.ListAccessMonitoringRules(ctx, pageSize, nextToken)
return out, nextKey, trace.Wrap(err)
}

// GetAccessMonitoringRule returns the specified AccessMonitoringRule resources.
func (c *Cache) GetAccessMonitoringRule(ctx context.Context, name string) (*accessmonitoringrulesv1.AccessMonitoringRule, error) {
ctx, span := c.Tracer.Start(ctx, "cache/GetAccessMonitoringRule")
defer span.End()

rg, err := readCollectionCache(c, c.collections.accessMonitoringRules)
if err != nil {
return nil, trace.Wrap(err)
}
defer rg.Release()
return rg.reader.GetAccessMonitoringRule(ctx, name)
}

// ListResources is a part of auth.Cache implementation
func (c *Cache) ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) {
ctx, span := c.Tracer.Start(ctx, "cache/ListResources")
Expand Down
23 changes: 23 additions & 0 deletions lib/cache/cache_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import (
"github.com/gravitational/teleport/api/client"
"github.com/gravitational/teleport/api/client/proto"
apidefaults "github.com/gravitational/teleport/api/defaults"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1"
kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1"
Expand Down Expand Up @@ -117,6 +118,7 @@ type testPack struct {
accessLists services.AccessLists
kubeWaitingContainers services.KubeWaitingContainer
notifications services.Notifications
accessMonitoringRules services.AccessMonitoringRules
}

// testFuncs are functions to support testing an object in a cache.
Expand Down Expand Up @@ -304,6 +306,11 @@ func newPackWithoutCache(dir string, opts ...packOption) (*testPack, error) {
return nil, trace.Wrap(err)
}
p.accessLists = accessListsSvc
accessMonitoringRuleService, err := local.NewAccessMonitoringRulesService(p.backend)
if err != nil {
return nil, trace.Wrap(err)
}
p.accessMonitoringRules = accessMonitoringRuleService

kubeWaitingContSvc, err := local.NewKubeWaitingContainerService(p.backend)
if err != nil {
Expand Down Expand Up @@ -359,6 +366,7 @@ func newPack(dir string, setupConfig func(c Config) Config, opts ...packOption)
AccessLists: p.accessLists,
KubeWaitingContainers: p.kubeWaitingContainers,
Notifications: p.notifications,
AccessMonitoringRules: p.accessMonitoringRules,
MaxRetryPeriod: 200 * time.Millisecond,
EventsC: p.eventsC,
}))
Expand Down Expand Up @@ -759,6 +767,7 @@ func TestCompletenessInit(t *testing.T) {
AccessLists: p.accessLists,
KubeWaitingContainers: p.kubeWaitingContainers,
Notifications: p.notifications,
AccessMonitoringRules: p.accessMonitoringRules,
MaxRetryPeriod: 200 * time.Millisecond,
EventsC: p.eventsC,
}))
Expand Down Expand Up @@ -833,6 +842,7 @@ func TestCompletenessReset(t *testing.T) {
AccessLists: p.accessLists,
KubeWaitingContainers: p.kubeWaitingContainers,
Notifications: p.notifications,
AccessMonitoringRules: p.accessMonitoringRules,
MaxRetryPeriod: 200 * time.Millisecond,
EventsC: p.eventsC,
}))
Expand Down Expand Up @@ -1019,6 +1029,7 @@ func TestListResources_NodesTTLVariant(t *testing.T) {
AccessLists: p.accessLists,
KubeWaitingContainers: p.kubeWaitingContainers,
Notifications: p.notifications,
AccessMonitoringRules: p.accessMonitoringRules,
MaxRetryPeriod: 200 * time.Millisecond,
EventsC: p.eventsC,
neverOK: true, // ensure reads are never healthy
Expand Down Expand Up @@ -1104,6 +1115,7 @@ func initStrategy(t *testing.T) {
AccessLists: p.accessLists,
KubeWaitingContainers: p.kubeWaitingContainers,
Notifications: p.notifications,
AccessMonitoringRules: p.accessMonitoringRules,
MaxRetryPeriod: 200 * time.Millisecond,
EventsC: p.eventsC,
}))
Expand Down Expand Up @@ -3099,6 +3111,7 @@ func TestCacheWatchKindExistsInEvents(t *testing.T) {
types.KindKubeWaitingContainer: newKubeWaitingContainer(t),
types.KindNotification: types.Resource153ToLegacy(newUserNotification(t, "test")),
types.KindGlobalNotification: types.Resource153ToLegacy(newGlobalNotification(t, "test")),
types.KindAccessMonitoringRule: types.Resource153ToLegacy(newAccessMonitoringRule(t)),
}

for name, cfg := range cases {
Expand Down Expand Up @@ -3587,6 +3600,16 @@ func newGlobalNotification(t *testing.T, description string) *notificationsv1.Gl
return notification
}

func newAccessMonitoringRule(t *testing.T) *accessmonitoringrulesv1.AccessMonitoringRule {
t.Helper()
notification := &accessmonitoringrulesv1.AccessMonitoringRule{
Spec: &accessmonitoringrulesv1.AccessMonitoringRuleSpec{
Notification: &accessmonitoringrulesv1.Notification{},
},
}
return notification
}

func withKeepalive[T any](fn func(context.Context, T) (*types.KeepAlive, error)) func(context.Context, T) error {
return func(ctx context.Context, resource T) error {
_, err := fn(ctx, resource)
Expand Down
57 changes: 56 additions & 1 deletion lib/cache/collections.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/gravitational/teleport/api/client"
"github.com/gravitational/teleport/api/client/proto"
apidefaults "github.com/gravitational/teleport/api/defaults"
accessmonitoringrulesv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessmonitoringrules/v1"
kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1"
userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1"
Expand Down Expand Up @@ -237,6 +238,7 @@ type cacheCollections struct {
windowsDesktopServices collectionReader[windowsDesktopServiceGetter]
userNotifications collectionReader[notificationGetter]
globalNotifications collectionReader[notificationGetter]
accessMonitoringRules collectionReader[accessMonitoringRuleGetter]
}

// setupCollections returns a registry of collections.
Expand Down Expand Up @@ -696,6 +698,12 @@ func setupCollections(c *Cache, watches []types.WatchKind) (*cacheCollections, e
watch: watch,
}
collections.byKind[resourceKind] = collections.globalNotifications
case types.KindAccessMonitoringRule:
if c.AccessMonitoringRules == nil {
return nil, trace.BadParameter("missing parameter AccessMonitoringRule")
}
collections.accessMonitoringRules = &genericCollection[*accessmonitoringrulesv1.AccessMonitoringRule, accessMonitoringRuleGetter, accessMonitoringRulesExecutor]{cache: c, watch: watch}
collections.byKind[resourceKind] = collections.accessMonitoringRules
default:
return nil, trace.BadParameter("resource %q is not supported", watch.Kind)
}
Expand Down Expand Up @@ -2905,7 +2913,6 @@ func (userNotificationExecutor) getAll(ctx context.Context, cache *Cache, loadSe
if err != nil {
return nil, trace.Wrap(err)
}

notifications = append(notifications, notifs...)

if nextKey == "" {
Expand Down Expand Up @@ -3021,3 +3028,51 @@ func (globalNotificationExecutor) getReader(cache *Cache, cacheOK bool) notifica
}

var _ executor[*notificationsv1.GlobalNotification, notificationGetter] = globalNotificationExecutor{}

type accessMonitoringRulesExecutor struct{}

func (accessMonitoringRulesExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*accessmonitoringrulesv1.AccessMonitoringRule, error) {
var resources []*accessmonitoringrulesv1.AccessMonitoringRule
var nextToken string
for {
var page []*accessmonitoringrulesv1.AccessMonitoringRule
var err error
page, nextToken, err = cache.AccessMonitoringRules.ListAccessMonitoringRules(ctx, 0 /* page size */, nextToken)
if err != nil {
return nil, trace.Wrap(err)
}
resources = append(resources, page...)

if nextToken == "" {
break
}
}
return resources, nil
}

func (accessMonitoringRulesExecutor) upsert(ctx context.Context, cache *Cache, resource *accessmonitoringrulesv1.AccessMonitoringRule) error {
_, err := cache.accessMontoringRuleCache.UpsertAccessMonitoringRule(ctx, resource)
return trace.Wrap(err)
}

func (accessMonitoringRulesExecutor) deleteAll(ctx context.Context, cache *Cache) error {
return cache.accessMontoringRuleCache.DeleteAllAccessMonitoringRules(ctx)
}

func (accessMonitoringRulesExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error {
return cache.accessMontoringRuleCache.DeleteAccessMonitoringRule(ctx, resource.GetName())
}

func (accessMonitoringRulesExecutor) isSingleton() bool { return false }

func (accessMonitoringRulesExecutor) getReader(cache *Cache, cacheOK bool) accessMonitoringRuleGetter {
if cacheOK {
return cache.accessMontoringRuleCache
}
return cache.Config.AccessMonitoringRules
}

type accessMonitoringRuleGetter interface {
GetAccessMonitoringRule(ctx context.Context, name string) (*accessmonitoringrulesv1.AccessMonitoringRule, error)
ListAccessMonitoringRules(ctx context.Context, limit int, startKey string) ([]*accessmonitoringrulesv1.AccessMonitoringRule, string, error)
}
Loading