Skip to content

Commit d7299df

Browse files
committed
fixing cache for recording encryption
1 parent 09034f1 commit d7299df

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed

lib/auth/init.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ type RecordingEncryptionManager interface {
9191
services.RecordingEncryption
9292
recordingencryption.Resolver
9393
recordingencryption.DecryptionKeyFinder
94+
SetCache(recordingencryption.Cache)
9495
}
9596

9697
// InitConfig is auth server init config

lib/auth/recordingencryption/manager.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,40 +44,53 @@ type EncryptionKeyStore interface {
4444
GetDecrypter(ctx context.Context, keyPair *types.EncryptionKeyPair) (crypto.Decrypter, error)
4545
}
4646

47+
type Cache interface {
48+
GetRecordingEncryption(context.Context) (*recordingencryptionv1.RecordingEncryption, error)
49+
}
50+
4751
// ManagerConfig captures all of the dependencies required to instantiate a Manager.
4852
type ManagerConfig struct {
53+
Cache Cache
4954
Backend services.RecordingEncryption
5055
KeyStore EncryptionKeyStore
5156
Logger *slog.Logger
5257
}
5358

5459
// NewManager returns a new Manager using the given ManagerConfig.
5560
func NewManager(cfg ManagerConfig) (*Manager, error) {
56-
if cfg.Logger == nil {
57-
cfg.Logger = slog.Default()
58-
}
59-
60-
if cfg.Backend == nil {
61+
switch {
62+
case cfg.Backend == nil:
6163
return nil, trace.BadParameter("backend is required")
64+
case cfg.KeyStore == nil:
65+
return nil, trace.BadParameter("key store is required")
66+
case cfg.Cache == nil:
67+
return nil, trace.BadParameter("cache is required")
6268
}
6369

64-
if cfg.KeyStore == nil {
65-
return nil, trace.BadParameter("key store is required")
70+
if cfg.Logger == nil {
71+
cfg.Logger = slog.Default()
6672
}
6773

6874
return &Manager{
6975
RecordingEncryption: cfg.Backend,
76+
cache: cfg.Cache,
7077
keyStore: cfg.KeyStore,
7178
logger: cfg.Logger,
7279
}, nil
7380
}
7481

82+
// SetCache allows for overwriting the configured cache used by Manager.
83+
func (m *Manager) SetCache(cache Cache) {
84+
m.cache = cache
85+
}
86+
7587
// A Manager wraps a services.RecordingEncryption and EncryptionKeyStore in order to provide more complex operations
7688
// than the CRUD methods exposed by services.RecordingEncryption. It primarily handles resolving RecordingEncryption
7789
// state and searching for accessible decryption keys.
7890
type Manager struct {
7991
services.RecordingEncryption
8092

93+
cache Cache
8194
logger *slog.Logger
8295
keyStore EncryptionKeyStore
8396
uploader events.MultipartUploader
@@ -281,7 +294,7 @@ func (m *Manager) searchActiveKeys(ctx context.Context, activeKeys []*recordinge
281294
// FindDecryptionKey returns the first accessible decryption key that matches one of the given public keys.
282295
func (m *Manager) FindDecryptionKey(publicKeys ...[]byte) (*types.EncryptionKeyPair, error) {
283296
ctx := context.Background()
284-
encryption, err := m.GetRecordingEncryption(ctx)
297+
encryption, err := m.cache.GetRecordingEncryption(ctx)
285298
if err != nil {
286299
return nil, trace.Wrap(err)
287300
}

lib/cache/cache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ func ForAuth(cfg Config) Config {
205205
{Kind: types.KindGitServer},
206206
{Kind: types.KindWorkloadIdentity},
207207
{Kind: types.KindHealthCheckConfig},
208-
// {Kind: types.KindRecordingEncryption},
208+
{Kind: types.KindRecordingEncryption},
209209
}
210210
cfg.QueueSize = defaults.AuthQueueSize
211211
// We don't want to enable partial health for auth cache because auth uses an event stream

lib/cache/collections.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -723,14 +723,14 @@ func setupCollections(c Config) (*collections, error) {
723723

724724
out.secReportsStates = collect
725725
out.byKind[resourceKind] = out.secReportsStates
726-
// case types.KindRecordingEncryption:
727-
// collect, err := newRecordingEncryptionCollection(c.RecordingEncryption, watch)
728-
// if err != nil {
729-
// return nil, trace.Wrap(err)
730-
// }
731-
732-
// out.recordingEncryption = collect
733-
// out.byKind[resourceKind] = out.recordingEncryption
726+
case types.KindRecordingEncryption:
727+
collect, err := newRecordingEncryptionCollection(c.RecordingEncryption, watch)
728+
if err != nil {
729+
return nil, trace.Wrap(err)
730+
}
731+
732+
out.recordingEncryption = collect
733+
out.byKind[resourceKind] = out.recordingEncryption
734734
default:
735735
if _, ok := out.byKind[resourceKind]; !ok {
736736
return nil, trace.BadParameter("resource %q is not supported", watch.Kind)

lib/service/service.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2109,6 +2109,7 @@ func (process *TeleportProcess) initAuthService() error {
21092109

21102110
recordingEncryptionManager, err := recordingencryption.NewManager(recordingencryption.ManagerConfig{
21112111
Backend: localRecordingEncryption,
2112+
Cache: localRecordingEncryption,
21122113
KeyStore: keyStore,
21132114
Logger: logger,
21142115
})
@@ -2298,6 +2299,7 @@ func (process *TeleportProcess) initAuthService() error {
22982299
return trace.Wrap(err)
22992300
}
23002301
as.Cache = cache
2302+
as.RecordingEncryptionManager.SetCache(cache)
23012303

23022304
return nil
23032305
})
@@ -2658,7 +2660,7 @@ func (process *TeleportProcess) initAuthService() error {
26582660
})
26592661

26602662
recordingEncryptionWatchCfg := recordingencryption.WatchConfig{
2661-
Events: authServer.Events,
2663+
Events: authServer,
26622664
Resolver: authServer,
26632665
ClusterConfig: authServer,
26642666
LockConfig: &backend.RunWhileLockedConfig{
@@ -2784,6 +2786,7 @@ func (process *TeleportProcess) newAccessCacheForServices(cfg accesspoint.Config
27842786
cfg.PluginStaticCredentials = services.PluginStaticCredentials
27852787
cfg.GitServers = services.GitServers
27862788
cfg.HealthCheckConfig = services.HealthCheckConfig
2789+
cfg.RecordingEncryption = services.RecordingEncryptionManager
27872790

27882791
return accesspoint.NewCache(cfg)
27892792
}

0 commit comments

Comments
 (0)