feat(KMS): add BSR external wrapper

This commit is contained in:
Jim authored and Timothy Messier committed 2023-05-31 12:18:09 +00:00
1 parent 79eea06dd7
commit 98d3e59372
6 files changed
+49 -5

No files matched your search

+5
View File
@@ -48,6 +48,9 @@ const (
// KeyPurposeRootKey is used as the root key
KeyPurposeRootKey
// KeyPurpose is used for wrapping BSR keys
KeyPurposeBsr
)
// String returns the key purpose cast as a string, just so it can be called as
@@ -74,6 +77,8 @@ func (k KeyPurpose) String() string {
return "audit"
case KeyPurposeRootKey:
return "rootKey"
case KeyPurposeBsr:
return "bsr"
default:
return "unknown"
}
+6
View File
@@ -13,6 +13,7 @@ type ExternalWrappers struct {
root wrapping.Wrapper
workerAuth wrapping.Wrapper
recovery wrapping.Wrapper
bsr wrapping.Wrapper
}
// Root returns the wrapper for root keys
@@ -29,3 +30,8 @@ func (e *ExternalWrappers) WorkerAuth() wrapping.Wrapper {
func (e *ExternalWrappers) Recovery() wrapping.Wrapper {
return e.recovery
}
// Bsr returns the wrapper for BSR operations
func (e *ExternalWrappers) Bsr() wrapping.Wrapper {
return e.bsr
}
+10 -1
View File
@@ -24,14 +24,21 @@ func TestExternalWrappers(t *testing.T) {
recoveryWrapper := db.TestWrapper(t)
workerAuthWrapper := db.TestWrapper(t)
workerAuthStorageWrapper := db.TestWrapper(t)
bsrWrapper := db.TestWrapper(t)
k := TestKms(t, conn, rootWrapper)
err := k.AddExternalWrappers(testCtx, WithRecoveryWrapper(recoveryWrapper), WithWorkerAuthWrapper(workerAuthWrapper), WithWorkerAuthStorageWrapper(workerAuthStorageWrapper))
err := k.AddExternalWrappers(testCtx,
WithRecoveryWrapper(recoveryWrapper),
WithWorkerAuthWrapper(workerAuthWrapper),
WithWorkerAuthStorageWrapper(workerAuthStorageWrapper),
WithBsrWrapper(bsrWrapper),
)
require.NoError(err)
assert.Equal(rootWrapper, k.GetExternalWrappers(testCtx).Root())
assert.Equal(recoveryWrapper, k.GetExternalWrappers(testCtx).Recovery())
assert.Equal(workerAuthWrapper, k.GetExternalWrappers(testCtx).WorkerAuth())
assert.Equal(bsrWrapper, k.GetExternalWrappers(testCtx).Bsr())
err = k.AddExternalWrappers(testCtx, WithRootWrapper(&invalidWrapper{}))
assert.Error(err)
@@ -39,6 +46,8 @@ func TestExternalWrappers(t *testing.T) {
assert.Error(err)
err = k.AddExternalWrappers(testCtx, WithWorkerAuthWrapper(&invalidWrapper{}))
assert.Error(err)
err = k.AddExternalWrappers(testCtx, WithBsrWrapper(&invalidWrapper{}))
assert.Error(err)
}
type invalidWrapper struct {
+14 -2
View File
@@ -104,6 +104,11 @@ func (k *Kms) AddExternalWrappers(ctx context.Context, opt ...Option) error {
return errors.Wrap(ctx, err, op, errors.WithMsg("unable to add recovery wrapper"))
}
}
if opts.withBsrWrapper != nil {
if err := k.underlying.AddExternalWrapper(ctx, wrappingKms.KeyPurpose(KeyPurposeBsr.String()), opts.withBsrWrapper); err != nil {
return errors.Wrap(ctx, err, op, errors.WithMsg("unable to add bsr wrapper"))
}
}
return nil
}
@@ -140,6 +145,9 @@ func (k *Kms) GetExternalWrappers(ctx context.Context) *ExternalWrappers {
if recovery, err := k.underlying.GetExternalWrapper(ctx, wrappingKms.KeyPurpose(KeyPurposeRecovery.String())); err == nil {
ret.recovery = recovery
}
if bsr, err := k.underlying.GetExternalWrapper(ctx, wrappingKms.KeyPurpose(KeyPurposeBsr.String())); err == nil {
ret.bsr = bsr
}
return ret
}
@@ -594,8 +602,12 @@ func stdNewKmsPurposes() []wrappingKms.KeyPurpose {
for _, p := range ValidDekPurposes() {
purposes = append(purposes, wrappingKms.KeyPurpose(p.String()))
}
purposes = append(purposes, wrappingKms.KeyPurpose(KeyPurposeWorkerAuth.String()), wrappingKms.KeyPurpose(KeyPurposeWorkerAuthStorage.String()),
wrappingKms.KeyPurpose(KeyPurposeRecovery.String()))
purposes = append(purposes,
wrappingKms.KeyPurpose(KeyPurposeWorkerAuth.String()),
wrappingKms.KeyPurpose(KeyPurposeWorkerAuthStorage.String()),
wrappingKms.KeyPurpose(KeyPurposeRecovery.String()),
wrappingKms.KeyPurpose(KeyPurposeBsr.String()),
)
return purposes
}
+6 -2
View File
@@ -56,8 +56,12 @@ func Test_New(t *testing.T) {
for _, p := range ValidDekPurposes() {
purposes = append(purposes, wrappingKms.KeyPurpose(p.String()))
}
purposes = append(purposes, wrappingKms.KeyPurpose(KeyPurposeWorkerAuth.String()),
wrappingKms.KeyPurpose(KeyPurposeWorkerAuthStorage.String()), wrappingKms.KeyPurpose(KeyPurposeRecovery.String()))
purposes = append(purposes,
wrappingKms.KeyPurpose(KeyPurposeWorkerAuth.String()),
wrappingKms.KeyPurpose(KeyPurposeWorkerAuthStorage.String()),
wrappingKms.KeyPurpose(KeyPurposeRecovery.String()),
wrappingKms.KeyPurpose(KeyPurposeBsr.String()),
)
wrapped, err := wrappingKms.New(db.NewChangeSafeDbwReader(rw), db.NewChangeSafeDbwWriter(rw), purposes)
require.NoError(t, err)
+8
View File
@@ -29,6 +29,7 @@ type options struct {
withWorkerAuthWrapper wrapping.Wrapper
withWorkerAuthStorageWrapper wrapping.Wrapper
withRecoveryWrapper wrapping.Wrapper
withBsrWrapper wrapping.Wrapper
withOrderByVersion db.OrderBy
withKeyId string
withScopeIds []string
@@ -81,6 +82,13 @@ func WithRecoveryWrapper(w wrapping.Wrapper) Option {
}
}
// WithBsrWrapper sets the external Bsr wrapper for a KMS
func WithBsrWrapper(w wrapping.Wrapper) Option {
return func(o *options) {
o.withBsrWrapper = w
}
}
// WithOrderByVersion provides an option to specify ordering by the
// CreateTime field.
func WithOrderByVersion(orderBy db.OrderBy) Option {