Skip to content

Commit 4d5c22c

Browse files
bors[bot]kc1116
andauthored
Merge #2042
2042: Khalil/5893 secretsdb key soft enforcement r=kc1116 a=kc1116 This PR adds soft enforcement for encrypted secrets DB . - While attempting to read the secrets db encryption key if it is missing the node will exit - Encryption can be explicitly bypassed using **_--insecure-secrets-db_** (soft enforcement), this will be deprecated in the future when we make encryption a hard requirement Issue: https://github.com/dapperlabs/flow-go/issues/5893 Co-authored-by: Khalil Claybon <khalil.claybon@dapperlabs.com>
2 parents 39e1366 + 29136d3 commit 4d5c22c

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

cmd/node_builder.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ type BaseConfig struct {
125125
datadir string
126126
secretsdir string
127127
secretsDBEnabled bool
128+
InsecureSecretsDB bool
128129
level string
129130
metricsPort uint
130131
BootstrapDir string

cmd/scaffold.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ func (fnb *FlowNodeBuilder) BaseFlags() {
149149
fnb.flags.StringVar(&fnb.BaseConfig.DynamicStartupEpochPhase, "dynamic-startup-epoch-phase", "EpochPhaseSetup", "the target epoch phase for dynamic startup <EpochPhaseStaking|EpochPhaseSetup|EpochPhaseCommitted")
150150
fnb.flags.StringVar(&fnb.BaseConfig.DynamicStartupEpoch, "dynamic-startup-epoch", "current", "the target epoch for dynamic-startup, use \"current\" to start node in the current epoch")
151151
fnb.flags.DurationVar(&fnb.BaseConfig.DynamicStartupSleepInterval, "dynamic-startup-sleep-interval", time.Minute, "the interval in which the node will check if it can start")
152+
153+
fnb.flags.BoolVar(&fnb.BaseConfig.InsecureSecretsDB, "insecure-secrets-db", false, "allow the node to start up without an secrets DB encryption key")
152154
}
153155

154156
func (fnb *FlowNodeBuilder) EnqueuePingService() {
@@ -538,15 +540,25 @@ func (fnb *FlowNodeBuilder) initSecretsDB() {
538540
log := sutil.NewLogger(fnb.Logger)
539541

540542
opts := badger.DefaultOptions(fnb.BaseConfig.secretsdir).WithLogger(log)
541-
// attempt to read an encryption key for the secrets DB from the canonical path
542-
// TODO enforce encryption in an upcoming spork https://github.com/dapperlabs/flow-go/issues/5893
543-
encryptionKey, err := loadSecretsEncryptionKey(fnb.BootstrapDir, fnb.NodeID)
544-
if errors.Is(err, os.ErrNotExist) {
543+
544+
// NOTE: SN nodes need to explicitly set --insecure-secrets-db to true in order to
545+
// disable secrets database encryption
546+
if fnb.NodeRole == flow.RoleConsensus.String() && fnb.InsecureSecretsDB {
545547
fnb.Logger.Warn().Msg("starting with secrets database encryption disabled")
546-
} else if err != nil {
547-
fnb.Logger.Fatal().Err(err).Msg("failed to read secrets db encryption key")
548548
} else {
549-
opts = opts.WithEncryptionKey(encryptionKey)
549+
encryptionKey, err := loadSecretsEncryptionKey(fnb.BootstrapDir, fnb.NodeID)
550+
if errors.Is(err, os.ErrNotExist) {
551+
if fnb.NodeRole == flow.RoleConsensus.String() {
552+
// missing key is a fatal error for SN nodes
553+
fnb.Logger.Fatal().Err(err).Msg("secrets db encryption key not found")
554+
} else {
555+
fnb.Logger.Warn().Msg("starting with secrets database encryption disabled")
556+
}
557+
} else if err != nil {
558+
fnb.Logger.Fatal().Err(err).Msg("failed to read secrets db encryption key")
559+
} else {
560+
opts = opts.WithEncryptionKey(encryptionKey)
561+
}
550562
}
551563

552564
secretsDB, err := bstorage.InitSecret(opts)

0 commit comments

Comments
 (0)