Skip to content

Commit 3c84487

Browse files
feat(secure-policies): support new fields in drift policy (#656)
* Add support for additional secure drift policy fields * Address review comments * Fixed spacing issue --------- Co-authored-by: Fede Barcelona <[email protected]>
1 parent 5a95972 commit 3c84487

8 files changed

+152
-24
lines changed

sysdig/data_source_sysdig_secure_drift_policy.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,18 @@ func createDriftPolicyDataSourceSchema() map[string]*schema.Schema {
4747
Computed: true,
4848
Elem: &schema.Resource{
4949
Schema: map[string]*schema.Schema{
50-
"id": ReadOnlyIntSchema(),
51-
"name": ReadOnlyStringSchema(),
52-
"description": DescriptionComputedSchema(),
53-
"tags": TagsSchema(),
54-
"version": VersionSchema(),
55-
"enabled": BoolComputedSchema(),
56-
"exceptions": ExceptionsComputedSchema(),
57-
"prohibited_binaries": ExceptionsComputedSchema(),
58-
"mounted_volume_drift_enabled": BoolComputedSchema(),
50+
"id": ReadOnlyIntSchema(),
51+
"name": ReadOnlyStringSchema(),
52+
"description": DescriptionComputedSchema(),
53+
"tags": TagsSchema(),
54+
"version": VersionSchema(),
55+
"enabled": BoolComputedSchema(),
56+
"exceptions": ExceptionsComputedSchema(),
57+
"prohibited_binaries": ExceptionsComputedSchema(),
58+
"process_based_exceptions": ExceptionsComputedSchema(),
59+
"process_based_prohibited_binaries": ExceptionsComputedSchema(),
60+
"mounted_volume_drift_enabled": BoolComputedSchema(),
61+
"use_regex": BoolComputedSchema(),
5962
},
6063
},
6164
},

sysdig/data_source_sysdig_secure_drift_policy_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ func TestAccDriftPolicyDataSource(t *testing.T) {
3232
{
3333
Config: driftPolicyDataSource(rText),
3434
},
35+
{
36+
Config: driftPolicyWithUseRegexDataSource(rText),
37+
},
38+
{
39+
Config: driftPolicyWithProcessExceptionsDataSource(rText),
40+
},
3541
},
3642
})
3743
}
@@ -68,3 +74,78 @@ data "sysdig_secure_drift_policy" "policy_2" {
6874
}
6975
`, name, name)
7076
}
77+
78+
func driftPolicyWithUseRegexDataSource(name string) string {
79+
return fmt.Sprintf(`
80+
resource "sysdig_secure_drift_policy" "policy_1" {
81+
name = "Test Drift Policy %s"
82+
description = "Test Drift Policy Description %s"
83+
enabled = true
84+
severity = 4
85+
86+
rule {
87+
description = "Test Drift Rule Description"
88+
enabled = true
89+
mounted_volume_drift_enabled = true
90+
use_regex = true
91+
92+
exceptions {
93+
items = ["/usr/bin/sh"]
94+
}
95+
prohibited_binaries {
96+
items = ["/usr/bin/curl"]
97+
}
98+
process_based_exceptions {
99+
items = ["/usr/bin/curl"]
100+
}
101+
process_based_prohibited_binaries {
102+
items = ["/usr/bin/sh"]
103+
}
104+
}
105+
106+
actions {
107+
prevent_drift = true
108+
}
109+
110+
}
111+
112+
data "sysdig_secure_drift_policy" "policy_2" {
113+
name = sysdig_secure_drift_policy.policy_1.name
114+
depends_on = [sysdig_secure_drift_policy.policy_1]
115+
}
116+
`, name, name)
117+
}
118+
119+
func driftPolicyWithProcessExceptionsDataSource(name string) string {
120+
return fmt.Sprintf(`
121+
resource "sysdig_secure_drift_policy" "policy_1" {
122+
name = "Test Drift Policy %s"
123+
description = "Test Drift Policy Description %s"
124+
enabled = true
125+
severity = 4
126+
127+
rule {
128+
description = "Test Drift Rule Description"
129+
enabled = true
130+
mounted_volume_drift_enabled = true
131+
132+
process_based_exceptions {
133+
items = ["/usr/bin/curl"]
134+
}
135+
process_based_prohibited_binaries {
136+
items = ["/usr/bin/sh"]
137+
}
138+
}
139+
140+
actions {
141+
prevent_drift = true
142+
}
143+
144+
}
145+
146+
data "sysdig_secure_drift_policy" "policy_2" {
147+
name = sysdig_secure_drift_policy.policy_1.name
148+
depends_on = [sysdig_secure_drift_policy.policy_1]
149+
}
150+
`, name, name)
151+
}

sysdig/internal/client/v2/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ type DriftRuleDetails struct {
419419
ProhibitedBinaries *RuntimePolicyRuleList `json:"prohibitedBinaries"`
420420
Mode string `json:"mode"`
421421
MountedVolumeDriftEnabled bool `json:"mountedVolumeDriftEnabled"`
422+
UseRegex bool `json:"useRegex"`
422423
Details `json:"-"`
423424
}
424425

sysdig/resource_sysdig_secure_drift_policy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ func resourceSysdigSecureDriftPolicy() *schema.Resource {
6767
"process_based_exceptions": ExceptionsSchema(),
6868
"process_based_prohibited_binaries": ExceptionsSchema(),
6969
"mounted_volume_drift_enabled": BoolSchema(),
70+
"use_regex": BoolSchema(),
7071
},
7172
},
7273
},

sysdig/resource_sysdig_secure_drift_policy_test.go

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ func TestAccDriftPolicy(t *testing.T) {
4242
{
4343
Config: driftPolicyWithMountedVolumeDriftEnabled(rText()),
4444
},
45+
{
46+
Config: driftPolicyWithProcessBasedAndRegexEnabled(rText()),
47+
},
4548
},
4649
})
4750
}
@@ -67,9 +70,9 @@ resource "sysdig_secure_drift_policy" "sample" {
6770
prohibited_binaries {
6871
items = ["/usr/bin/curl"]
6972
}
70-
process_based_exceptions {
73+
process_based_exceptions {
7174
items = ["/usr/bin/curl"]
72-
}
75+
}
7376
}
7477
7578
actions {
@@ -103,9 +106,9 @@ resource "sysdig_secure_drift_policy" "sample" {
103106
prohibited_binaries {
104107
items = ["/usr/bin/curl"]
105108
}
106-
process_based_exceptions {
109+
process_based_exceptions {
107110
items = ["/usr/bin/curl"]
108-
}
111+
}
109112
}
110113
111114
actions {
@@ -145,9 +148,9 @@ resource "sysdig_secure_drift_policy" "sample" {
145148
prohibited_binaries {
146149
items = ["/usr/bin/curl"]
147150
}
148-
process_based_exceptions {
151+
process_based_exceptions {
149152
items = ["/usr/bin/curl"]
150-
}
153+
}
151154
}
152155
153156
actions {}
@@ -177,9 +180,9 @@ resource "sysdig_secure_drift_policy" "sample" {
177180
prohibited_binaries {
178181
items = ["/usr/bin/curl"]
179182
}
180-
process_based_exceptions {
183+
process_based_exceptions {
181184
items = ["/usr/bin/curl"]
182-
}
185+
}
183186
}
184187
185188
actions {
@@ -228,18 +231,52 @@ resource "sysdig_secure_drift_policy" "sample" {
228231
rule {
229232
description = "Test Drift Rule Description"
230233
mounted_volume_drift_enabled = true
234+
231235
enabled = true
236+
237+
exceptions {
238+
items = ["/usr/bin/sh"]
239+
}
240+
prohibited_binaries {
241+
items = ["/usr/bin/curl"]
242+
}
243+
process_based_exceptions {
244+
items = ["/usr/bin/curl"]
245+
}
246+
}
247+
}
248+
`, name)
249+
}
250+
251+
func driftPolicyWithProcessBasedAndRegexEnabled(name string) string {
252+
return fmt.Sprintf(`
253+
resource "sysdig_secure_drift_policy" "sample" {
254+
255+
name = "Test Drift Policy %s"
256+
description = "Test Drift Policy Description"
257+
enabled = true
258+
severity = 4
232259
260+
rule {
261+
description = "Test Drift Rule Description"
262+
mounted_volume_drift_enabled = true
263+
264+
enabled = true
265+
use_regex = true
266+
233267
exceptions {
234268
items = ["/usr/bin/sh"]
235269
}
236270
prohibited_binaries {
237271
items = ["/usr/bin/curl"]
238272
}
239-
process_based_exceptions {
273+
process_based_exceptions {
240274
items = ["/usr/bin/curl"]
241275
}
242-
}
276+
process_based_prohibited_binaries {
277+
items = ["/usr/bin/sh"]
278+
}
279+
}
243280
}
244281
`, name)
245282
}

