Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audit Logs Rebase #7443

Merged
merged 117 commits into from
Oct 13, 2022
Merged
Show file tree
Hide file tree
Changes from 116 commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
6ff5012
Create new Splunk Logger (forward event data with HEC in goroutine)
CL-Andrew Jun 10, 2022
041ce89
Merge branch 'develop' of github.com:smartcontractkit/chainlink into …
CL-Andrew Jun 10, 2022
1019b4a
update CHANGELOG to include new SPLUNK environment variables
CL-Andrew Jun 10, 2022
064a0e1
go generate for updates to logger interface in test harness
CL-Andrew Jun 10, 2022
d06fea2
set environment string instead of develop bool in splunk logger const…
CL-Andrew Jun 17, 2022
1d40057
Merge branch 'develop' of github.com:smartcontractkit/chainlink into …
CL-Andrew Jun 17, 2022
44be948
Fix resolver_test harness with GetLogger return test logger in app setup
CL-Andrew Jun 17, 2022
67141e6
Move audit types to package audit, capital camel case audit type cons…
CL-Andrew Jun 20, 2022
d7ef189
Update generated mock code
CL-Andrew Jun 20, 2022
51a3301
rework splunk logger forwarder goroutine per functionc all, implement…
CL-Andrew Jun 29, 2022
ce7a446
Handle serialize error for chains, move comment/documentation
CL-Andrew Jun 29, 2022
3afe925
Rework splunk logger to general http log service logger, add paramete…
CL-Andrew Jun 30, 2022
a7e9c9e
WIP - rework audit logger to top level Application struct
CL-Andrew Jun 30, 2022
dbda04b
Rework audit logger system as standalone interface and struct instead…
CL-Andrew Jul 1, 2022
de09f41
Generate mocks and remove previous audit log test rework
CL-Andrew Jul 1, 2022
19d0637
Fix errors.Errorf call in application
CL-Andrew Jul 1, 2022
96a6ead
Add mocks and stubs to test harness calls that require new auditLogge…
CL-Andrew Jul 1, 2022
cf792e3
audit_logger.go error handling fix
CL-Andrew Jul 1, 2022
3f9ed57
Merge remote-tracking branch 'upstream/develop' into audit-logs. Upda…
CL-Andrew Jul 1, 2022
22677fe
Fix issues after rebase
NotoriousEnigma Sep 14, 2022
deb43a2
Remove a line accidentally added by rebase
NotoriousEnigma Sep 14, 2022
01fba6e
Move to a single green thread instead of many
NotoriousEnigma Sep 14, 2022
ab09a61
Update changelog
NotoriousEnigma Sep 15, 2022
6d7d8a6
Remove comment
NotoriousEnigma Sep 15, 2022
714cb7a
Fix webauthn formatting
NotoriousEnigma Sep 15, 2022
e8748c1
Type alias
NotoriousEnigma Sep 15, 2022
cbc31fd
Change const from SCREAMING_SNAKE_CASE to lowerCamelCase
NotoriousEnigma Sep 15, 2022
c8e9e76
Make configuration not require environment variables in the AuditLogg…
NotoriousEnigma Sep 16, 2022
069c57c
Improve error handling
NotoriousEnigma Sep 16, 2022
26a8570
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 16, 2022
f66ab62
Fix spelling mistake
NotoriousEnigma Sep 16, 2022
6c97ac4
Regenerate mocks
NotoriousEnigma Sep 16, 2022
dad89d9
Address racy len
NotoriousEnigma Sep 16, 2022
1451531
Add variables to test
NotoriousEnigma Sep 16, 2022
bfcddbc
Remove old logger changes
NotoriousEnigma Sep 16, 2022
708d2b3
Rename the audit config structure
NotoriousEnigma Sep 16, 2022
76febb3
Renaming, mocks, try to fix config
NotoriousEnigma Sep 16, 2022
1f230ec
Remove context from audit calls
NotoriousEnigma Sep 16, 2022
caf8e6a
Update configuration structures, follow service pattern
NotoriousEnigma Sep 16, 2022
7fe9312
Servicify AuditLogger
NotoriousEnigma Sep 16, 2022
dabe093
Address Krage feedback
NotoriousEnigma Sep 16, 2022
5ebc8d6
Change config name
NotoriousEnigma Sep 16, 2022
78dfe22
Fix build
NotoriousEnigma Sep 16, 2022
b928d0b
Don't try to audit on marshal failure
NotoriousEnigma Sep 16, 2022
fce3ed8
Fix docs
NotoriousEnigma Sep 16, 2022
9969e8b
Return nil instead
NotoriousEnigma Sep 16, 2022
dbe1e75
Fix error handling
NotoriousEnigma Sep 17, 2022
e6e3d52
Try to fix tests
NotoriousEnigma Sep 17, 2022
2b06260
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 17, 2022
4905922
Change initialization to be test friendly
NotoriousEnigma Sep 20, 2022
43f578d
Remove old prints and do some clean up
NotoriousEnigma Sep 20, 2022
fe32a2d
Address typo
NotoriousEnigma Sep 20, 2022
f269bc4
FIx io/ioutil
NotoriousEnigma Sep 20, 2022
df57a55
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 20, 2022
2244bf2
Fix test crashes
NotoriousEnigma Sep 20, 2022
3b78b22
Address comments
NotoriousEnigma Sep 20, 2022
73ced32
Address comments
NotoriousEnigma Sep 20, 2022
2dc410f
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 20, 2022
d0a76f9
Move to new validate config system
NotoriousEnigma Sep 21, 2022
e02f811
NewRequestWithContext
NotoriousEnigma Sep 21, 2022
aa43056
Fix tests
NotoriousEnigma Sep 21, 2022
df73757
Fix punctuation
NotoriousEnigma Sep 21, 2022
554c45d
Fix tests
NotoriousEnigma Sep 21, 2022
09be73d
Fix tests
NotoriousEnigma Sep 21, 2022
3306e68
Update docs
NotoriousEnigma Sep 21, 2022
1066d19
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 21, 2022
2c8dc1e
Remove non-root suffix to tags
HenryNguyen5 May 16, 2022
da65ec8
core/services: ServiceCtx docs (#7483)
jmank88 Sep 21, 2022
a48363c
core/services/chainlink: clean up service naming (#7487)
jmank88 Sep 21, 2022
bbb7a99
core/chains/evm/txmgr: skip disabled keys from nonce syncer (#7496)
jmank88 Sep 21, 2022
cbccc6b
Refactor with Jordan's help
NotoriousEnigma Sep 22, 2022
a7fedc7
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 22, 2022
ab01f13
Fix tests
NotoriousEnigma Sep 22, 2022
861e229
Unify key manipulation logs
NotoriousEnigma Sep 22, 2022
7b938fa
Add env defaults
NotoriousEnigma Sep 22, 2022
14fa77b
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 23, 2022
faab18f
Use dev function
NotoriousEnigma Sep 23, 2022
8e6f44f
keysController field names
jmank88 Sep 23, 2022
022ecb7
Merge branch 'develop' into audit-logs-rebase
obelisk Sep 26, 2022
021503e
Fix tests?
NotoriousEnigma Sep 26, 2022
b577bf3
Change ID to name
obelisk Oct 5, 2022
d040a48
Fix mock error by stubbing. Needs review
obelisk Oct 5, 2022
09e1ffb
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 5, 2022
98fa50d
Merge branch 'audit-logs-rebase' into keys-controller-fieldname
obelisk Oct 5, 2022
b10d42c
Merge pull request #7514 from smartcontractkit/keys-controller-fieldname
obelisk Oct 5, 2022
1d3e3ae
Fix missing import
obelisk Oct 5, 2022
a3e8ea5
Fix nil errors
obelisk Oct 6, 2022
b17730e
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 11, 2022
ed52ac0
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 11, 2022
3cb77a1
fix tests.
obelisk Oct 11, 2022
121e8b2
Fix last issues
obelisk Oct 11, 2022
03bde97
Remove unused function
obelisk Oct 11, 2022
2b7c5e7
Fix lint
obelisk Oct 11, 2022
19ceb14
Update core/config/v2/types.go
obelisk Oct 11, 2022
1ea2d29
Update core/web/resolver/resolver_test.go
obelisk Oct 11, 2022
04de8e2
Fix naming
obelisk Oct 11, 2022
bf8c340
Remove nil check, add extra JSON definitions
obelisk Oct 11, 2022
d18a57d
Add example
obelisk Oct 11, 2022
4d35310
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 12, 2022
4688dbb
Do some more header validation
obelisk Oct 12, 2022
6dd7102
Add examples
obelisk Oct 12, 2022
fc83c1e
Modify core.toml
obelisk Oct 12, 2022
f238117
Raw string for a regex
obelisk Oct 12, 2022
aad8069
Updates to tests
obelisk Oct 12, 2022
a7e891a
cleanup
jmank88 Oct 12, 2022
d75cb68
Merge pull request #7658 from smartcontractkit/audit-logs-cleanup
obelisk Oct 12, 2022
39c977d
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 12, 2022
24e75bc
Fix service headers
obelisk Oct 12, 2022
a47bd5b
align ServiceHeaders
jmank88 Oct 12, 2022
cd174b9
Merge pull request #7659 from smartcontractkit/audit-logs-service-hea…
obelisk Oct 12, 2022
5c480e5
skip exceptional method
jmank88 Oct 12, 2022
5aa4a1b
Merge pull request #7663 from smartcontractkit/audit-logs-skip
obelisk Oct 12, 2022
f1bd29c
Noop Logger
obelisk Oct 13, 2022
af462f9
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 13, 2022
c51e5e2
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 13, 2022
51f779e
Merge branch 'develop' into audit-logs-rebase
obelisk Oct 13, 2022
dad7e2e
Merge branch 'develop' into audit-logs-rebase
CL-Andrew Oct 13, 2022
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
91 changes: 89 additions & 2 deletions core/chains/evm/config/mocks/chain_scoped_config.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions core/cmd/cfgtest/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ func TestDefaultConfig(t *testing.T) {
"LogFileDir",
"RootDir",
"TLSDir",
"AuditLoggerEnvironment", // same problem being derived from Dev()
}
assertMethodsReturnEqual[config.GeneralConfig](t, configtest.NewTestGeneralConfig(t), configtest2.NewTestGeneralConfig(t), testRoot)
})
Expand Down
8 changes: 8 additions & 0 deletions core/cmd/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/smartcontractkit/chainlink/core/chains/terra"
"github.com/smartcontractkit/chainlink/core/config"
"github.com/smartcontractkit/chainlink/core/logger"
"github.com/smartcontractkit/chainlink/core/logger/audit"
"github.com/smartcontractkit/chainlink/core/services/chainlink"
"github.com/smartcontractkit/chainlink/core/services/keystore"
"github.com/smartcontractkit/chainlink/core/services/periodicbackup"
Expand Down Expand Up @@ -238,6 +239,12 @@ func (n ChainlinkAppFactory) NewApplication(ctx context.Context, cfg config.Gene
}
}

