Skip to content

Commit 7af6e90

Browse files
wnoonanekristen
andauthored
feat(network-firewall): support network firewall resources (#713)
* feat(network-firewall): network firewall resources to handle deleting with logging configurations * chore(docs): updating cloud control docs * chore: aws sdk v2 update, removing legacy tests and mocks, undoing cloud control changes * chore: reverting cloud control docs * chore: remove logging config from cloud control * Update resources/network-firewall-logging-configuration.go Co-authored-by: Erik Kristensen <[email protected]> * fix: remove redundant checks in Properties method * chore: rename to ARN and Name props on firewall resources * chore: removing loggingConfig prop and returning name on String --------- Co-authored-by: Erik Kristensen <[email protected]>
1 parent c772803 commit 7af6e90

File tree

6 files changed

+364
-22
lines changed

6 files changed

+364
-22
lines changed

go.mod

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ toolchain go1.24.5
66

77
require (
88
github.com/aws/aws-sdk-go v1.55.7
9-
github.com/aws/aws-sdk-go-v2 v1.37.1
9+
github.com/aws/aws-sdk-go-v2 v1.37.2
1010
github.com/aws/aws-sdk-go-v2/config v1.28.11
1111
github.com/aws/aws-sdk-go-v2/credentials v1.17.68
1212
github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.12
@@ -15,10 +15,12 @@ require (
1515
github.com/aws/aws-sdk-go-v2/service/docdb v1.41.4
1616
github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.15.2
1717
github.com/aws/aws-sdk-go-v2/service/dsql v1.1.2
18+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.239.0
1819
github.com/aws/aws-sdk-go-v2/service/ecs v1.54.6
1920
github.com/aws/aws-sdk-go-v2/service/efs v1.35.4
2021
github.com/aws/aws-sdk-go-v2/service/iam v1.38.10
2122
github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.17.3
23+
github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.53.0
2224
github.com/aws/aws-sdk-go-v2/service/route53profiles v1.4.17
2325
github.com/aws/aws-sdk-go-v2/service/s3 v1.72.3
2426
github.com/aws/aws-sdk-go-v2/service/s3control v1.52.7
@@ -44,11 +46,10 @@ require (
4446
require (
4547
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
4648
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
47-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.1 // indirect
48-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.1 // indirect
49+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2 // indirect
50+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2 // indirect
4951
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
5052
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.27 // indirect
51-
github.com/aws/aws-sdk-go-v2/service/ec2 v1.239.0 // indirect
5253
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 // indirect
5354
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.8 // indirect
5455
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.1 // indirect

go.sum

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE=
22
github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
3-
github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
4-
github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
5-
github.com/aws/aws-sdk-go-v2 v1.37.1 h1:SMUxeNz3Z6nqGsXv0JuJXc8w5YMtrQMuIBmDx//bBDY=
6-
github.com/aws/aws-sdk-go-v2 v1.37.1/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg=
3+
github.com/aws/aws-sdk-go-v2 v1.37.2 h1:xkW1iMYawzcmYFYEV0UCMxc8gSsjCGEhBXQkdQywVbo=
4+
github.com/aws/aws-sdk-go-v2 v1.37.2/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg=
75
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
86
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
97
github.com/aws/aws-sdk-go-v2/config v1.28.11 h1:7Ekru0IkRHRnSRWGQLnLN6i0o1Jncd0rHo2T130+tEQ=
@@ -12,14 +10,10 @@ github.com/aws/aws-sdk-go-v2/credentials v1.17.68 h1:cFb9yjI02/sWHBSYXAtkamjzCuR
1210
github.com/aws/aws-sdk-go-v2/credentials v1.17.68/go.mod h1:H6E+jBzyqUu8u0vGaU6POkK3P0NylYEeRZ6ynBpMqIk=
1311
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
1412
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M=
15-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
16-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY=
17-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.1 h1:ksZXBYv80EFTcgc8OJO48aQ8XDWXIQL7gGasPeCoTzI=
18-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.1/go.mod h1:HSksQyyJETVZS7uM54cir0IgxttTD+8aEoJMPGepHBI=
19-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0=
20-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q=
21-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.1 h1:+dn/xF/05utS7tUhjIcndbuaPjfll2LhbH1cCDGLYUQ=
22-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.1/go.mod h1:hyAGz30LHdm5KBZDI58MXx5lDVZ5CUfvfTZvMu4HCZo=
13+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2 h1:sPiRHLVUIIQcoVZTNwqQcdtjkqkPopyYmIX0M5ElRf4=
14+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.2/go.mod h1:ik86P3sgV+Bk7c1tBFCwI3VxMoSEwl4YkRB9xn1s340=
15+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2 h1:ZdzDAg075H6stMZtbD2o+PyB933M/f20e9WmCBC17wA=
16+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.2/go.mod h1:eE1IIzXG9sdZCB0pNNpMpsYTLl4YdOQD3njiVN1e/E4=
2317
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
2418
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
2519
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.27 h1:AmB5QxnD+fBFrg9LcqzkgF/CaYvMyU/BTlejG4t1S7Q=
@@ -44,20 +38,18 @@ github.com/aws/aws-sdk-go-v2/service/efs v1.35.4 h1:QJHwC9X5TxJJGdesIJP65gAsu0gX
4438
github.com/aws/aws-sdk-go-v2/service/efs v1.35.4/go.mod h1:XT6hcgC1HV33EBGPWdXnbgyeqND4k43qX3argLyEZM8=
4539
github.com/aws/aws-sdk-go-v2/service/iam v1.38.10 h1:u/MwkFwRkKRDvy7D76/khJTk8HMp4mC5sZKErU53jos=
4640
github.com/aws/aws-sdk-go-v2/service/iam v1.38.10/go.mod h1:Gid0WEVky3EWbkeXiS67kHhbiK+q3/wO/hvPh7plR0c=
47-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
48-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
4941
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 h1:6+lZi2JeGKtCraAj1rpoZfKqnQ9SptseRZioejfUOLM=
5042
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0/go.mod h1:eb3gfbVIxIoGgJsi9pGne19dhCBpK6opTYpQqAmdy44=
5143
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.8 h1:iwYS40JnrBeA9e9aI5S6KKN4EB2zR4iUVYN0nwVivz4=
5244
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.8/go.mod h1:Fm9Mi+ApqmFiknZtGpohVcBGvpTu542VC4XO9YudRi0=
53-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
54-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
5545
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.1 h1:ky79ysLMxhwk5rxJtS+ILd3Mc8kC5fhsLBrP27r6h4I=
5646
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.1/go.mod h1:+2MmkvFvPYM1vsozBWduoLJUi5maxFk5B7KJFECujhY=
5747
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10 h1:fXoWC2gi7tdJYNTPnnlSGzEVwewUchOi8xVq/dkg8Qs=
5848
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10/go.mod h1:cvzBApD5dVazHU8C2rbBQzzzsKc8m5+wNJ9mCRZLKPc=
5949
github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.17.3 h1:Rmf+YcRUYpa9w5oWhFgqEEUOebYBAjpZZB2wiUdOLgc=
6050
github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.17.3/go.mod h1:y+/vnOi8XZPLM7+4s+70LnVB5I7PK+we8XvjcDvf82Q=
51+
github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.53.0 h1:FHl1QPk+MTUjcbGtnNfcVnq5bPkP71Tbzt++qQ/dCnY=
52+
github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.53.0/go.mod h1:EiHBjTVCeOUX045RTpHUuqrtexp4OtSbMLj+nXiaaHw=
6153
github.com/aws/aws-sdk-go-v2/service/route53profiles v1.4.17 h1:x19QmT0wHVz5v48OqvGY1B18Pdw3Z1XHsc/+eLWRUQ8=
6254
github.com/aws/aws-sdk-go-v2/service/route53profiles v1.4.17/go.mod h1:Fw3q+gxXdlWm/chYEtIbeILj3bqObPLm7fbn/bPUXaE=
6355
github.com/aws/aws-sdk-go-v2/service/s3 v1.72.3 h1:WZOmJfCDV+4tYacLxpiojoAdT5sxTfB3nTqQNtZu+J4=
@@ -74,8 +66,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 h1:oIaQ1e17CSKaWmUTu62MtraRWVI
7466
github.com/aws/aws-sdk-go-v2/service/sts v1.33.20/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
7567
github.com/aws/aws-sdk-go-v2/service/transfer v1.55.5 h1:3CgAcyZciL7KG/8LCEWWoMJfZvgZV2xUzjtNGDlaBVQ=
7668
github.com/aws/aws-sdk-go-v2/service/transfer v1.55.5/go.mod h1:NJBUE6GjnjqSvexXpU0pj/2w+VEhRk5XPL5rRZpj7bI=
77-
github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k=
78-
github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
7969
github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw=
8070
github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
8171
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package resources
2+
3+
import (
4+
"context"
5+
6+
"github.com/gotidy/ptr"
7+
8+
"github.com/aws/aws-sdk-go-v2/aws"
9+
"github.com/aws/aws-sdk-go-v2/service/networkfirewall"
10+
networkfirewalltypes "github.com/aws/aws-sdk-go-v2/service/networkfirewall/types"
11+
12+
"github.com/ekristen/libnuke/pkg/registry"
13+
"github.com/ekristen/libnuke/pkg/resource"
14+
"github.com/ekristen/libnuke/pkg/types"
15+
16+
"github.com/ekristen/aws-nuke/v3/pkg/nuke"
17+
)
18+
19+
const NetworkFirewallLoggingConfigurationResource = "NetworkFirewallLoggingConfiguration"
20+
21+
func init() {
22+
registry.Register(&registry.Registration{
23+
Name: NetworkFirewallLoggingConfigurationResource,
24+
Scope: nuke.Account,
25+
Resource: &NetworkFirewallLoggingConfiguration{},
26+
Lister: &NetworkFirewallLoggingConfigurationLister{},
27+
AlternativeResource: "AWS::NetworkFirewall::LoggingConfiguration",
28+
})
29+
}
30+
31+
type NetworkFirewallLoggingConfigurationLister struct{}
32+
33+
func (l *NetworkFirewallLoggingConfigurationLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) {
34+
opts := o.(*nuke.ListerOpts)
35+
svc := networkfirewall.NewFromConfig(*opts.Config)
36+
resources := make([]resource.Resource, 0)
37+
38+
params := &networkfirewall.ListFirewallsInput{
39+
MaxResults: aws.Int32(100),
40+
}
41+
42+
paginator := networkfirewall.NewListFirewallsPaginator(svc, params)
43+
for paginator.HasMorePages() {
44+
page, err := paginator.NextPage(ctx)
45+
if err != nil {
46+
return nil, err
47+
}
48+
49+
for _, firewall := range page.Firewalls {
50+
loggingParams := &networkfirewall.DescribeLoggingConfigurationInput{
51+
FirewallArn: firewall.FirewallArn,
52+
}
53+
loggingOutput, err := svc.DescribeLoggingConfiguration(ctx, loggingParams)
54+
if err != nil {
55+
if opts.Logger != nil {
56+
opts.Logger.WithError(err).
57+
WithField("firewall-arn", ptr.ToString(firewall.FirewallArn)).
58+
Warn("failed to describe logging configuration, skipping")
59+
}
60+
continue
61+
}
62+
63+
if loggingOutput.LoggingConfiguration != nil && len(loggingOutput.LoggingConfiguration.LogDestinationConfigs) > 0 {
64+
resources = append(resources, &NetworkFirewallLoggingConfiguration{
65+
svc: svc,
66+
accountID: opts.AccountID,
67+
ARN: firewall.FirewallArn,
68+
Name: firewall.FirewallName,
69+
})
70+
}
71+
}
72+
}
73+
74+
return resources, nil
75+
}
76+
77+
type NetworkFirewallLoggingConfiguration struct {
78+
svc *networkfirewall.Client
79+
accountID *string
80+
ARN *string `description:"The ARN of the firewall."`
81+
Name *string `description:"The name of the firewall."`
82+
}
83+
84+
func (r *NetworkFirewallLoggingConfiguration) Filter() error {
85+
return nil
86+
}
87+
88+
func (r *NetworkFirewallLoggingConfiguration) Remove(ctx context.Context) error {
89+
updateParams := &networkfirewall.UpdateLoggingConfigurationInput{
90+
FirewallArn: r.ARN,
91+
LoggingConfiguration: &networkfirewalltypes.LoggingConfiguration{
92+
LogDestinationConfigs: []networkfirewalltypes.LogDestinationConfig{},
93+
},
94+
}
95+
_, err := r.svc.UpdateLoggingConfiguration(ctx, updateParams)
96+
return err
97+
}
98+
99+
func (r *NetworkFirewallLoggingConfiguration) Properties() types.Properties {
100+
return types.NewPropertiesFromStruct(r)
101+
}
102+
103+
func (r *NetworkFirewallLoggingConfiguration) String() string {
104+
return ptr.ToString(r.Name)
105+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package resources
2+
3+
import (
4+
"context"
5+
6+
"github.com/gotidy/ptr"
7+
8+
"github.com/aws/aws-sdk-go-v2/aws"
9+
"github.com/aws/aws-sdk-go-v2/service/networkfirewall"
10+
11+
"github.com/ekristen/libnuke/pkg/registry"
12+
"github.com/ekristen/libnuke/pkg/resource"
13+
"github.com/ekristen/libnuke/pkg/types"
14+
15+
"github.com/ekristen/aws-nuke/v3/pkg/nuke"
16+
)
17+
18+
const NetworkFirewallPolicyResource = "NetworkFirewallPolicy"
19+
20+
func init() {
21+
registry.Register(&registry.Registration{
22+
Name: NetworkFirewallPolicyResource,
23+
Scope: nuke.Account,
24+
Resource: &NetworkFirewallPolicy{},
25+
Lister: &NetworkFirewallPolicyLister{},
26+
AlternativeResource: "AWS::NetworkFirewall::FirewallPolicy",
27+
})
28+
}
29+
30+
type NetworkFirewallPolicyLister struct{}
31+
32+
func (l *NetworkFirewallPolicyLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) {
33+
opts := o.(*nuke.ListerOpts)
34+
svc := networkfirewall.NewFromConfig(*opts.Config)
35+
resources := make([]resource.Resource, 0)
36+
37+
params := &networkfirewall.ListFirewallPoliciesInput{
38+
MaxResults: aws.Int32(100),
39+
}
40+
41+
paginator := networkfirewall.NewListFirewallPoliciesPaginator(svc, params)
42+
for paginator.HasMorePages() {
43+
page, err := paginator.NextPage(ctx)
44+
if err != nil {
45+
return nil, err
46+
}
47+
48+
for _, policy := range page.FirewallPolicies {
49+
resources = append(resources, &NetworkFirewallPolicy{
50+
svc: svc,
51+
accountID: opts.AccountID,
52+
ARN: policy.Arn,
53+
Name: policy.Name,
54+
})
55+
}
56+
}
57+
58+
return resources, nil
59+
}
60+
61+
type NetworkFirewallPolicy struct {
62+
svc *networkfirewall.Client
63+
accountID *string
64+
ARN *string `description:"The ARN of the firewall policy."`
65+
Name *string `description:"The name of the firewall policy."`
66+
}
67+
68+
func (r *NetworkFirewallPolicy) Remove(ctx context.Context) error {
69+
_, err := r.svc.DeleteFirewallPolicy(ctx, &networkfirewall.DeleteFirewallPolicyInput{
70+
FirewallPolicyArn: r.ARN,
71+
})
72+
return err
73+
}
74+
75+
func (r *NetworkFirewallPolicy) Properties() types.Properties {
76+
return types.NewPropertiesFromStruct(r)
77+
}
78+
79+
func (r *NetworkFirewallPolicy) String() string {
80+
return ptr.ToString(r.Name)
81+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package resources
2+
3+
import (
4+
"context"
5+
6+
"github.com/gotidy/ptr"
7+
8+
"github.com/aws/aws-sdk-go-v2/aws"
9+
"github.com/aws/aws-sdk-go-v2/service/networkfirewall"
10+
11+
"github.com/ekristen/libnuke/pkg/registry"
12+
"github.com/ekristen/libnuke/pkg/resource"
13+
"github.com/ekristen/libnuke/pkg/types"
14+
15+
"github.com/ekristen/aws-nuke/v3/pkg/nuke"
16+
)
17+
18+
const NetworkFirewallRuleGroupResource = "NetworkFirewallRuleGroup"
19+
20+
func init() {
21+
registry.Register(&registry.Registration{
22+
Name: NetworkFirewallRuleGroupResource,
23+
Scope: nuke.Account,
24+
Resource: &NetworkFirewallRuleGroup{},
25+
Lister: &NetworkFirewallRuleGroupLister{},
26+
AlternativeResource: "AWS::NetworkFirewall::RuleGroup",
27+
})
28+
}
29+
30+
type NetworkFirewallRuleGroupLister struct{}
31+
32+
func (l *NetworkFirewallRuleGroupLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) {
33+
opts := o.(*nuke.ListerOpts)
34+
svc := networkfirewall.NewFromConfig(*opts.Config)
35+
resources := make([]resource.Resource, 0)
36+
37+
params := &networkfirewall.ListRuleGroupsInput{
38+
MaxResults: aws.Int32(100),
39+
}
40+
41+
paginator := networkfirewall.NewListRuleGroupsPaginator(svc, params)
42+
for paginator.HasMorePages() {
43+
page, err := paginator.NextPage(ctx)
44+
if err != nil {
45+
return nil, err
46+
}
47+
48+
for _, ruleGroup := range page.RuleGroups {
49+
resources = append(resources, &NetworkFirewallRuleGroup{
50+
svc: svc,
51+
accountID: opts.AccountID,
52+
ARN: ruleGroup.Arn,
53+
Name: ruleGroup.Name,
54+
})
55+
}
56+
}
57+
58+
return resources, nil
59+
}
60+
61+
type NetworkFirewallRuleGroup struct {
62+
svc *networkfirewall.Client
63+
accountID *string
64+
ARN *string `description:"The ARN of the rule group."`
65+
Name *string `description:"The name of the rule group."`
66+
}
67+
68+
func (r *NetworkFirewallRuleGroup) Remove(ctx context.Context) error {
69+
_, err := r.svc.DeleteRuleGroup(ctx, &networkfirewall.DeleteRuleGroupInput{
70+
RuleGroupArn: r.ARN,
71+
})
72+
return err
73+
}
74+
75+
func (r *NetworkFirewallRuleGroup) Properties() types.Properties {
76+
return types.NewPropertiesFromStruct(r)
77+
}
78+
79+
func (r *NetworkFirewallRuleGroup) String() string {
80+
return ptr.ToString(r.Name)
81+
}

0 commit comments

Comments
 (0)