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

Backport of Change minimum retention window CE changes into release/1.15.x #26143

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d49f834
Change minimum retention window CE changes (#26118)
akshya96 Mar 25, 2024
f571fe8
backport of commit da21b851333bcbae657422002414636731a3ebd7 (#25666)
hc-github-team-secure-vault-core Mar 25, 2024
b7106aa
headers only modified if we have a header formatter and headers (#26140)
Mar 26, 2024
1f4a8b9
backport of commit 1885f16d8b81e6cfe0f13d3d8f9230c330ebe608 (#26153)
hc-github-team-secure-vault-core Mar 26, 2024
67ea6e6
Known issues: Vault Enterprise - Performance Standby nodes audit log …
hc-github-team-secure-vault-core Mar 26, 2024
73ff190
Correct version for next 1.15 release (#26212)
mladlow Mar 29, 2024
9b1572b
Update CHANGELOG.md (#26215)
mladlow Mar 29, 2024
6aa86d4
backport of commit 92c58476ee927137f25ceec51f043a24fc92b00c (#26234)
hc-github-team-secure-vault-core Apr 1, 2024
463cfc5
backport of commit f1922d2113a2ac4f3b8e1792410a7db4734e2913 (#26272)
hc-github-team-secure-vault-core Apr 4, 2024
cd870dd
UI: Don't show Resultant-ACL banner when wildcard policy present (#26…
hashishaw Apr 4, 2024
79e91ad
backport of commit d1fda882a570d34f256e61ee207a163aa4cb4072 (#26302)
hc-github-team-secure-vault-core Apr 8, 2024
83c6394
backport of commit 02312cbb5759d8591e5f0dca73dee2099a5c7b33 (#26305)
hc-github-team-secure-vault-core Apr 8, 2024
4b46be0
backport of commit c9dafc19715c0c8c38ad33bd413de69613ae0dd2 (#26187)
hc-github-team-secure-vault-core Apr 10, 2024
214e670
UI: Replication page navigation fix (#26325) (#26339)
hashishaw Apr 10, 2024
a1db99e
UI: fix replication nav 1.15.x (#26349)
hashishaw Apr 10, 2024
cbe073f
backport of commit 71758f4defa351af16198152f3db0d2eea8e0c48 (#26358)
hc-github-team-secure-vault-core Apr 10, 2024
f00d749
UI: Dependency bumps 1.15.x (#26371)
hashishaw Apr 11, 2024
55aba54
Merge branch 'release/1.15.x' into backport/vault-24058-ce/sincerely-…
akshya96 Apr 11, 2024
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
44 changes: 41 additions & 3 deletions vault/activity_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"io"
"net/http"
"os"
"path"
"sort"
"strconv"
"strings"
Expand Down Expand Up @@ -87,6 +88,16 @@ const (
entityActivityType = "entity"
secretSyncActivityType = "secret-sync"

// ActivityLogMinimumRetentionMonths sets the default minimum retention_months
// to enforce when reporting is enabled. Note that this value is also statically
// defined in the UI. Any updates here should also be made to
// ui/app/models/clients/config.js.
ActivityLogMinimumRetentionMonths = 48

// activityLogMaximumRetentionMonths sets the default maximum retention_months
// to enforce when reporting is enabled.
activityLogMaximumRetentionMonths = 60

// FeatureSecretSyncBilling will always be false
FeatureSecretSyncBilling = license.FeatureNone
)
Expand Down Expand Up @@ -260,7 +271,7 @@ func NewActivityLog(core *Core, logger log.Logger, view *BarrierView, metrics me
precomputedQueryWritten: make(chan struct{}),
}

config, err := a.loadConfigOrDefault(core.activeContext)
config, err := a.loadConfigOrDefault(core.activeContext, core.ManualLicenseReportingEnabled())
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1895,12 +1906,12 @@ type activityConfig struct {
func defaultActivityConfig() activityConfig {
return activityConfig{
DefaultReportMonths: 12,
RetentionMonths: 24,
RetentionMonths: ActivityLogMinimumRetentionMonths,
Enabled: "default",
}
}

func (a *ActivityLog) loadConfigOrDefault(ctx context.Context) (activityConfig, error) {
func (a *ActivityLog) loadConfigOrDefault(ctx context.Context, isReportingEnabled bool) (activityConfig, error) {
// Load from storage
var config activityConfig
configRaw, err := a.view.Get(ctx, activityConfigKey)
Expand All @@ -1915,9 +1926,36 @@ func (a *ActivityLog) loadConfigOrDefault(ctx context.Context) (activityConfig,
return config, err
}

// check if the retention time is lesser than the default when reporting is enabled
if (config.RetentionMonths < ActivityLogMinimumRetentionMonths) && isReportingEnabled {
updatedConfig, err := a.setDefaultRetentionMonthsInConfig(ctx, config)
if err != nil {
return config, err
}
return updatedConfig, nil
}
return config, nil
}

// setDefaultRetentionMonthsInConfig sets the retention months in activity config with default value.
// This supports upgrades from versions prior to set the new default ActivityLogMinimumRetentionMonths.
func (a *ActivityLog) setDefaultRetentionMonthsInConfig(ctx context.Context, inputConfig activityConfig) (activityConfig, error) {
inputConfig.RetentionMonths = ActivityLogMinimumRetentionMonths

// Store the config
entry, err := logical.StorageEntryJSON(path.Join(activitySubPath, activityConfigKey), inputConfig)
if err != nil {
return inputConfig, err
}
if err := a.view.Put(ctx, entry); err != nil {
return inputConfig, err
}

// Set the new config on the activity log
a.SetConfig(ctx, inputConfig)
return inputConfig, nil
}

// HandleTokenUsage adds the TokenEntry to the current fragment of the activity log
// This currently occurs on token usage only.
func (a *ActivityLog) HandleTokenUsage(ctx context.Context, entry *logical.TokenEntry, clientID string, isTWE bool) error {
Expand Down
7 changes: 4 additions & 3 deletions vault/activity_log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -860,7 +860,7 @@ func TestActivityLog_API_ConfigCRUD_Census(t *testing.T) {
if err == nil {
t.Fatal("expected error")
}
if resp.Data["error"] != `retention_months must be at least 24 while Reporting is enabled` {
if resp.Data["error"] != `retention_months must be at least 48 while Reporting is enabled` {
t.Fatalf("bad: %v", resp)
}
} else {
Expand All @@ -871,7 +871,7 @@ func TestActivityLog_API_ConfigCRUD_Census(t *testing.T) {

req = logical.TestRequest(t, logical.UpdateOperation, "internal/counters/config")
req.Storage = view
req.Data["retention_months"] = 26
req.Data["retention_months"] = 56
resp, err = b.HandleRequest(namespace.RootContext(nil), req)
if err != nil {
t.Fatalf("err: %v", err)
Expand Down Expand Up @@ -917,9 +917,10 @@ func TestActivityLog_API_ConfigCRUD_Census(t *testing.T) {
if err != nil {
t.Fatalf("err: %v", err)
}

expected := map[string]interface{}{
"default_report_months": 12,
"retention_months": 26,
"retention_months": 56,
"enabled": "enable",
"queries_available": false,
"reporting_enabled": core.AutomatedLicenseReportingEnabled(),
Expand Down
2 changes: 1 addition & 1 deletion vault/activity_log_testing_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ func (a *ActivityLog) SetStandbyEnable(ctx context.Context, enabled bool) {
// TODO only patch enabled?
a.SetConfigStandby(ctx, activityConfig{
DefaultReportMonths: 12,
RetentionMonths: 24,
RetentionMonths: ActivityLogMinimumRetentionMonths,
Enabled: enableStr,
})
}
Expand Down
19 changes: 12 additions & 7 deletions vault/logical_system_activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ import (
"github.com/hashicorp/vault/sdk/logical"
)

// defaultToRetentionMonthsMaxWarning is a warning message for setting the max retention_months value when retention_months value is more than activityLogMaximumRetentionMonths
var defaultToRetentionMonthsMaxWarning = fmt.Sprintf("retention_months cannot be greater than %d; capped to %d.", activityLogMaximumRetentionMonths, activityLogMaximumRetentionMonths)

// activityQueryPath is available in every namespace
func (b *SystemBackend) activityQueryPath() *framework.Path {
return &framework.Path{
Expand Down Expand Up @@ -109,7 +112,7 @@ func (b *SystemBackend) rootActivityPaths() []*framework.Path {
},
"retention_months": {
Type: framework.TypeInt,
Default: 24,
Default: ActivityLogMinimumRetentionMonths,
Description: "Number of months of client data to retain. Setting to 0 will clear all existing data.",
},
"enabled": {
Expand Down Expand Up @@ -308,7 +311,7 @@ func (b *SystemBackend) handleActivityConfigRead(ctx context.Context, req *logic
return logical.ErrorResponse("no activity log present"), nil
}

config, err := a.loadConfigOrDefault(ctx)
config, err := a.loadConfigOrDefault(ctx, b.Core.ManualLicenseReportingEnabled())
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -345,7 +348,7 @@ func (b *SystemBackend) handleActivityConfigUpdate(ctx context.Context, req *log

warnings := make([]string, 0)

config, err := a.loadConfigOrDefault(ctx)
config, err := a.loadConfigOrDefault(ctx, b.Core.ManualLicenseReportingEnabled())
if err != nil {
return nil, err
}
Expand All @@ -363,6 +366,8 @@ func (b *SystemBackend) handleActivityConfigUpdate(ctx context.Context, req *log

{
// Parse the retention months
// For CE, this value can be between 0 and 60
// When reporting is enabled, this value can be between 48 and 60
if retentionMonthsRaw, ok := d.GetOk("retention_months"); ok {
config.RetentionMonths = retentionMonthsRaw.(int)
}
Expand All @@ -371,9 +376,9 @@ func (b *SystemBackend) handleActivityConfigUpdate(ctx context.Context, req *log
return logical.ErrorResponse("retention_months must be greater than or equal to 0"), logical.ErrInvalidRequest
}

if config.RetentionMonths > 36 {
config.RetentionMonths = 36
warnings = append(warnings, "retention_months cannot be greater than 36; capped to 36.")
if config.RetentionMonths > activityLogMaximumRetentionMonths {
config.RetentionMonths = activityLogMaximumRetentionMonths
warnings = append(warnings, defaultToRetentionMonthsMaxWarning)
}
}

Expand Down Expand Up @@ -416,7 +421,7 @@ func (b *SystemBackend) handleActivityConfigUpdate(ctx context.Context, req *log
return logical.ErrorResponse("retention_months cannot be 0 while enabled"), logical.ErrInvalidRequest
}

// if manual license reporting is enabled, retention months must at least be 24 months
// if manual license reporting is enabled, retention months must at least be 48 months
if a.core.ManualLicenseReportingEnabled() && config.RetentionMonths < minimumRetentionMonths {
return logical.ErrorResponse("retention_months must be at least %d while Reporting is enabled", minimumRetentionMonths), logical.ErrInvalidRequest
}
Expand Down
Loading