// Configure and optionally start the audit log forwarder service
auditLogger, err := audit.NewAuditLogger(appLggr, cfg)
if err != nil {
return nil, err
}

restrictedClient := clhttp.NewRestrictedHTTPClient(cfg, appLggr)
unrestrictedClient := clhttp.NewUnrestrictedHTTPClient()
externalInitiatorManager := webhook.NewExternalInitiatorManager(db, unrestrictedClient, appLggr, cfg)
Expand All @@ -248,6 +255,7 @@ func (n ChainlinkAppFactory) NewApplication(ctx context.Context, cfg config.Gene
Chains: chains,
EventBroadcaster: eventBroadcaster,
Logger: appLggr,
AuditLogger: auditLogger,
CloseLogger: closeLggr,
ExternalInitiatorManager: externalInitiatorManager,
Version: static.Version,
Expand Down
9 changes: 5 additions & 4 deletions core/cmd/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/smartcontractkit/chainlink/core/internal/testutils"
"github.com/smartcontractkit/chainlink/core/internal/testutils/pgtest"
"github.com/smartcontractkit/chainlink/core/logger"
"github.com/smartcontractkit/chainlink/core/logger/audit"
"github.com/smartcontractkit/chainlink/core/sessions"

"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -135,7 +136,7 @@ func TestTerminalAPIInitializer_InitializeWithoutAPIUser(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t))
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t), audit.NoopLogger)

