Skip to content

Commit 72bed50

Browse files
authored
Merge branch 'master' into pasa/api-dest/update-cling-assets-call
2 parents f52da58 + bbaf485 commit 72bed50

13 files changed

+584
-26
lines changed

sysdig/data_source_sysdig_secure_managed_policy_test.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package sysdig_test
44

55
import (
66
"os"
7+
"strings"
78
"testing"
89

910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
@@ -13,6 +14,18 @@ import (
1314
)
1415

1516
func TestAccManagedPolicyDataSource(t *testing.T) {
17+
steps := []resource.TestStep{
18+
{
19+
Config: managedPolicyDataSource(),
20+
},
21+
}
22+
23+
if !strings.HasSuffix(os.Getenv("SYSDIG_SECURE_URL"), "ibm.com") {
24+
steps = append(steps, resource.TestStep{
25+
Config: managedStatefulPolicyDataSource(),
26+
},
27+
)
28+
}
1629
resource.ParallelTest(t, resource.TestCase{
1730
PreCheck: func() {
1831
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
@@ -24,11 +37,7 @@ func TestAccManagedPolicyDataSource(t *testing.T) {
2437
return sysdig.Provider(), nil
2538
},
2639
},
27-
Steps: []resource.TestStep{
28-
{
29-
Config: managedPolicyDataSource(),
30-
},
31-
},
40+
Steps: steps,
3241
})
3342
}
3443

@@ -40,3 +49,12 @@ data "sysdig_secure_managed_policy" "example" {
4049
}
4150
`
4251
}
52+
53+
func managedStatefulPolicyDataSource() string {
54+
return `
55+
data "sysdig_secure_managed_policy" "stateful_example" {
56+
name = "Sysdig AWS Behavioral Analytics Threat Detection"
57+
type = "awscloudtrail_stateful"
58+
}
59+
`
60+
}

sysdig/internal/client/v2/model.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,12 +520,15 @@ type Rule struct {
520520
}
521521

522522
const (
523-
RuleTypeContainer = "CONTAINER"
524-
RuleTypeFalco = "FALCO"
525-
RuleTypeFilesystem = "FILESYSTEM"
526-
RuleTypeNetwork = "NETWORK"
527-
RuleTypeProcess = "PROCESS"
528-
RuleTypeSyscall = "SYSCALL"
523+
RuleTypeContainer = "CONTAINER"
524+
RuleTypeFalco = "FALCO"
525+
RuleTypeFilesystem = "FILESYSTEM"
526+
RuleTypeNetwork = "NETWORK"
527+
RuleTypeProcess = "PROCESS"
528+
RuleTypeSyscall = "SYSCALL"
529+
RuleTypeStatefulSequence = "STATEFUL_SEQUENCE"
530+
RuleTypeStatefulUniqPercent = "STATEFUL_UNIQ_PERCENT"
531+
RuleTypeStatefulCount = "STATEFUL_COUNT"
529532
)
530533

531534
type Details struct {

sysdig/internal/client/v2/rules.go

Lines changed: 95 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ import (
88
)
99

1010
const (
11-
CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12-
GetRuleByIDPath = "%s/api/secure/rules/%d"
13-
UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14-
DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15-
GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
11+
CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12+
GetRuleByIDPath = "%s/api/secure/rules/%d"
13+
UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14+
DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15+
GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
16+
CreateStatefulRulePath = "%s/api/policies/v3/statefulRules"
17+
UpdateStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
18+
DeleteStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
19+
GetStatefulRuleGroupPath = "%s/api/policies/v3/statefulRules/groups?name=%s&type=%s"
1620
)
1721

1822
type RuleInterface interface {
@@ -22,6 +26,10 @@ type RuleInterface interface {
2226
UpdateRule(ctx context.Context, rule Rule) (Rule, error)
2327
DeleteRule(ctx context.Context, ruleID int) error
2428
GetRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error)
29+
CreateStatefulRule(ctx context.Context, rule Rule) (Rule, error)
30+
UpdateStatefulRule(ctx context.Context, rule Rule) (Rule, error)
31+
DeleteStatefulRule(ctx context.Context, ruleID int) error
32+
GetStatefulRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error)
2533
}
2634

2735
func (client *Client) CreateRule(ctx context.Context, rule Rule) (Rule, error) {
@@ -125,3 +133,85 @@ func (client *Client) DeleteRuleURL(ruleID int) string {
125133
func (client *Client) GetRuleGroupURL(ruleName string, ruleType string) string {
126134
return fmt.Sprintf(GetRuleGroupPath, client.config.url, url.QueryEscape(ruleName), url.QueryEscape(ruleType))
127135
}
136+
137+
func (client *Client) CreateStatefulRuleURL() string {
138+
return fmt.Sprintf(CreateStatefulRulePath, client.config.url)
139+
}
140+
141+
func (client *Client) UpdateStatefulRuleURL(ruleID int) string {
142+
return fmt.Sprintf(UpdateStatefulRulePath, client.config.url, ruleID)
143+
}
144+
145+
func (client *Client) DeleteStatefulRuleURL(ruleID int) string {
146+
return fmt.Sprintf(DeleteStatefulRulePath, client.config.url, ruleID)
147+
}
148+
149+
func (client *Client) GetStatefulRuleGroupURL(ruleName string, ruleType string) string {
150+
return fmt.Sprintf(GetStatefulRuleGroupPath, client.config.url, url.QueryEscape(ruleName), url.QueryEscape(ruleType))
151+
}
152+
153+
func (client *Client) CreateStatefulRule(ctx context.Context, rule Rule) (Rule, error) {
154+
payload, err := Marshal(rule)
155+
if err != nil {
156+
return Rule{}, err
157+
}
158+
response, err := client.requester.Request(ctx, http.MethodPost, client.CreateStatefulRuleURL(), payload)
159+
if err != nil {
160+
return Rule{}, err
161+
}
162+
defer response.Body.Close()
163+
164+
if response.StatusCode != http.StatusOK {
165+
return Rule{}, client.ErrorFromResponse(response)
166+
}
167+
168+
return Unmarshal[Rule](response.Body)
169+
}
170+
171+
func (client *Client) UpdateStatefulRule(ctx context.Context, rule Rule) (Rule, error) {
172+
payload, err := Marshal(rule)
173+
if err != nil {
174+
return Rule{}, err
175+
}
176+
177+
response, err := client.requester.Request(ctx, http.MethodPut, client.UpdateStatefulRuleURL(rule.ID), payload)
178+
if err != nil {
179+
return Rule{}, err
180+
}
181+
182+
defer response.Body.Close()
183+
184+
if response.StatusCode != http.StatusOK {
185+
return Rule{}, client.ErrorFromResponse(response)
186+
}
187+
188+
return Unmarshal[Rule](response.Body)
189+
}
190+
191+
func (client *Client) DeleteStatefulRule(ctx context.Context, ruleID int) error {
192+
response, err := client.requester.Request(ctx, http.MethodDelete, client.DeleteStatefulRuleURL(ruleID), nil)
193+
if err != nil {
194+
return err
195+
}
196+
defer response.Body.Close()
197+
198+
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
199+
return client.ErrorFromResponse(response)
200+
}
201+
202+
return err
203+
}
204+
205+
func (client *Client) GetStatefulRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error) {
206+
response, err := client.requester.Request(ctx, http.MethodGet, client.GetStatefulRuleGroupURL(ruleName, ruleType), nil)
207+
if err != nil {
208+
return []Rule{}, err
209+
}
210+
defer response.Body.Close()
211+
212+
if response.StatusCode != http.StatusOK {
213+
return []Rule{}, client.ErrorFromResponse(response)
214+
}
215+
216+
return Unmarshal[[]Rule](response.Body)
217+
}

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
148148
"sysdig_secure_rule_process": resourceSysdigSecureRuleProcess(),
149149
"sysdig_secure_rule_syscall": resourceSysdigSecureRuleSyscall(),
150150
"sysdig_secure_rule_falco": resourceSysdigSecureRuleFalco(),
151+
"sysdig_secure_rule_stateful": resourceSysdigSecureStatefulRule(),
151152
"sysdig_secure_team": resourceSysdigSecureTeam(),
152153
"sysdig_secure_list": resourceSysdigSecureList(),
153154
"sysdig_secure_macro": resourceSysdigSecureMacro(),

sysdig/resource_sysdig_secure_managed_policy_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ resource "sysdig_secure_managed_policy" "sample" {
5656
name = "Sysdig Runtime Threat Detection"
5757
enabled = true
5858
scope = "container.id != \"\""
59-
disabled_rules = ["Dump memory for credentials"]
59+
disabled_rules = ["Hexadecimal string detected"]
6060
runbook = "https://sysdig.com"
6161
6262
actions {
@@ -80,7 +80,7 @@ resource "sysdig_secure_managed_policy" "sample" {
8080
name = "Sysdig Runtime Threat Detection"
8181
enabled = true
8282
scope = "container.id != \"\""
83-
disabled_rules = ["Dump memory for credentials"]
83+
disabled_rules = ["Hexadecimal string detected"]
8484
runbook = "https://sysdig.com"
8585
8686
actions {}
@@ -96,7 +96,7 @@ resource "sysdig_secure_managed_policy" "sample" {
9696
name = "Sysdig Runtime Threat Detection"
9797
enabled = true
9898
scope = "container.id != \"\""
99-
disabled_rules = ["Dump memory for credentials"]
99+
disabled_rules = ["Hexadecimal string detected"]
100100
runbook = "https://sysdig.com"
101101
102102
actions {
@@ -123,7 +123,7 @@ func managedPolicyWithKillAction() string {
123123
name = "Sysdig Runtime Threat Detection"
124124
enabled = true
125125
scope = "container.id != \"\""
126-
disabled_rules = ["Dump memory for credentials"]
126+
disabled_rules = ["Hexadecimal string detected"]
127127
runbook = "https://sysdig.com"
128128
129129
actions {

sysdig/resource_sysdig_secure_managed_ruleset_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ resource "sysdig_secure_managed_ruleset" "sample" {
6666
}
6767
enabled = true
6868
scope = "container.id != \"\""
69-
disabled_rules = ["Dump memory for credentials"]
69+
disabled_rules = ["Hexadecimal string detected"]
7070
runbook = "https://sysdig.com"
7171
7272
actions {
@@ -95,7 +95,7 @@ resource "sysdig_secure_managed_ruleset" "sample" {
9595
}
9696
enabled = true
9797
scope = "container.id != \"\""
98-
disabled_rules = ["Dump memory for credentials"]
98+
disabled_rules = ["Hexadecimal string detected"]
9999
runbook = "https://sysdig.com"
100100
101101
actions {}
@@ -116,7 +116,7 @@ resource "sysdig_secure_managed_ruleset" "sample" {
116116
}
117117
enabled = true
118118
scope = "container.id != \"\""
119-
disabled_rules = ["Dump memory for credentials"]
119+
disabled_rules = ["Hexadecimal string detected"]
120120
runbook = "https://sysdig.com"
121121
122122
actions {
@@ -154,7 +154,7 @@ resource "sysdig_secure_managed_ruleset" "sample" {
154154
}
155155
enabled = true
156156
scope = "container.id != \"\""
157-
disabled_rules = ["Dump memory for credentials"]
157+
disabled_rules = ["Hexadecimal string detected"]
158158
runbook = "https://sysdig.com"
159159
160160
actions {

sysdig/resource_sysdig_secure_policy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var validatePolicyType = validation.StringInSlice([]string{
3333
"aws_machine_learning",
3434
"machine_learning",
3535
"guardduty",
36+
"awscloudtrail_stateful",
3637
}, false)
3738

3839
func resourceSysdigSecurePolicy() *schema.Resource {

0 commit comments

Comments
 (0)