feat(KMS): add BSR external wrapper
This commit is contained in:
1 parent
79eea06dd7
commit
98d3e59372
6 files changed
+49
-5
No files matched your search
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user