mock := &cltest.MockCountingPrompter{T: t, EnteredStrings: test.enteredStrings, NotTerminal: !test.isTerminal}
tai := cmd.NewPromptingAPIInitializer(mock, logger.TestLogger(t))
Expand Down Expand Up @@ -165,7 +166,7 @@ func TestTerminalAPIInitializer_InitializeWithoutAPIUser(t *testing.T) {
func TestTerminalAPIInitializer_InitializeWithExistingAPIUser(t *testing.T) {
db := pgtest.NewSqlxDB(t)
cfg := cltest.NewTestGeneralConfig(t)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cfg)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cfg, audit.NoopLogger)

// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
Expand Down Expand Up @@ -201,7 +202,7 @@ func TestFileAPIInitializer_InitializeWithoutAPIUser(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t))
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t), audit.NoopLogger)

// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
Expand All @@ -226,7 +227,7 @@ func TestFileAPIInitializer_InitializeWithoutAPIUser(t *testing.T) {
func TestFileAPIInitializer_InitializeWithExistingAPIUser(t *testing.T) {
db := pgtest.NewSqlxDB(t)
cfg := cltest.NewTestGeneralConfig(t)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cfg)
orm := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cfg, audit.NoopLogger)

tests := []struct {
name string
Expand Down
11 changes: 8 additions & 3 deletions core/cmd/local_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/smartcontractkit/chainlink/core/internal/testutils/evmtest"
"github.com/smartcontractkit/chainlink/core/internal/testutils/pgtest"
"github.com/smartcontractkit/chainlink/core/logger"
"github.com/smartcontractkit/chainlink/core/logger/audit"
"github.com/smartcontractkit/chainlink/core/services/chainlink"
"github.com/smartcontractkit/chainlink/core/sessions"
"github.com/smartcontractkit/chainlink/core/store/dialects"
Expand Down Expand Up @@ -51,7 +52,7 @@ func TestClient_RunNodeShowsEnv(t *testing.T) {

db := pgtest.NewSqlxDB(t)
pCfg := cltest.NewTestGeneralConfig(t)
sessionORM := sessions.NewORM(db, time.Minute, lggr, pCfg)
sessionORM := sessions.NewORM(db, time.Minute, lggr, pCfg, audit.NoopLogger)
keyStore := cltest.NewKeyStore(t, db, cfg)
_, err := keyStore.Eth().Create(&cltest.FixtureChainID)
require.NoError(t, err)
Expand Down Expand Up @@ -167,6 +168,10 @@ LOG_FILE_MAX_SIZE: 5.12gb
LOG_FILE_MAX_AGE: 0
LOG_FILE_MAX_BACKUPS: 1
TRIGGER_FALLBACK_DB_POLL_INTERVAL: 30s
AUDIT_LOGGER_ENABLED: false
AUDIT_LOGGER_FORWARD_TO_URL:
AUDIT_LOGGER_JSON_WRAPPER_KEY:
AUDIT_LOGGER_HEADERS:
OCR_CONTRACT_TRANSMITTER_TRANSMIT_TIMEOUT:
OCR_DATABASE_TIMEOUT:
OCR_DEFAULT_TRANSACTION_QUEUE_DEPTH: 1
Expand Down Expand Up @@ -220,7 +225,7 @@ func TestClient_RunNodeWithPasswords(t *testing.T) {
cfg := cltest.NewTestGeneralConfig(t)
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db, cfg)
sessionORM := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t))
sessionORM := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t), audit.NoopLogger)

