From a150c588bb3922f1055abb8a4a1d02b86b82ce85 Mon Sep 17 00:00:00 2001 From: Timothy Messier Date: Fri, 1 Dec 2023 22:15:54 +0000 Subject: [PATCH] feat(controller): Emit sys event detailing the rate limit configuration A sys event will be emitted when the controller is constructed, and if the rate limits are changed via a SIGHUP. The event contains the details of the rate limits for each combination of resource and action. This event can be used by operators to confirm the limits are set as they would expect based on the controller config. --- internal/daemon/controller/rate_limiter.go | 84 + .../daemon/controller/rate_limiter_test.go | 192 +- .../defaults.json | 3903 +++++++++++++++++ .../disabled.json | 15 + .../max_size.json | 3903 +++++++++++++++++ .../override.json | 3903 +++++++++++++++++ 6 files changed, 11999 insertions(+), 1 deletion(-) create mode 100644 internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/defaults.json create mode 100644 internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/disabled.json create mode 100644 internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/max_size.json create mode 100644 internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/override.json diff --git a/internal/daemon/controller/rate_limiter.go b/internal/daemon/controller/rate_limiter.go index 9cffda696..f32e4b773 100644 --- a/internal/daemon/controller/rate_limiter.go +++ b/internal/daemon/controller/rate_limiter.go @@ -8,10 +8,29 @@ import ( "github.com/hashicorp/boundary/internal/cmd/config" "github.com/hashicorp/boundary/internal/errors" + "github.com/hashicorp/boundary/internal/event" "github.com/hashicorp/boundary/internal/ratelimit" "github.com/hashicorp/go-rate" ) +// limit is a representation of a rate.Limit that is used when emitting a sys +// event to report the rate limit configuration. +type limit struct { + Resource string `json:"resource"` + Action string `json:"action"` + Per string `json:"per"` + Unlimited bool `json:"unlimited"` + Limit uint64 `json:"limit"` + Period string `json:"period"` +} + +// Types used for the nested structure of the sys event. +type ( + actionLimits []limit + resourceActions map[string]actionLimits + resources map[string]resourceActions +) + type rateLimiterConfig struct { maxSize int disabled bool @@ -44,6 +63,69 @@ func newRateLimiterConfig(ctx context.Context, configs ratelimit.Configs, maxSiz }, nil } +// writeSysEvent writes a sys event for c +func (c *rateLimiterConfig) writeSysEvent(ctx context.Context) { + const op = "controller.(rateLimiterConfig).writeSysEvent" + + if c.disabled { + event.WriteSysEvent( + ctx, + op, + "controller api rate limiter", + "disabled", + true, + ) + return + } + + e := make(resources) + + for _, l := range c.limits { + var r resourceActions + var a actionLimits + var ok bool + r, ok = e[l.GetResource()] + if !ok { + r = make(resourceActions) + e[l.GetResource()] = r + } + + a, ok = r[l.GetAction()] + if !ok { + a = make(actionLimits, 0, 3) + } + + switch ll := l.(type) { + case *rate.Limited: + a = append(a, limit{ + Resource: ll.Resource, + Action: ll.Action, + Per: ll.Per.String(), + Unlimited: false, + Limit: ll.MaxRequests, + Period: ll.Period.String(), + }) + case *rate.Unlimited: + a = append(a, limit{ + Resource: ll.Resource, + Action: ll.Action, + Per: ll.Per.String(), + Unlimited: true, + }) + } + r[l.GetAction()] = a + } + event.WriteSysEvent( + ctx, + op, + "controller api rate limiter", + "limits", + e, + "max_size", + c.maxSize, + ) +} + func (c *Controller) initializeRateLimiter(conf *config.Config) error { const op = "controller.(Controller).initializeRateLimiter" switch { @@ -78,6 +160,7 @@ func (c *Controller) initializeRateLimiter(conf *config.Config) error { c.conf.rateLimiterConfig = rlConfig + rlConfig.writeSysEvent(c.baseContext) return nil } @@ -136,6 +219,7 @@ func (c *Controller) ReloadRateLimiter(newConfig *config.Config) error { c.rateLimiter = limiter c.conf.rateLimiterConfig = rlConfig c.rateLimiterMu.Unlock() + rlConfig.writeSysEvent(c.baseContext) return old.Shutdown() } diff --git a/internal/daemon/controller/rate_limiter_test.go b/internal/daemon/controller/rate_limiter_test.go index f250b1c20..704ac3976 100644 --- a/internal/daemon/controller/rate_limiter_test.go +++ b/internal/daemon/controller/rate_limiter_test.go @@ -7,7 +7,6 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "os" "path/filepath" "sync" @@ -19,11 +18,22 @@ import ( "github.com/hashicorp/boundary/internal/cmd/config" "github.com/hashicorp/boundary/internal/event" "github.com/hashicorp/boundary/internal/ratelimit" + "github.com/hashicorp/eventlogger/formatter_filters/cloudevents" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-rate" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func testLogger(t *testing.T, testLock hclog.Locker) hclog.Logger { + t.Helper() + return hclog.New(&hclog.LoggerOptions{ + Mutex: testLock, + Name: "test", + JSONFormat: true, + }) +} + func Test_newRateLimiterConfig(t *testing.T) { ctx := context.Background() @@ -479,3 +489,183 @@ func TestControllerReloadRateLimiter(t *testing.T) { }) } } + +func Test_rateLimiterConfig_writeSysEvent(t *testing.T) { + c := event.TestEventerConfig(t, t.Name()) + + testLock := &sync.Mutex{} + testLogger := testLogger(t, testLock) + e, err := event.NewEventer(testLogger, testLock, t.Name(), c.EventerConfig) + require.NoError(t, err) + + info := &event.RequestInfo{Id: "867-5309", EventId: "411"} + + testCtx, err := event.NewEventerContext(context.Background(), e) + require.NoError(t, err) + testCtx, err = event.NewRequestInfoContext(testCtx, info) + require.NoError(t, err) + + cases := []struct { + name string + setup func(n string) error + cleanup func() + sinkFileName string + configs ratelimit.Configs + maxSize int + disabled bool + }{ + { + "defaults", + func(n string) error { + return event.InitSysEventer(testLogger, testLock, n, event.WithEventerConfig(&c.EventerConfig)) + }, + func() { event.TestResetSystEventer(t) }, + c.AllEvents.Name(), + nil, + ratelimit.DefaultLimiterMaxEntries(), + false, + }, + { + "override", + func(n string) error { + return event.InitSysEventer(testLogger, testLock, n, event.WithEventerConfig(&c.EventerConfig)) + }, + func() { event.TestResetSystEventer(t) }, + c.AllEvents.Name(), + ratelimit.Configs{ + { + Resources: []string{"*"}, + Actions: []string{"*"}, + Per: rate.LimitPerTotal.String(), + Limit: 100, + Period: time.Minute, + Unlimited: false, + }, + { + Resources: []string{"*"}, + Actions: []string{"*"}, + Per: rate.LimitPerIPAddress.String(), + Limit: 100, + Period: time.Minute, + Unlimited: false, + }, + { + Resources: []string{"*"}, + Actions: []string{"*"}, + Per: rate.LimitPerAuthToken.String(), + Limit: 100, + Period: time.Minute, + Unlimited: false, + }, + }, + ratelimit.DefaultLimiterMaxEntries(), + false, + }, + { + "max_size", + func(n string) error { + return event.InitSysEventer(testLogger, testLock, n, event.WithEventerConfig(&c.EventerConfig)) + }, + func() { event.TestResetSystEventer(t) }, + c.AllEvents.Name(), + nil, + 3000, + false, + }, + { + "disabled", + func(n string) error { + return event.InitSysEventer(testLogger, testLock, n, event.WithEventerConfig(&c.EventerConfig)) + }, + func() { event.TestResetSystEventer(t) }, + c.AllEvents.Name(), + nil, + 0, + true, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if tc.setup != nil { + require.NoError(t, tc.setup(t.Name())) + } + if tc.cleanup != nil { + defer tc.cleanup() + } + + wantFile, err := os.Open(filepath.Join("testdata", t.Name()+".json")) + require.NoError(t, err) + defer wantFile.Close() + want := &cloudevents.Event{} + wantDecoder := json.NewDecoder(wantFile) + err = wantDecoder.Decode(want) + require.NoError(t, err) + + rlc, err := newRateLimiterConfig(testCtx, tc.configs, tc.maxSize, tc.disabled) + require.NoError(t, err) + + rlc.writeSysEvent(testCtx) + + defer func() { _ = os.WriteFile(tc.sinkFileName, nil, 0o666) }() + b, err := os.ReadFile(tc.sinkFileName) + require.NoError(t, err) + + got := &cloudevents.Event{} + err = json.Unmarshal(b, got) + require.NoErrorf(t, err, "json: %s", string(b)) + + assert.Empty(t, cmp.Diff( + got, + want, + cmpopts.IgnoreFields(cloudevents.Event{}, "ID", "Time", "Data"), + )) + + gotData := got.Data.(map[string]interface{}) + wantData := want.Data.(map[string]interface{}) + assert.Equal(t, len(gotData), len(wantData)) + + for k, v := range wantData { + switch k { + case "data": + wantDataData := v.(map[string]interface{}) + gotDataData := gotData[k].(map[string]interface{}) + assert.Equal(t, len(gotDataData), len(wantDataData)) + for k, v := range wantDataData { + switch k { + case "limits": + wantResources := v.(map[string]interface{}) + gotResources := gotDataData[k].(map[string]interface{}) + for k, v := range wantResources { + gotv, ok := gotResources[k] + require.True(t, ok) + + wantResourceLimits := v.(map[string]interface{}) + gotResourceLimits := gotv.(map[string]interface{}) + require.Equal(t, len(gotResourceLimits), len(wantResourceLimits)) + + for k, v := range wantResourceLimits { + gotv, ok := gotResourceLimits[k] + require.True(t, ok) + gotActionLimits := v.([]interface{}) + wantActionLimits := gotv.([]interface{}) + require.Equal(t, len(gotActionLimits), len(wantActionLimits)) + + assert.ElementsMatch(t, gotActionLimits, wantActionLimits) + } + } + case "max_size", "msg", "disabled": + assert.Equal(t, v, gotDataData[k]) + default: + require.Fail(t, "unexpected key %s", k) + } + } + case "op", "version": + assert.Equal(t, v, gotData[k]) + default: + require.Fail(t, "unexpected key %s", k) + } + } + }) + } +} diff --git a/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/defaults.json b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/defaults.json new file mode 100644 index 000000000..1d9fbe71f --- /dev/null +++ b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/defaults.json @@ -0,0 +1,3903 @@ +{ + "id": "", + "source": "https://hashicorp.com/boundary/Test_rateLimiterConfig_writeSysEvent", + "specversion": "1.0", + "type": "system", + "data": { + "data": { + "limits": { + "account": { + "change-password": [ + { + "action": "change-password", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "set-password": [ + { + "action": "set-password", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ] + }, + "auth-method": { + "authenticate": [ + { + "action": "authenticate", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "change-state": [ + { + "action": "change-state", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ] + }, + "auth-token": { + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "delete:self": [ + { + "action": "delete:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ] + }, + "credential": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ] + }, + "credential-library": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ] + }, + "credential-store": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ] + }, + "group": { + "add-members": [ + { + "action": "add-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "remove-members": [ + { + "action": "remove-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "set-members": [ + { + "action": "set-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ] + }, + "host": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + } + ] + }, + "host-catalog": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ] + }, + "host-set": { + "add-hosts": [ + { + "action": "add-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "remove-hosts": [ + { + "action": "remove-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "set-hosts": [ + { + "action": "set-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ] + }, + "managed-group": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ] + }, + "role": { + "add-grants": [ + { + "action": "add-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "add-principals": [ + { + "action": "add-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "remove-grants": [ + { + "action": "remove-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "remove-principals": [ + { + "action": "remove-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "set-grants": [ + { + "action": "set-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "set-principals": [ + { + "action": "set-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ] + }, + "scope": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "destroy-key-version": [ + { + "action": "destroy-key-version", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list-key-version-destruction-jobs": [ + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list-keys": [ + { + "action": "list-keys", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "rotate-keys": [ + { + "action": "rotate-keys", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ] + }, + "session": { + "cancel": [ + { + "action": "cancel", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "cancel:self": [ + { + "action": "cancel:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ] + }, + "session-recording": { + "download": [ + { + "action": "download", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ] + }, + "storage-bucket": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ] + }, + "target": { + "add-credential-sources": [ + { + "action": "add-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "add-host-sources": [ + { + "action": "add-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "authorize-session": [ + { + "action": "authorize-session", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "remove-credential-sources": [ + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "remove-host-sources": [ + { + "action": "remove-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "set-credential-sources": [ + { + "action": "set-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "set-host-sources": [ + { + "action": "set-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ] + }, + "user": { + "add-accounts": [ + { + "action": "add-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "remove-accounts": [ + { + "action": "remove-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "set-accounts": [ + { + "action": "set-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + } + ] + }, + "worker": { + "add-worker-tags": [ + { + "action": "add-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "create:controller-led": [ + { + "action": "create:controller-led", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "create:worker-led": [ + { + "action": "create:worker-led", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "read-certificate-authority": [ + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "reinitialize-certificate-authority": [ + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "remove-worker-tags": [ + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "set-worker-tags": [ + { + "action": "set-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ] + } + }, + "max_size": 296148, + "msg": "controller api rate limiter" + }, + "op": "controller.(rateLimiterConfig).writeSysEvent", + "version": "v0.1" + }, + "datacontentype": "application/cloudevents" +} diff --git a/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/disabled.json b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/disabled.json new file mode 100644 index 000000000..d1e97eb24 --- /dev/null +++ b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/disabled.json @@ -0,0 +1,15 @@ +{ + "id": "", + "source": "https://hashicorp.com/boundary/Test_rateLimiterConfig_writeSysEvent", + "specversion": "1.0", + "type": "system", + "data": { + "data": { + "disabled": true, + "msg": "controller api rate limiter" + }, + "op": "controller.(rateLimiterConfig).writeSysEvent", + "version": "v0.1" + }, + "datacontentype": "application/cloudevents" +} diff --git a/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/max_size.json b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/max_size.json new file mode 100644 index 000000000..91216ea14 --- /dev/null +++ b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/max_size.json @@ -0,0 +1,3903 @@ +{ + "id": "", + "source": "https://hashicorp.com/boundary/Test_rateLimiterConfig_writeSysEvent", + "specversion": "1.0", + "type": "system", + "data": { + "data": { + "limits": { + "account": { + "change-password": [ + { + "action": "change-password", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "set-password": [ + { + "action": "set-password", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "account", + "unlimited": false + } + ] + }, + "auth-method": { + "authenticate": [ + { + "action": "authenticate", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "change-state": [ + { + "action": "change-state", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-method", + "unlimited": false + } + ] + }, + "auth-token": { + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "delete:self": [ + { + "action": "delete:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "auth-token", + "unlimited": false + } + ] + }, + "credential": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential", + "unlimited": false + } + ] + }, + "credential-library": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-library", + "unlimited": false + } + ] + }, + "credential-store": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "credential-store", + "unlimited": false + } + ] + }, + "group": { + "add-members": [ + { + "action": "add-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "remove-members": [ + { + "action": "remove-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "set-members": [ + { + "action": "set-members", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "group", + "unlimited": false + } + ] + }, + "host": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host", + "unlimited": false + } + ] + }, + "host-catalog": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-catalog", + "unlimited": false + } + ] + }, + "host-set": { + "add-hosts": [ + { + "action": "add-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "remove-hosts": [ + { + "action": "remove-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "set-hosts": [ + { + "action": "set-hosts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "host-set", + "unlimited": false + } + ] + }, + "managed-group": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "managed-group", + "unlimited": false + } + ] + }, + "role": { + "add-grants": [ + { + "action": "add-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "add-principals": [ + { + "action": "add-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "remove-grants": [ + { + "action": "remove-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "remove-principals": [ + { + "action": "remove-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "set-grants": [ + { + "action": "set-grants", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "set-principals": [ + { + "action": "set-principals", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "role", + "unlimited": false + } + ] + }, + "scope": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "destroy-key-version": [ + { + "action": "destroy-key-version", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list-key-version-destruction-jobs": [ + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "list-keys": [ + { + "action": "list-keys", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "rotate-keys": [ + { + "action": "rotate-keys", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "scope", + "unlimited": false + } + ] + }, + "session": { + "cancel": [ + { + "action": "cancel", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "cancel:self": [ + { + "action": "cancel:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session", + "unlimited": false + } + ] + }, + "session-recording": { + "download": [ + { + "action": "download", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "session-recording", + "unlimited": false + } + ] + }, + "storage-bucket": { + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "storage-bucket", + "unlimited": false + } + ] + }, + "target": { + "add-credential-sources": [ + { + "action": "add-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "add-host-sources": [ + { + "action": "add-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "authorize-session": [ + { + "action": "authorize-session", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "remove-credential-sources": [ + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "remove-host-sources": [ + { + "action": "remove-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "set-credential-sources": [ + { + "action": "set-credential-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "set-host-sources": [ + { + "action": "set-host-sources", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "target", + "unlimited": false + } + ] + }, + "user": { + "add-accounts": [ + { + "action": "add-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "remove-accounts": [ + { + "action": "remove-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "set-accounts": [ + { + "action": "set-accounts", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "user", + "unlimited": false + } + ] + }, + "worker": { + "add-worker-tags": [ + { + "action": "add-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "create:controller-led": [ + { + "action": "create:controller-led", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "create:worker-led": [ + { + "action": "create:worker-led", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 60, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 60, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "read-certificate-authority": [ + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "reinitialize-certificate-authority": [ + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "remove-worker-tags": [ + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "set-worker-tags": [ + { + "action": "set-worker-tags", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 3000, + "per": "total", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "auth-token", + "period": "30s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 3000, + "per": "ip-address", + "period": "30s", + "resource": "worker", + "unlimited": false + } + ] + } + }, + "max_size": 3000, + "msg": "controller api rate limiter" + }, + "op": "controller.(rateLimiterConfig).writeSysEvent", + "version": "v0.1" + }, + "datacontentype": "application/cloudevents" +} diff --git a/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/override.json b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/override.json new file mode 100644 index 000000000..c3ec2d340 --- /dev/null +++ b/internal/daemon/controller/testdata/Test_rateLimiterConfig_writeSysEvent/override.json @@ -0,0 +1,3903 @@ +{ + "id": "", + "source": "https://hashicorp.com/boundary/Test_rateLimiterConfig_writeSysEvent", + "specversion": "1.0", + "type": "system", + "data": { + "data": { + "limits": { + "account": { + "change-password": [ + { + "action": "change-password", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "change-password", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "set-password": [ + { + "action": "set-password", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "set-password", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "account", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "account", + "unlimited": false + } + ] + }, + "auth-method": { + "authenticate": [ + { + "action": "authenticate", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "authenticate", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "change-state": [ + { + "action": "change-state", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "change-state", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-method", + "unlimited": false + } + ] + }, + "auth-token": { + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ], + "delete:self": [ + { + "action": "delete:self", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "delete:self", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + }, + { + "action": "read:self", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "auth-token", + "unlimited": false + } + ] + }, + "credential": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential", + "unlimited": false + } + ] + }, + "credential-library": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-library", + "unlimited": false + } + ] + }, + "credential-store": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "credential-store", + "unlimited": false + } + ] + }, + "group": { + "add-members": [ + { + "action": "add-members", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "add-members", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "remove-members": [ + { + "action": "remove-members", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "remove-members", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "set-members": [ + { + "action": "set-members", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "set-members", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "group", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "group", + "unlimited": false + } + ] + }, + "host": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host", + "unlimited": false + } + ] + }, + "host-catalog": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-catalog", + "unlimited": false + } + ] + }, + "host-set": { + "add-hosts": [ + { + "action": "add-hosts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "add-hosts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "remove-hosts": [ + { + "action": "remove-hosts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "remove-hosts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "set-hosts": [ + { + "action": "set-hosts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "set-hosts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "host-set", + "unlimited": false + } + ] + }, + "managed-group": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "managed-group", + "unlimited": false + } + ] + }, + "role": { + "add-grants": [ + { + "action": "add-grants", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-grants", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "add-principals": [ + { + "action": "add-principals", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "add-principals", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "remove-grants": [ + { + "action": "remove-grants", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-grants", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "remove-principals": [ + { + "action": "remove-principals", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "remove-principals", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "set-grants": [ + { + "action": "set-grants", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-grants", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "set-principals": [ + { + "action": "set-principals", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "set-principals", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "role", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "role", + "unlimited": false + } + ] + }, + "scope": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "destroy-key-version": [ + { + "action": "destroy-key-version", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "destroy-key-version", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "list-key-version-destruction-jobs": [ + { + "action": "list-key-version-destruction-jobs", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-key-version-destruction-jobs", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "list-keys": [ + { + "action": "list-keys", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "list-keys", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "rotate-keys": [ + { + "action": "rotate-keys", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "rotate-keys", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "scope", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "scope", + "unlimited": false + } + ] + }, + "session": { + "cancel": [ + { + "action": "cancel", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ], + "cancel:self": [ + { + "action": "cancel:self", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "cancel:self", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ], + "read:self": [ + { + "action": "read:self", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session", + "unlimited": false + }, + { + "action": "read:self", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session", + "unlimited": false + } + ] + }, + "session-recording": { + "download": [ + { + "action": "download", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "download", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "session-recording", + "unlimited": false + } + ] + }, + "storage-bucket": { + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "storage-bucket", + "unlimited": false + } + ] + }, + "target": { + "add-credential-sources": [ + { + "action": "add-credential-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-credential-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "add-host-sources": [ + { + "action": "add-host-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "add-host-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "authorize-session": [ + { + "action": "authorize-session", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "authorize-session", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "remove-credential-sources": [ + { + "action": "remove-credential-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-credential-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "remove-host-sources": [ + { + "action": "remove-host-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "remove-host-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "set-credential-sources": [ + { + "action": "set-credential-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-credential-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "set-host-sources": [ + { + "action": "set-host-sources", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "set-host-sources", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "target", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "target", + "unlimited": false + } + ] + }, + "user": { + "add-accounts": [ + { + "action": "add-accounts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "add-accounts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "create": [ + { + "action": "create", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "create", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "remove-accounts": [ + { + "action": "remove-accounts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "remove-accounts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "set-accounts": [ + { + "action": "set-accounts", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "set-accounts", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "user", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "user", + "unlimited": false + } + ] + }, + "worker": { + "add-worker-tags": [ + { + "action": "add-worker-tags", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "add-worker-tags", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "create:controller-led": [ + { + "action": "create:controller-led", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:controller-led", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "create:worker-led": [ + { + "action": "create:worker-led", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "create:worker-led", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "delete": [ + { + "action": "delete", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "delete", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "list": [ + { + "action": "list", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "list", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "no-op": [ + { + "action": "no-op", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "no-op", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "read": [ + { + "action": "read", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "read-certificate-authority": [ + { + "action": "read-certificate-authority", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "read-certificate-authority", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "reinitialize-certificate-authority": [ + { + "action": "reinitialize-certificate-authority", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "reinitialize-certificate-authority", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "remove-worker-tags": [ + { + "action": "remove-worker-tags", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "remove-worker-tags", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "set-worker-tags": [ + { + "action": "set-worker-tags", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "set-worker-tags", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ], + "update": [ + { + "action": "update", + "limit": 100, + "per": "total", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "auth-token", + "period": "1m0s", + "resource": "worker", + "unlimited": false + }, + { + "action": "update", + "limit": 100, + "per": "ip-address", + "period": "1m0s", + "resource": "worker", + "unlimited": false + } + ] + } + }, + "max_size": 296148, + "msg": "controller api rate limiter" + }, + "op": "controller.(rateLimiterConfig).writeSysEvent", + "version": "v0.1" + }, + "datacontentype": "application/cloudevents" +}