sysdig/tfresource.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ func setTFResourcePolicyRulesDrift(d *schema.ResourceData, policy v2.PolicyRules
216216
"tags": rule.Tags,
217217
"enabled": enabled,
218218
"mounted_volume_drift_enabled": driftDetails.MountedVolumeDriftEnabled,
219+
"use_regex": driftDetails.UseRegex,
219220
}
220221

221222
if exceptionsBlock != nil {
@@ -498,6 +499,7 @@ func setPolicyRulesDrift(policy *v2.PolicyRulesComposite, d *schema.ResourceData
498499
}
499500

500501
mountedVolumeDriftEnabled := d.Get("rule.0.mounted_volume_drift_enabled").(bool)
502+
useRegex := d.Get("rule.0.use_regex").(bool)
501503

502504
rule := &v2.RuntimePolicyRule{
503505
// TODO: Do not hardcode the indexes
@@ -512,6 +514,7 @@ func setPolicyRulesDrift(policy *v2.PolicyRulesComposite, d *schema.ResourceData
512514
ProcessBasedExceptions: &processBasedExceptions,
513515
ProcessBasedDenylist: &processBasedProhibitedBinaries,
514516
MountedVolumeDriftEnabled: mountedVolumeDriftEnabled,
517+
UseRegex: useRegex,
515518
},
516519
}
517520

website/docs/d/secure_drift_policy.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,9 @@ The rule block is required and supports:
7878
* `items` - (Required) Specify comma separated list of exceptions, e.g. `/usr/bin/rm, /usr/bin/curl`.
7979
* `prohibited_binaries` - (Optional) A prohibited binary can be a known harmful binary or one that facilitates discovery of your environment.
8080
* `items` - (Required) Specify comma separated list of prohibited binaries, e.g. `/usr/bin/rm, /usr/bin/curl`.
81-
82-
81+
* `process_based_exceptions` - (Optional) List of processes that will be able to execute a drifted file
82+
* `items` - (Required) Specify comma separated list of processes, e.g. `/usr/bin/rm, /usr/bin/curl`.
83+
* `process_based_prohibited_binaries` - (Optional) List of processes that will be prohibited to execute a drifted file
84+
* `items` - (Required) Specify comma separated list of processes, e.g. `/usr/bin/rm, /usr/bin/curl`.
85+
* `mounted_volume_drift_enabled` - (Optional) Treat all binaries from mounted volumes as drifted. Default value is false/disabled.
86+
* `use_regex` - (Optional) Pass exceptions and prohibited binaries as regex strings. Requires agent version 13.2.0 and above

website/docs/r/secure_drift_policy.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,4 @@ The rule block is required and supports:
123123
* `process_based_prohibited_binaries` - (Optional) List of processes that will be prohibited to execute a drifted file
124124
* `items` - (Required) Specify comma separated list of processes, e.g. `/usr/bin/rm, /usr/bin/curl`.
125125
* `mounted_volume_drift_enabled` - (Optional) Treat all binaries from mounted volumes as drifted. Default value is false/disabled.
126-
127-
128-
126+
* `use_regex` - (Optional) Pass exceptions and prohibited binaries as regex strings. Requires agent version 13.2.0 and above

0 commit comments

Comments
 (0)