// Purge the fixture users to test assumption of single admin
// initialUser user created above
Expand Down Expand Up @@ -282,7 +287,7 @@ func TestClient_RunNodeWithAPICredentialsFile(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
cfg := cltest.NewTestGeneralConfig(t)
db := pgtest.NewSqlxDB(t)
sessionORM := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t))
sessionORM := sessions.NewORM(db, time.Minute, logger.TestLogger(t), cltest.NewTestGeneralConfig(t), audit.NoopLogger)

// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
Expand Down
6 changes: 6 additions & 0 deletions core/config/envvar/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ type ConfigSchema struct {
TelemetryIngressUseBatchSend bool `env:"TELEMETRY_INGRESS_USE_BATCH_SEND" default:"true"`
ShutdownGracePeriod time.Duration `env:"SHUTDOWN_GRACE_PERIOD" default:"5s"`

// Audit Logger
AuditLoggerEnabled bool `env:"AUDIT_LOGGER_ENABLED" default:"false"`
AuditLoggerForwardToUrl string `env:"AUDIT_LOGGER_FORWARD_TO_URL" default:""`
AuditLoggerHeaders string `env:"AUDIT_LOGGER_HEADERS" default:""`
AuditLoggerJsonWrapperKey string `env:"AUDIT_LOGGER_JSON_WRAPPER_KEY" default:""`

// Database
DatabaseListenerMaxReconnectDuration time.Duration `env:"DATABASE_LISTENER_MAX_RECONNECT_DURATION" default:"10m"` //nodoc
DatabaseListenerMinReconnectInterval time.Duration `env:"DATABASE_LISTENER_MIN_RECONNECT_INTERVAL" default:"1m"` //nodoc
Expand Down
4 changes: 4 additions & 0 deletions core/config/envvar/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ func TestConfigSchema(t *testing.T) {
items := map[string]string{
"AdvisoryLockCheckInterval": "ADVISORY_LOCK_CHECK_INTERVAL",
"AdvisoryLockID": "ADVISORY_LOCK_ID",
"AuditLoggerEnabled": "AUDIT_LOGGER_ENABLED",
"AuditLoggerForwardToUrl": "AUDIT_LOGGER_FORWARD_TO_URL",
"AuditLoggerHeaders": "AUDIT_LOGGER_HEADERS",
"AuditLoggerJsonWrapperKey": "AUDIT_LOGGER_JSON_WRAPPER_KEY",
"AllowOrigins": "ALLOW_ORIGINS",
"AuthenticatedRateLimit": "AUTHENTICATED_RATE_LIMIT",
"AuthenticatedRateLimitPeriod": "AUTHENTICATED_RATE_LIMIT_PERIOD",
Expand Down
33 changes: 33 additions & 0 deletions core/config/general_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/smartcontractkit/chainlink/core/config/envvar"
"github.com/smartcontractkit/chainlink/core/config/parse"
"github.com/smartcontractkit/chainlink/core/logger"
"github.com/smartcontractkit/chainlink/core/logger/audit"
"github.com/smartcontractkit/chainlink/core/static"
"github.com/smartcontractkit/chainlink/core/store/dialects"
"github.com/smartcontractkit/chainlink/core/store/models"
Expand Down Expand Up @@ -69,6 +70,7 @@ type BasicConfig interface {
SetLogSQL(logSQL bool)

FeatureFlags
audit.Config

AdvisoryLockCheckInterval() time.Duration
AdvisoryLockID() int64
Expand Down Expand Up @@ -491,6 +493,37 @@ func (c *generalConfig) AppID() uuid.UUID {
return c.appID
}

func (c *generalConfig) AuditLoggerEnabled() bool {
return c.viper.GetBool(envvar.Name("AuditLoggerEnabled"))
}

func (c *generalConfig) AuditLoggerForwardToUrl() (models.URL, error) {
url, err := models.ParseURL(c.viper.GetString(envvar.Name("AuditLoggerForwardToUrl")))
if err != nil {
return models.URL{}, err
}
return *url, nil
}

func (c *generalConfig) AuditLoggerEnvironment() string {
if c.Dev() {
return "develop"
}
return "production"
}

func (c *generalConfig) AuditLoggerJsonWrapperKey() string {
return c.viper.GetString(envvar.Name("AuditLoggerJsonWrapperKey"))
}

func (c *generalConfig) AuditLoggerHeaders() (audit.ServiceHeaders, error) {
sh, invalid := audit.AuditLoggerHeaders.Parse()
if invalid != "" {
return nil, errors.New(invalid)
}
return sh, nil
}

// AuthenticatedRateLimit defines the threshold to which authenticated requests
// get limited. More than this many requests per AuthenticatedRateLimitPeriod will be rejected.
func (c *generalConfig) AuthenticatedRateLimit() int64 {
Expand Down
Loading