createWebACL method

Future<CreateWebACLResponse> createWebACL({
  1. required DefaultAction defaultAction,
  2. required String name,
  3. required Scope scope,
  4. required VisibilityConfig visibilityConfig,
  5. String? description,
  6. List<Rule>? rules,
  7. List<Tag>? tags,
})
Creates a WebACL per the specifications provided.

A Web ACL defines a collection of rules to use to inspect and control web requests. Each rule has an action defined (allow, block, or count) for requests that match the statement of the rule. In the Web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a Web ACL can be a combination of the types Rule, RuleGroup, and managed rule group. You can associate a Web ACL with one or more AWS resources to protect. The resources can be Amazon CloudFront, an Amazon API Gateway REST API, an Application Load Balancer, or an AWS AppSync GraphQL API.

May throw WAFInternalErrorException. May throw WAFInvalidParameterException. May throw WAFDuplicateItemException. May throw WAFOptimisticLockException. May throw WAFLimitsExceededException. May throw WAFInvalidResourceException. May throw WAFUnavailableEntityException. May throw WAFNonexistentItemException. May throw WAFTagOperationException. May throw WAFTagOperationInternalErrorException. May throw WAFSubscriptionNotFoundException. May throw WAFInvalidOperationException.

Parameter defaultAction : The action to perform if none of the Rules contained in the WebACL match.

Parameter name : The name of the Web ACL. You cannot change the name of a Web ACL after you create it.

Parameter scope : Specifies whether this is for an AWS CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an API Gateway REST API, or an AppSync GraphQL API.

To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows:

  • CLI - Specify the Region when you use the CloudFront scope: --scope=CLOUDFRONT --region=us-east-1.
  • API and SDKs - For all calls, use the Region endpoint us-east-1.

Parameter visibilityConfig : Defines and enables Amazon CloudWatch metrics and web request sample collection.

Parameter description : A description of the Web ACL that helps with identification. You cannot change the description of a Web ACL after you create it.

Parameter rules : The Rule statements used to identify the web requests that you want to allow, block, or count. Each rule includes one top-level statement that AWS WAF uses to identify matching web requests, and parameters that govern how AWS WAF handles them.

Parameter tags : An array of key:value pairs to associate with the resource.

Implementation

Future<CreateWebACLResponse> createWebACL({
  required DefaultAction defaultAction,
  required String name,
  required Scope scope,
  required VisibilityConfig visibilityConfig,
  String? description,
  List<Rule>? rules,
  List<Tag>? tags,
}) async {
  ArgumentError.checkNotNull(defaultAction, 'defaultAction');
  ArgumentError.checkNotNull(name, 'name');
  _s.validateStringLength(
    'name',
    name,
    1,
    128,
    isRequired: true,
  );
  ArgumentError.checkNotNull(scope, 'scope');
  ArgumentError.checkNotNull(visibilityConfig, 'visibilityConfig');
  _s.validateStringLength(
    'description',
    description,
    1,
    256,
  );
  final headers = <String, String>{
    'Content-Type': 'application/x-amz-json-1.1',
    'X-Amz-Target': 'AWSWAF_20190729.CreateWebACL'
  };
  final jsonResponse = await _protocol.send(
    method: 'POST',
    requestUri: '/',
    exceptionFnMap: _exceptionFns,
    // TODO queryParams
    headers: headers,
    payload: {
      'DefaultAction': defaultAction,
      'Name': name,
      'Scope': scope.toValue(),
      'VisibilityConfig': visibilityConfig,
      if (description != null) 'Description': description,
      if (rules != null) 'Rules': rules,
      if (tags != null) 'Tags': tags,
    },
  );

  return CreateWebACLResponse.fromJson(jsonResponse.body);
}