github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/aws/waf_regional.go (about)

     1  // Copyright 2020 The Terraformer Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package aws
    16  
    17  import (
    18  	"context"
    19  
    20  	"github.com/GoogleCloudPlatform/terraformer/terraformutils"
    21  	"github.com/aws/aws-sdk-go-v2/service/wafregional"
    22  )
    23  
    24  type WafRegionalGenerator struct {
    25  	AWSService
    26  }
    27  
    28  func (g *WafRegionalGenerator) InitResources() error {
    29  	config, e := g.generateConfig()
    30  	if e != nil {
    31  		return e
    32  	}
    33  	svc := wafregional.NewFromConfig(config)
    34  
    35  	if err := g.loadWebACL(svc); err != nil {
    36  		return err
    37  	}
    38  	// AWS WAF Regional API doesn't provide API to build aws_wafregional_web_acl_association resources
    39  	if err := g.loadByteMatchSet(svc); err != nil {
    40  		return err
    41  	}
    42  	if err := g.loadGeoMatchSet(svc); err != nil {
    43  		return err
    44  	}
    45  	if err := g.loadIPSet(svc); err != nil {
    46  		return err
    47  	}
    48  	if err := g.loadRateBasedRules(svc); err != nil {
    49  		return err
    50  	}
    51  	if err := g.loadRegexMatchSets(svc); err != nil {
    52  		return err
    53  	}
    54  	if err := g.loadRegexPatternSets(svc); err != nil {
    55  		return err
    56  	}
    57  	if err := g.loadWafRules(svc); err != nil {
    58  		return err
    59  	}
    60  	if err := g.loadWafRuleGroups(svc); err != nil {
    61  		return err
    62  	}
    63  	if err := g.loadSizeConstraintSets(svc); err != nil {
    64  		return err
    65  	}
    66  	if err := g.loadSQLInjectionMatchSets(svc); err != nil {
    67  		return err
    68  	}
    69  	if err := g.loadXSSMatchSet(svc); err != nil {
    70  		return err
    71  	}
    72  
    73  	return nil
    74  }
    75  
    76  func (g *WafRegionalGenerator) loadWebACL(svc *wafregional.Client) error {
    77  	output, err := svc.ListWebACLs(context.TODO(), &wafregional.ListWebACLsInput{})
    78  	if err != nil {
    79  		return err
    80  	}
    81  	for _, acl := range output.WebACLs {
    82  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    83  			*acl.WebACLId,
    84  			*acl.Name+"_"+(*acl.WebACLId)[0:8],
    85  			"aws_wafregional_web_acl",
    86  			"aws",
    87  			wafAllowEmptyValues))
    88  	}
    89  	return nil
    90  }
    91  
    92  func (g *WafRegionalGenerator) loadByteMatchSet(svc *wafregional.Client) error {
    93  	output, err := svc.ListByteMatchSets(context.TODO(), &wafregional.ListByteMatchSetsInput{})
    94  	if err != nil {
    95  		return err
    96  	}
    97  	for _, byteMatchSet := range output.ByteMatchSets {
    98  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    99  			*byteMatchSet.ByteMatchSetId,
   100  			*byteMatchSet.Name+"_"+(*byteMatchSet.ByteMatchSetId)[0:8],
   101  			"aws_wafregional_byte_match_set",
   102  			"aws",
   103  			wafAllowEmptyValues))
   104  	}
   105  	return nil
   106  }
   107  
   108  func (g *WafRegionalGenerator) loadGeoMatchSet(svc *wafregional.Client) error {
   109  	output, err := svc.ListGeoMatchSets(context.TODO(), &wafregional.ListGeoMatchSetsInput{})
   110  	if err != nil {
   111  		return err
   112  	}
   113  	for _, matchSet := range output.GeoMatchSets {
   114  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   115  			*matchSet.GeoMatchSetId,
   116  			*matchSet.Name+"_"+(*matchSet.GeoMatchSetId)[0:8],
   117  			"aws_wafregional_geo_match_set",
   118  			"aws",
   119  			wafAllowEmptyValues))
   120  	}
   121  	return nil
   122  }
   123  
   124  func (g *WafRegionalGenerator) loadIPSet(svc *wafregional.Client) error {
   125  	output, err := svc.ListIPSets(context.TODO(), &wafregional.ListIPSetsInput{})
   126  	if err != nil {
   127  		return err
   128  	}
   129  	for _, IPSet := range output.IPSets {
   130  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   131  			*IPSet.IPSetId,
   132  			*IPSet.Name+"_"+(*IPSet.IPSetId)[0:8],
   133  			"aws_wafregional_ipset",
   134  			"aws",
   135  			wafAllowEmptyValues))
   136  	}
   137  	return nil
   138  }
   139  
   140  func (g *WafRegionalGenerator) loadRateBasedRules(svc *wafregional.Client) error {
   141  	output, err := svc.ListRateBasedRules(context.TODO(), &wafregional.ListRateBasedRulesInput{})
   142  	if err != nil {
   143  		return err
   144  	}
   145  	for _, rule := range output.Rules {
   146  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   147  			*rule.RuleId,
   148  			*rule.Name+"_"+(*rule.RuleId)[0:8],
   149  			"aws_wafregional_rate_based_rule",
   150  			"aws",
   151  			wafAllowEmptyValues))
   152  	}
   153  	return nil
   154  }
   155  
   156  func (g *WafRegionalGenerator) loadRegexMatchSets(svc *wafregional.Client) error {
   157  	output, err := svc.ListRegexMatchSets(context.TODO(), &wafregional.ListRegexMatchSetsInput{})
   158  	if err != nil {
   159  		return err
   160  	}
   161  	for _, regexMatchSet := range output.RegexMatchSets {
   162  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   163  			*regexMatchSet.RegexMatchSetId,
   164  			*regexMatchSet.Name+"_"+(*regexMatchSet.RegexMatchSetId)[0:8],
   165  			"aws_wafregional_regex_match_set",
   166  			"aws",
   167  			wafAllowEmptyValues))
   168  	}
   169  	return nil
   170  }
   171  
   172  func (g *WafRegionalGenerator) loadRegexPatternSets(svc *wafregional.Client) error {
   173  	output, err := svc.ListRegexPatternSets(context.TODO(), &wafregional.ListRegexPatternSetsInput{})
   174  	if err != nil {
   175  		return err
   176  	}
   177  	for _, regexPatternSet := range output.RegexPatternSets {
   178  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   179  			*regexPatternSet.RegexPatternSetId,
   180  			*regexPatternSet.Name+"_"+(*regexPatternSet.RegexPatternSetId)[0:8],
   181  			"aws_wafregional_regex_pattern_set",
   182  			"aws",
   183  			wafAllowEmptyValues))
   184  	}
   185  	return nil
   186  }
   187  
   188  func (g *WafRegionalGenerator) loadWafRules(svc *wafregional.Client) error {
   189  	output, err := svc.ListRules(context.TODO(), &wafregional.ListRulesInput{})
   190  	if err != nil {
   191  		return err
   192  	}
   193  	for _, rule := range output.Rules {
   194  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   195  			*rule.RuleId,
   196  			*rule.Name+"_"+(*rule.RuleId)[0:8],
   197  			"aws_wafregional_rule",
   198  			"aws",
   199  			wafAllowEmptyValues))
   200  	}
   201  	return nil
   202  }
   203  
   204  func (g *WafRegionalGenerator) loadWafRuleGroups(svc *wafregional.Client) error {
   205  	output, err := svc.ListRuleGroups(context.TODO(), &wafregional.ListRuleGroupsInput{})
   206  	if err != nil {
   207  		return err
   208  	}
   209  	for _, ruleGroup := range output.RuleGroups {
   210  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   211  			*ruleGroup.RuleGroupId,
   212  			*ruleGroup.Name+"_"+(*ruleGroup.RuleGroupId)[0:8],
   213  			"aws_wafregional_rule_group",
   214  			"aws",
   215  			wafAllowEmptyValues))
   216  	}
   217  	return nil
   218  }
   219  
   220  func (g *WafRegionalGenerator) loadSizeConstraintSets(svc *wafregional.Client) error {
   221  	output, err := svc.ListSizeConstraintSets(context.TODO(), &wafregional.ListSizeConstraintSetsInput{})
   222  	if err != nil {
   223  		return err
   224  	}
   225  	for _, sizeConstraintSet := range output.SizeConstraintSets {
   226  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   227  			*sizeConstraintSet.SizeConstraintSetId,
   228  			*sizeConstraintSet.Name+"_"+(*sizeConstraintSet.SizeConstraintSetId)[0:8],
   229  			"aws_wafregional_size_constraint_set",
   230  			"aws",
   231  			wafAllowEmptyValues))
   232  	}
   233  	return nil
   234  }
   235  
   236  func (g *WafRegionalGenerator) loadSQLInjectionMatchSets(svc *wafregional.Client) error {
   237  	output, err := svc.ListSqlInjectionMatchSets(context.TODO(), &wafregional.ListSqlInjectionMatchSetsInput{})
   238  	if err != nil {
   239  		return err
   240  	}
   241  	for _, sqlInjectionMatchSet := range output.SqlInjectionMatchSets {
   242  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   243  			*sqlInjectionMatchSet.SqlInjectionMatchSetId,
   244  			*sqlInjectionMatchSet.Name+"_"+(*sqlInjectionMatchSet.SqlInjectionMatchSetId)[0:8],
   245  			"aws_wafregional_sql_injection_match_set",
   246  			"aws",
   247  			wafAllowEmptyValues))
   248  	}
   249  	return nil
   250  }
   251  
   252  func (g *WafRegionalGenerator) loadXSSMatchSet(svc *wafregional.Client) error {
   253  	output, err := svc.ListXssMatchSets(context.TODO(), &wafregional.ListXssMatchSetsInput{})
   254  	if err != nil {
   255  		return err
   256  	}
   257  	for _, xssMatchSet := range output.XssMatchSets {
   258  		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   259  			*xssMatchSet.XssMatchSetId,
   260  			*xssMatchSet.Name+"_"+(*xssMatchSet.XssMatchSetId)[0:8],
   261  			"aws_wafregional_xss_match_set",
   262  			"aws",
   263  			wafAllowEmptyValues))
   264  	}
   265  	return nil
   266  }