Skip to content
This repository has been archived by the owner on Jul 12, 2023. It is now read-only.

Switch InMemory KMS to filesystem based #957

Merged
merged 2 commits into from
Sep 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 6 additions & 13 deletions internal/integration/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,18 +95,11 @@ func NewTestServer(tb testing.TB, exportPeriod time.Duration) (*serverenv.Server
}
}

km, err := keys.NewInMemory(ctx)
if err != nil {
tb.Fatal(err)
}
if _, err := km.CreateEncryptionKey("tokenkey"); err != nil {
tb.Fatal(err)
}
if _, err := km.CreateSigningKey(ctx, "signing", "signingkey"); err != nil {
tb.Fatal(err)
}
kms := keys.TestKeyManager(tb)
tokenKey := keys.TestEncryptionKey(tb, kms)

// create an initial revision key.
revisionDB, err := revdb.New(db, &revdb.KMSConfig{WrapperKeyID: "tokenkey", KeyManager: km})
revisionDB, err := revdb.New(db, &revdb.KMSConfig{WrapperKeyID: tokenKey, KeyManager: kms})
if err != nil {
tb.Fatal(err)
}
Expand Down Expand Up @@ -144,7 +137,7 @@ func NewTestServer(tb testing.TB, exportPeriod time.Duration) (*serverenv.Server
serverenv.WithAuthorizedAppProvider(aap),
serverenv.WithBlobStorage(bs),
serverenv.WithDatabase(db),
serverenv.WithKeyManager(km),
serverenv.WithKeyManager(kms),
serverenv.WithSecretManager(sm),
)
// Note: don't call env.Cleanup() because the database helper closes the
Expand Down Expand Up @@ -208,7 +201,7 @@ func NewTestServer(tb testing.TB, exportPeriod time.Duration) (*serverenv.Server
// TODO: this is a grpc listener and requires a lot of setup.

revConfig := revision.Config{
KeyID: "tokenkey",
KeyID: tokenKey,
AAD: []byte{1, 2, 3},
MinLength: 28,
}
Expand Down
8 changes: 3 additions & 5 deletions internal/keyrotation/rotate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,9 @@ func TestRotateKeys(t *testing.T) {
t.Parallel()
ctx := context.Background()

kms, _ := keys.NewInMemory(context.Background())
keyID := "testKeyID"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatal(err)
}
kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

config := &Config{
RevisionToken: revision.Config{KeyID: keyID},
DeleteOldKeyPeriod: 14 * 24 * time.Hour, // two weeks
Expand Down
8 changes: 3 additions & 5 deletions internal/keyrotation/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func TestNewRotationHandler(t *testing.T) {
ctx := context.Background()
testDB := database.NewTestDatabase(t)

kms, _ := keys.NewInMemory(context.Background())
kms := keys.TestKeyManager(t)

testCases := []struct {
name string
Expand Down Expand Up @@ -61,10 +61,8 @@ func TestNewRotationHandler(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()

keyID := "test" + t.Name()
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatal(err)
}
keyID := keys.TestEncryptionKey(t, kms)

config := &Config{
RevisionToken: revision.Config{KeyID: keyID},
}
Expand Down
28 changes: 10 additions & 18 deletions internal/publish/publish_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -387,17 +387,13 @@ func TestPublishWithBypass(t *testing.T) {
}

ctx := context.Background()

// Database init for all modules that will be used.
testDB := coredb.NewTestDatabase(t)
// Make key manager
kms, err := keys.NewInMemory(ctx)
if err != nil {
t.Fatalf("can't make kms: %v", err)
}
keyID := "rev"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatal(err)
}

kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

tokenAAD := make([]byte, 16)
if _, err := rand.Read(tokenAAD); err != nil {
t.Fatalf("not enough entropy: %v", err)
Expand Down Expand Up @@ -707,17 +703,13 @@ func TestKeyRevision(t *testing.T) {
}

ctx := context.Background()

// Database init for all modules that will be used.
testDB := coredb.NewTestDatabase(t)
// Make key manager
kms, err := keys.NewInMemory(ctx)
if err != nil {
t.Fatalf("can't make kms: %v", err)
}
keyID := "rev"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatal(err)
}

kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

tokenAAD := make([]byte, 16)
if _, err := rand.Read(tokenAAD); err != nil {
t.Fatalf("not enough entropy: %v", err)
Expand Down
20 changes: 4 additions & 16 deletions internal/revision/database/revision_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,8 @@ func TestRevisionKey(t *testing.T) {
testDB := database.NewTestDatabase(t)
ctx := context.Background()

kms, err := keys.NewInMemory(ctx)
if err != nil {
t.Fatalf("unable to cerate in memory KMS")
}
keyID := "funkey"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatalf("unable to generate key: %v", err)
}
kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

cfg := KMSConfig{keyID, kms}
revDB, err := New(testDB, &cfg)
Expand Down Expand Up @@ -71,14 +65,8 @@ func TestMultipleRevisionKeys(t *testing.T) {
testDB := database.NewTestDatabase(t)
ctx := context.Background()

kms, err := keys.NewInMemory(ctx)
if err != nil {
t.Fatalf("unable to cerate in memory KMS")
}
keyID := "funkey"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatalf("unable to generate key: %v", err)
}
kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

cfg := KMSConfig{keyID, kms}
revDB, err := New(testDB, &cfg)
Expand Down
16 changes: 2 additions & 14 deletions internal/revision/revision_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ package revision

import (
"context"
"crypto/rand"
"fmt"
"io"
"testing"
"time"

Expand Down Expand Up @@ -151,18 +149,8 @@ func TestEncryptDecrypt(t *testing.T) {
testDB := database.NewTestDatabase(t)
ctx := context.Background()

kms, err := keys.NewInMemory(ctx)
if err != nil {
t.Fatalf("unable to cerate in memory KMS")
}
keyID := "skeleton"
if _, err := kms.CreateEncryptionKey(keyID); err != nil {
t.Fatalf("unable to generate key: %v", err)
}
key := make([]byte, 32)
if _, err := io.ReadFull(rand.Reader, key); err != nil {
t.Fatalf("unable to generate AES key: %v", err)
}
kms := keys.TestKeyManager(t)
keyID := keys.TestEncryptionKey(t, kms)

cfg := revisiondb.KMSConfig{
WrapperKeyID: keyID,
Expand Down
6 changes: 3 additions & 3 deletions internal/setup/setup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (t *testConfig) DatabaseConfig() *database.Config {

func (t *testConfig) KeyManagerConfig() *keys.Config {
return &keys.Config{
KeyManagerType: keys.KeyManagerType("IN_MEMORY"),
KeyManagerType: keys.KeyManagerType("FILESYSTEM"),
}
}

Expand Down Expand Up @@ -186,8 +186,8 @@ func TestSetupWith(t *testing.T) {
t.Errorf("expected key manager to exist")
}

if _, ok := km.(*keys.InMemory); !ok {
t.Errorf("expected %T to be InMemory", km)
if _, ok := km.(*keys.Filesystem); !ok {
t.Errorf("expected %T to be Filesystem", km)
}
})

Expand Down
5 changes: 4 additions & 1 deletion pkg/keys/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const (
KeyManagerTypeAzureKeyVault KeyManagerType = "AZURE_KEY_VAULT"
KeyManagerTypeGoogleCloudKMS KeyManagerType = "GOOGLE_CLOUD_KMS"
KeyManagerTypeHashiCorpVault KeyManagerType = "HASHICORP_VAULT"
KeyManagerTypeInMemory KeyManagerType = "IN_MEMORY"
KeyManagerTypeFilesystem KeyManagerType = "FILESYSTEM"
sethvargo marked this conversation as resolved.
Show resolved Hide resolved
)

// Config defines configuration.
Expand All @@ -34,4 +34,7 @@ type Config struct {
// Adherence to this config setting is optional and based
// upon the key manager implementation and underlying capabilities.
CreateHSMKeys bool `env:"CREATE_HSM_KEYS, default=true"`

// FilesystemRoot is the root path where keys are managed on the filesystem.
FilesystemRoot string `env:"KEY_FILESYSTEM_ROOT"`
}
Loading