aws-sdk-wafv2 1.125.0 → 1.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e47a9f752ab0aae5986f5e12311f74db6baaeb0827ba01104d62bc4e67fe5c6
4
- data.tar.gz: 16561abce1db359904d9bb401fd965bcc97260669fc58756555ba3c18e9bd469
3
+ metadata.gz: eb9bc8881386e551dce443f2dfa93c69b52c8a669689bb1f7c4d3a2aebd0a096
4
+ data.tar.gz: a32a1a23249d0079be9e10267ccaefa2451d14d567277cd5fd852466ccbb1257
5
5
  SHA512:
6
- metadata.gz: 68f37f780969200c028d625e5d27b37c6c4a1f458d34f3c61b1737d0c972c965feda80c51e47eb6a1c539075d7b55517c76ffe09fffa5cfb1bcebd81b4bc2d1d
7
- data.tar.gz: f2c29602420c87525278abb8b71737c7d42ed21a39e738a02d111250695cb5ecf254ae9479abd67dcf8082a24bea08c84d86020aff2d9533c6b825f69682d632
6
+ metadata.gz: a91dd15acd7b0b4466896ead8325bd3eb026baaf805b661d6acf4e1e6e83503158ca9b6b5e3eb3d632abdfee1fa86fa3d69a6840fb9c43427eb931abdc697123
7
+ data.tar.gz: e02b6ab1977d39c5eea65422e494f77320b0983de3668dc730eba11e16704dccbe31a21364726b569342dd237f00aeb191bea137ffe3af5fe2e9746eaad21c62
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.126.0 (2026-02-25)
5
+ ------------------
6
+
7
+ * Feature - AWS WAF now supports GetTopPathStatisticsByTraffic that provides aggregated statistics on the top URI paths accessed by bot traffic. Use this operation to see which paths receive the most bot traffic, identify the specific bots accessing them, and filter by category, organization, or bot name.
8
+
4
9
  1.125.0 (2026-01-16)
5
10
  ------------------
6
11
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.125.0
1
+ 1.126.0
@@ -5662,6 +5662,131 @@ module Aws::WAFV2
5662
5662
  req.send_request(options)
5663
5663
  end
5664
5664
 
5665
+ # Retrieves aggregated statistics about the top URI paths accessed by
5666
+ # bot traffic for a specified web ACL and time window. You can use this
5667
+ # operation to analyze which paths on your web application receive the
5668
+ # most bot traffic and identify the specific bots accessing those paths.
5669
+ # The operation supports filtering by bot category, organization, or
5670
+ # name, and allows you to drill down into specific path prefixes to view
5671
+ # detailed URI-level statistics.
5672
+ #
5673
+ # @option params [required, String] :web_acl_arn
5674
+ # The Amazon Resource Name (ARN) of the web ACL for which you want to
5675
+ # retrieve path statistics.
5676
+ #
5677
+ # @option params [required, String] :scope
5678
+ # Specifies whether the web ACL is for an Amazon Web Services CloudFront
5679
+ # distribution or for a regional application. A regional application can
5680
+ # be an Application Load Balancer, an AppSync GraphQL API, an Amazon
5681
+ # Cognito user pool, an Amazon Web Services App Runner service, or an
5682
+ # Amazon Web Services Verified Access instance.
5683
+ #
5684
+ # @option params [String] :uri_path_prefix
5685
+ # A URI path prefix to filter the results. When you specify this
5686
+ # parameter, the operation returns statistics for individual URIs within
5687
+ # the specified path prefix. For example, if you specify `/api`, the
5688
+ # response includes statistics for paths like `/api/v1/users` and
5689
+ # `/api/v2/orders`. If you don't specify this parameter, the operation
5690
+ # returns top-level path statistics.
5691
+ #
5692
+ # @option params [required, Types::TimeWindow] :time_window
5693
+ # The time window for which you want to retrieve path statistics. The
5694
+ # time window must be within the data retention period for your web ACL.
5695
+ #
5696
+ # @option params [String] :bot_category
5697
+ # Filters the results to include only traffic from bots in the specified
5698
+ # category. For example, you can filter by `ai` to see only AI crawler
5699
+ # traffic, or `search_engine` to see only search engine bot traffic.
5700
+ # When you apply this filter, the `Source` field is populated in the
5701
+ # response.
5702
+ #
5703
+ # @option params [String] :bot_organization
5704
+ # Filters the results to include only traffic from bots belonging to the
5705
+ # specified organization. For example, you can filter by `openai` or
5706
+ # `google`. When you apply this filter, the `Source` field is populated
5707
+ # in the response.
5708
+ #
5709
+ # @option params [String] :bot_name
5710
+ # Filters the results to include only traffic from the specified bot.
5711
+ # For example, you can filter by `gptbot` or `googlebot`. When you apply
5712
+ # this filter, the `Source` field is populated in the response.
5713
+ #
5714
+ # @option params [required, Integer] :limit
5715
+ # The maximum number of path statistics to return. Valid values are 1 to
5716
+ # 100.
5717
+ #
5718
+ # @option params [required, Integer] :number_of_top_traffic_bots_per_path
5719
+ # The maximum number of top bots to include in the statistics for each
5720
+ # path. Valid values are 1 to 10.
5721
+ #
5722
+ # @option params [String] :next_marker
5723
+ # When you request a list of objects with a `Limit` setting, if the
5724
+ # number of objects that are still available for retrieval exceeds the
5725
+ # limit, WAF returns a `NextMarker` value in the response. To retrieve
5726
+ # the next batch of objects, provide the marker from the prior call in
5727
+ # your next request.
5728
+ #
5729
+ # @return [Types::GetTopPathStatisticsByTrafficResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
5730
+ #
5731
+ # * {Types::GetTopPathStatisticsByTrafficResponse#path_statistics #path_statistics} => Array<Types::PathStatistics>
5732
+ # * {Types::GetTopPathStatisticsByTrafficResponse#total_request_count #total_request_count} => Integer
5733
+ # * {Types::GetTopPathStatisticsByTrafficResponse#next_marker #next_marker} => String
5734
+ # * {Types::GetTopPathStatisticsByTrafficResponse#top_categories #top_categories} => Array<Types::PathStatistics>
5735
+ #
5736
+ # @example Request syntax with placeholder values
5737
+ #
5738
+ # resp = client.get_top_path_statistics_by_traffic({
5739
+ # web_acl_arn: "ResourceArn", # required
5740
+ # scope: "CLOUDFRONT", # required, accepts CLOUDFRONT, REGIONAL
5741
+ # uri_path_prefix: "UriPathPrefixString",
5742
+ # time_window: { # required
5743
+ # start_time: Time.now, # required
5744
+ # end_time: Time.now, # required
5745
+ # },
5746
+ # bot_category: "FilterString",
5747
+ # bot_organization: "FilterString",
5748
+ # bot_name: "FilterString",
5749
+ # limit: 1, # required
5750
+ # number_of_top_traffic_bots_per_path: 1, # required
5751
+ # next_marker: "NextMarker",
5752
+ # })
5753
+ #
5754
+ # @example Response structure
5755
+ #
5756
+ # resp.path_statistics #=> Array
5757
+ # resp.path_statistics[0].source.bot_category #=> String
5758
+ # resp.path_statistics[0].source.bot_organization #=> String
5759
+ # resp.path_statistics[0].source.bot_name #=> String
5760
+ # resp.path_statistics[0].path #=> String
5761
+ # resp.path_statistics[0].request_count #=> Integer
5762
+ # resp.path_statistics[0].percentage #=> Float
5763
+ # resp.path_statistics[0].top_bots #=> Array
5764
+ # resp.path_statistics[0].top_bots[0].bot_name #=> String
5765
+ # resp.path_statistics[0].top_bots[0].request_count #=> Integer
5766
+ # resp.path_statistics[0].top_bots[0].percentage #=> Float
5767
+ # resp.total_request_count #=> Integer
5768
+ # resp.next_marker #=> String
5769
+ # resp.top_categories #=> Array
5770
+ # resp.top_categories[0].source.bot_category #=> String
5771
+ # resp.top_categories[0].source.bot_organization #=> String
5772
+ # resp.top_categories[0].source.bot_name #=> String
5773
+ # resp.top_categories[0].path #=> String
5774
+ # resp.top_categories[0].request_count #=> Integer
5775
+ # resp.top_categories[0].percentage #=> Float
5776
+ # resp.top_categories[0].top_bots #=> Array
5777
+ # resp.top_categories[0].top_bots[0].bot_name #=> String
5778
+ # resp.top_categories[0].top_bots[0].request_count #=> Integer
5779
+ # resp.top_categories[0].top_bots[0].percentage #=> Float
5780
+ #
5781
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetTopPathStatisticsByTraffic AWS API Documentation
5782
+ #
5783
+ # @overload get_top_path_statistics_by_traffic(params = {})
5784
+ # @param [Hash] params ({})
5785
+ def get_top_path_statistics_by_traffic(params = {}, options = {})
5786
+ req = build_request(:get_top_path_statistics_by_traffic, params)
5787
+ req.send_request(options)
5788
+ end
5789
+
5665
5790
  # Retrieves the specified WebACL.
5666
5791
  #
5667
5792
  # @option params [String] :name
@@ -9642,7 +9767,7 @@ module Aws::WAFV2
9642
9767
  tracer: tracer
9643
9768
  )
9644
9769
  context[:gem_name] = 'aws-sdk-wafv2'
9645
- context[:gem_version] = '1.125.0'
9770
+ context[:gem_version] = '1.126.0'
9646
9771
  Seahorse::Client::Request.new(handlers, context)
9647
9772
  end
9648
9773
 
@@ -49,6 +49,8 @@ module Aws::WAFV2
49
49
  Body = Shapes::StructureShape.new(name: 'Body')
50
50
  BodyParsingFallbackBehavior = Shapes::StringShape.new(name: 'BodyParsingFallbackBehavior')
51
51
  Boolean = Shapes::BooleanShape.new(name: 'Boolean')
52
+ BotStatistics = Shapes::StructureShape.new(name: 'BotStatistics')
53
+ BotStatisticsList = Shapes::ListShape.new(name: 'BotStatisticsList')
52
54
  ByteMatchStatement = Shapes::StructureShape.new(name: 'ByteMatchStatement')
53
55
  CapacityUnit = Shapes::IntegerShape.new(name: 'CapacityUnit')
54
56
  CaptchaAction = Shapes::StructureShape.new(name: 'CaptchaAction')
@@ -147,6 +149,8 @@ module Aws::WAFV2
147
149
  Filter = Shapes::StructureShape.new(name: 'Filter')
148
150
  FilterBehavior = Shapes::StringShape.new(name: 'FilterBehavior')
149
151
  FilterRequirement = Shapes::StringShape.new(name: 'FilterRequirement')
152
+ FilterSource = Shapes::StructureShape.new(name: 'FilterSource')
153
+ FilterString = Shapes::StringShape.new(name: 'FilterString')
150
154
  Filters = Shapes::ListShape.new(name: 'Filters')
151
155
  FirewallManagerRuleGroup = Shapes::StructureShape.new(name: 'FirewallManagerRuleGroup')
152
156
  FirewallManagerRuleGroups = Shapes::ListShape.new(name: 'FirewallManagerRuleGroups')
@@ -177,6 +181,8 @@ module Aws::WAFV2
177
181
  GetRuleGroupResponse = Shapes::StructureShape.new(name: 'GetRuleGroupResponse')
178
182
  GetSampledRequestsRequest = Shapes::StructureShape.new(name: 'GetSampledRequestsRequest')
179
183
  GetSampledRequestsResponse = Shapes::StructureShape.new(name: 'GetSampledRequestsResponse')
184
+ GetTopPathStatisticsByTrafficRequest = Shapes::StructureShape.new(name: 'GetTopPathStatisticsByTrafficRequest')
185
+ GetTopPathStatisticsByTrafficResponse = Shapes::StructureShape.new(name: 'GetTopPathStatisticsByTrafficResponse')
180
186
  GetWebACLForResourceRequest = Shapes::StructureShape.new(name: 'GetWebACLForResourceRequest')
181
187
  GetWebACLForResourceResponse = Shapes::StructureShape.new(name: 'GetWebACLForResourceResponse')
182
188
  GetWebACLRequest = Shapes::StructureShape.new(name: 'GetWebACLRequest')
@@ -274,6 +280,7 @@ module Aws::WAFV2
274
280
  NextMarker = Shapes::StringShape.new(name: 'NextMarker')
275
281
  NoneAction = Shapes::StructureShape.new(name: 'NoneAction')
276
282
  NotStatement = Shapes::StructureShape.new(name: 'NotStatement')
283
+ NumberOfTopTrafficBotsPerPath = Shapes::IntegerShape.new(name: 'NumberOfTopTrafficBotsPerPath')
277
284
  OnSourceDDoSProtectionConfig = Shapes::StructureShape.new(name: 'OnSourceDDoSProtectionConfig')
278
285
  OrStatement = Shapes::StructureShape.new(name: 'OrStatement')
279
286
  OutputUrl = Shapes::StringShape.new(name: 'OutputUrl')
@@ -283,7 +290,12 @@ module Aws::WAFV2
283
290
  ParameterExceptionField = Shapes::StringShape.new(name: 'ParameterExceptionField')
284
291
  ParameterExceptionParameter = Shapes::StringShape.new(name: 'ParameterExceptionParameter')
285
292
  PasswordField = Shapes::StructureShape.new(name: 'PasswordField')
293
+ PathStatistics = Shapes::StructureShape.new(name: 'PathStatistics')
294
+ PathStatisticsLimit = Shapes::IntegerShape.new(name: 'PathStatisticsLimit')
295
+ PathStatisticsList = Shapes::ListShape.new(name: 'PathStatisticsList')
296
+ PathString = Shapes::StringShape.new(name: 'PathString')
286
297
  PayloadType = Shapes::StringShape.new(name: 'PayloadType')
298
+ PercentageValue = Shapes::FloatShape.new(name: 'PercentageValue')
287
299
  PhoneNumberField = Shapes::StructureShape.new(name: 'PhoneNumberField')
288
300
  PhoneNumberFields = Shapes::ListShape.new(name: 'PhoneNumberFields')
289
301
  Platform = Shapes::StringShape.new(name: 'Platform')
@@ -336,6 +348,7 @@ module Aws::WAFV2
336
348
  ReleaseSummary = Shapes::StructureShape.new(name: 'ReleaseSummary')
337
349
  RequestBody = Shapes::MapShape.new(name: 'RequestBody')
338
350
  RequestBodyAssociatedResourceTypeConfig = Shapes::StructureShape.new(name: 'RequestBodyAssociatedResourceTypeConfig')
351
+ RequestCount = Shapes::IntegerShape.new(name: 'RequestCount')
339
352
  RequestInspection = Shapes::StructureShape.new(name: 'RequestInspection')
340
353
  RequestInspectionACFP = Shapes::StructureShape.new(name: 'RequestInspectionACFP')
341
354
  RequiredPricingPlanName = Shapes::StringShape.new(name: 'RequiredPricingPlanName')
@@ -426,6 +439,7 @@ module Aws::WAFV2
426
439
  UpdateWebACLResponse = Shapes::StructureShape.new(name: 'UpdateWebACLResponse')
427
440
  UriFragment = Shapes::StructureShape.new(name: 'UriFragment')
428
441
  UriPath = Shapes::StructureShape.new(name: 'UriPath')
442
+ UriPathPrefixString = Shapes::StringShape.new(name: 'UriPathPrefixString')
429
443
  UsageOfAction = Shapes::StringShape.new(name: 'UsageOfAction')
430
444
  UsernameField = Shapes::StructureShape.new(name: 'UsernameField')
431
445
  VendorName = Shapes::StringShape.new(name: 'VendorName')
@@ -539,6 +553,13 @@ module Aws::WAFV2
539
553
  Body.add_member(:oversize_handling, Shapes::ShapeRef.new(shape: OversizeHandling, location_name: "OversizeHandling"))
540
554
  Body.struct_class = Types::Body
541
555
 
556
+ BotStatistics.add_member(:bot_name, Shapes::ShapeRef.new(shape: FilterString, required: true, location_name: "BotName"))
557
+ BotStatistics.add_member(:request_count, Shapes::ShapeRef.new(shape: RequestCount, required: true, location_name: "RequestCount"))
558
+ BotStatistics.add_member(:percentage, Shapes::ShapeRef.new(shape: PercentageValue, required: true, location_name: "Percentage"))
559
+ BotStatistics.struct_class = Types::BotStatistics
560
+
561
+ BotStatisticsList.member = Shapes::ShapeRef.new(shape: BotStatistics)
562
+
542
563
  ByteMatchStatement.add_member(:search_string, Shapes::ShapeRef.new(shape: SearchString, required: true, location_name: "SearchString"))
543
564
  ByteMatchStatement.add_member(:field_to_match, Shapes::ShapeRef.new(shape: FieldToMatch, required: true, location_name: "FieldToMatch"))
544
565
  ByteMatchStatement.add_member(:text_transformations, Shapes::ShapeRef.new(shape: TextTransformations, required: true, location_name: "TextTransformations"))
@@ -833,6 +854,11 @@ module Aws::WAFV2
833
854
  Filter.add_member(:conditions, Shapes::ShapeRef.new(shape: Conditions, required: true, location_name: "Conditions"))
834
855
  Filter.struct_class = Types::Filter
835
856
 
857
+ FilterSource.add_member(:bot_category, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotCategory"))
858
+ FilterSource.add_member(:bot_organization, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotOrganization"))
859
+ FilterSource.add_member(:bot_name, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotName"))
860
+ FilterSource.struct_class = Types::FilterSource
861
+
836
862
  Filters.member = Shapes::ShapeRef.new(shape: Filter)
837
863
 
838
864
  FirewallManagerRuleGroup.add_member(:name, Shapes::ShapeRef.new(shape: EntityName, required: true, location_name: "Name"))
@@ -952,6 +978,24 @@ module Aws::WAFV2
952
978
  GetSampledRequestsResponse.add_member(:time_window, Shapes::ShapeRef.new(shape: TimeWindow, location_name: "TimeWindow"))
953
979
  GetSampledRequestsResponse.struct_class = Types::GetSampledRequestsResponse
954
980
 
981
+ GetTopPathStatisticsByTrafficRequest.add_member(:web_acl_arn, Shapes::ShapeRef.new(shape: ResourceArn, required: true, location_name: "WebAclArn"))
982
+ GetTopPathStatisticsByTrafficRequest.add_member(:scope, Shapes::ShapeRef.new(shape: Scope, required: true, location_name: "Scope"))
983
+ GetTopPathStatisticsByTrafficRequest.add_member(:uri_path_prefix, Shapes::ShapeRef.new(shape: UriPathPrefixString, location_name: "UriPathPrefix"))
984
+ GetTopPathStatisticsByTrafficRequest.add_member(:time_window, Shapes::ShapeRef.new(shape: TimeWindow, required: true, location_name: "TimeWindow"))
985
+ GetTopPathStatisticsByTrafficRequest.add_member(:bot_category, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotCategory"))
986
+ GetTopPathStatisticsByTrafficRequest.add_member(:bot_organization, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotOrganization"))
987
+ GetTopPathStatisticsByTrafficRequest.add_member(:bot_name, Shapes::ShapeRef.new(shape: FilterString, location_name: "BotName"))
988
+ GetTopPathStatisticsByTrafficRequest.add_member(:limit, Shapes::ShapeRef.new(shape: PathStatisticsLimit, required: true, location_name: "Limit"))
989
+ GetTopPathStatisticsByTrafficRequest.add_member(:number_of_top_traffic_bots_per_path, Shapes::ShapeRef.new(shape: NumberOfTopTrafficBotsPerPath, required: true, location_name: "NumberOfTopTrafficBotsPerPath"))
990
+ GetTopPathStatisticsByTrafficRequest.add_member(:next_marker, Shapes::ShapeRef.new(shape: NextMarker, location_name: "NextMarker"))
991
+ GetTopPathStatisticsByTrafficRequest.struct_class = Types::GetTopPathStatisticsByTrafficRequest
992
+
993
+ GetTopPathStatisticsByTrafficResponse.add_member(:path_statistics, Shapes::ShapeRef.new(shape: PathStatisticsList, required: true, location_name: "PathStatistics"))
994
+ GetTopPathStatisticsByTrafficResponse.add_member(:total_request_count, Shapes::ShapeRef.new(shape: RequestCount, required: true, location_name: "TotalRequestCount"))
995
+ GetTopPathStatisticsByTrafficResponse.add_member(:next_marker, Shapes::ShapeRef.new(shape: NextMarker, location_name: "NextMarker"))
996
+ GetTopPathStatisticsByTrafficResponse.add_member(:top_categories, Shapes::ShapeRef.new(shape: PathStatisticsList, location_name: "TopCategories"))
997
+ GetTopPathStatisticsByTrafficResponse.struct_class = Types::GetTopPathStatisticsByTrafficResponse
998
+
955
999
  GetWebACLForResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: ResourceArn, required: true, location_name: "ResourceArn"))
956
1000
  GetWebACLForResourceRequest.struct_class = Types::GetWebACLForResourceRequest
957
1001
 
@@ -1293,6 +1337,15 @@ module Aws::WAFV2
1293
1337
  PasswordField.add_member(:identifier, Shapes::ShapeRef.new(shape: FieldIdentifier, required: true, location_name: "Identifier"))
1294
1338
  PasswordField.struct_class = Types::PasswordField
1295
1339
 
1340
+ PathStatistics.add_member(:source, Shapes::ShapeRef.new(shape: FilterSource, location_name: "Source"))
1341
+ PathStatistics.add_member(:path, Shapes::ShapeRef.new(shape: PathString, required: true, location_name: "Path"))
1342
+ PathStatistics.add_member(:request_count, Shapes::ShapeRef.new(shape: RequestCount, required: true, location_name: "RequestCount"))
1343
+ PathStatistics.add_member(:percentage, Shapes::ShapeRef.new(shape: PercentageValue, required: true, location_name: "Percentage"))
1344
+ PathStatistics.add_member(:top_bots, Shapes::ShapeRef.new(shape: BotStatisticsList, location_name: "TopBots"))
1345
+ PathStatistics.struct_class = Types::PathStatistics
1346
+
1347
+ PathStatisticsList.member = Shapes::ShapeRef.new(shape: PathStatistics)
1348
+
1296
1349
  PhoneNumberField.add_member(:identifier, Shapes::ShapeRef.new(shape: FieldIdentifier, required: true, location_name: "Identifier"))
1297
1350
  PhoneNumberField.struct_class = Types::PhoneNumberField
1298
1351
 
@@ -2258,6 +2311,19 @@ module Aws::WAFV2
2258
2311
  o.errors << Shapes::ShapeRef.new(shape: WAFInvalidParameterException)
2259
2312
  end)
2260
2313
 
2314
+ api.add_operation(:get_top_path_statistics_by_traffic, Seahorse::Model::Operation.new.tap do |o|
2315
+ o.name = "GetTopPathStatisticsByTraffic"
2316
+ o.http_method = "POST"
2317
+ o.http_request_uri = "/"
2318
+ o.input = Shapes::ShapeRef.new(shape: GetTopPathStatisticsByTrafficRequest)
2319
+ o.output = Shapes::ShapeRef.new(shape: GetTopPathStatisticsByTrafficResponse)
2320
+ o.errors << Shapes::ShapeRef.new(shape: WAFInternalErrorException)
2321
+ o.errors << Shapes::ShapeRef.new(shape: WAFInvalidParameterException)
2322
+ o.errors << Shapes::ShapeRef.new(shape: WAFNonexistentItemException)
2323
+ o.errors << Shapes::ShapeRef.new(shape: WAFInvalidOperationException)
2324
+ o.errors << Shapes::ShapeRef.new(shape: WAFFeatureNotIncludedInPricingPlanException)
2325
+ end)
2326
+
2261
2327
  api.add_operation(:get_web_acl, Seahorse::Model::Operation.new.tap do |o|
2262
2328
  o.name = "GetWebACL"
2263
2329
  o.http_method = "POST"
@@ -699,6 +699,33 @@ module Aws::WAFV2
699
699
  include Aws::Structure
700
700
  end
701
701
 
702
+ # Statistics about a specific bot's traffic to a path, including the
703
+ # bot name, request count, and percentage of traffic.
704
+ #
705
+ # @!attribute [rw] bot_name
706
+ # The name of the bot. For example, `gptbot` or `googlebot`.
707
+ # @return [String]
708
+ #
709
+ # @!attribute [rw] request_count
710
+ # The number of requests from this bot to the associated path within
711
+ # the specified time window.
712
+ # @return [Integer]
713
+ #
714
+ # @!attribute [rw] percentage
715
+ # The percentage of total requests to the associated path that came
716
+ # from this bot.
717
+ # @return [Float]
718
+ #
719
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/BotStatistics AWS API Documentation
720
+ #
721
+ class BotStatistics < Struct.new(
722
+ :bot_name,
723
+ :request_count,
724
+ :percentage)
725
+ SENSITIVE = []
726
+ include Aws::Structure
727
+ end
728
+
702
729
  # A rule statement that defines a string match search for WAF to apply
703
730
  # to web requests. The byte match statement provides the bytes to search
704
731
  # for, the location in requests that you want WAF to search, and other
@@ -3088,6 +3115,35 @@ module Aws::WAFV2
3088
3115
  include Aws::Structure
3089
3116
  end
3090
3117
 
3118
+ # Information about the bot filter that was applied to the request. This
3119
+ # structure is populated in the response when you filter by bot
3120
+ # category, organization, or name.
3121
+ #
3122
+ # @!attribute [rw] bot_category
3123
+ # The bot category that was used to filter the results. For example,
3124
+ # `ai` or `search_engine`.
3125
+ # @return [String]
3126
+ #
3127
+ # @!attribute [rw] bot_organization
3128
+ # The bot organization that was used to filter the results. For
3129
+ # example, `OpenAI` or `Google`.
3130
+ # @return [String]
3131
+ #
3132
+ # @!attribute [rw] bot_name
3133
+ # The bot name that was used to filter the results. For example,
3134
+ # `gptbot` or `googlebot`.
3135
+ # @return [String]
3136
+ #
3137
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/FilterSource AWS API Documentation
3138
+ #
3139
+ class FilterSource < Struct.new(
3140
+ :bot_category,
3141
+ :bot_organization,
3142
+ :bot_name)
3143
+ SENSITIVE = []
3144
+ include Aws::Structure
3145
+ end
3146
+
3091
3147
  # A rule group that's defined for an Firewall Manager WAF policy.
3092
3148
  #
3093
3149
  # @!attribute [rw] name
@@ -3882,6 +3938,127 @@ module Aws::WAFV2
3882
3938
  include Aws::Structure
3883
3939
  end
3884
3940
 
3941
+ # @!attribute [rw] web_acl_arn
3942
+ # The Amazon Resource Name (ARN) of the web ACL for which you want to
3943
+ # retrieve path statistics.
3944
+ # @return [String]
3945
+ #
3946
+ # @!attribute [rw] scope
3947
+ # Specifies whether the web ACL is for an Amazon Web Services
3948
+ # CloudFront distribution or for a regional application. A regional
3949
+ # application can be an Application Load Balancer, an AppSync GraphQL
3950
+ # API, an Amazon Cognito user pool, an Amazon Web Services App Runner
3951
+ # service, or an Amazon Web Services Verified Access instance.
3952
+ # @return [String]
3953
+ #
3954
+ # @!attribute [rw] uri_path_prefix
3955
+ # A URI path prefix to filter the results. When you specify this
3956
+ # parameter, the operation returns statistics for individual URIs
3957
+ # within the specified path prefix. For example, if you specify
3958
+ # `/api`, the response includes statistics for paths like
3959
+ # `/api/v1/users` and `/api/v2/orders`. If you don't specify this
3960
+ # parameter, the operation returns top-level path statistics.
3961
+ # @return [String]
3962
+ #
3963
+ # @!attribute [rw] time_window
3964
+ # The time window for which you want to retrieve path statistics. The
3965
+ # time window must be within the data retention period for your web
3966
+ # ACL.
3967
+ # @return [Types::TimeWindow]
3968
+ #
3969
+ # @!attribute [rw] bot_category
3970
+ # Filters the results to include only traffic from bots in the
3971
+ # specified category. For example, you can filter by `ai` to see only
3972
+ # AI crawler traffic, or `search_engine` to see only search engine bot
3973
+ # traffic. When you apply this filter, the `Source` field is populated
3974
+ # in the response.
3975
+ # @return [String]
3976
+ #
3977
+ # @!attribute [rw] bot_organization
3978
+ # Filters the results to include only traffic from bots belonging to
3979
+ # the specified organization. For example, you can filter by `openai`
3980
+ # or `google`. When you apply this filter, the `Source` field is
3981
+ # populated in the response.
3982
+ # @return [String]
3983
+ #
3984
+ # @!attribute [rw] bot_name
3985
+ # Filters the results to include only traffic from the specified bot.
3986
+ # For example, you can filter by `gptbot` or `googlebot`. When you
3987
+ # apply this filter, the `Source` field is populated in the response.
3988
+ # @return [String]
3989
+ #
3990
+ # @!attribute [rw] limit
3991
+ # The maximum number of path statistics to return. Valid values are 1
3992
+ # to 100.
3993
+ # @return [Integer]
3994
+ #
3995
+ # @!attribute [rw] number_of_top_traffic_bots_per_path
3996
+ # The maximum number of top bots to include in the statistics for each
3997
+ # path. Valid values are 1 to 10.
3998
+ # @return [Integer]
3999
+ #
4000
+ # @!attribute [rw] next_marker
4001
+ # When you request a list of objects with a `Limit` setting, if the
4002
+ # number of objects that are still available for retrieval exceeds the
4003
+ # limit, WAF returns a `NextMarker` value in the response. To retrieve
4004
+ # the next batch of objects, provide the marker from the prior call in
4005
+ # your next request.
4006
+ # @return [String]
4007
+ #
4008
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetTopPathStatisticsByTrafficRequest AWS API Documentation
4009
+ #
4010
+ class GetTopPathStatisticsByTrafficRequest < Struct.new(
4011
+ :web_acl_arn,
4012
+ :scope,
4013
+ :uri_path_prefix,
4014
+ :time_window,
4015
+ :bot_category,
4016
+ :bot_organization,
4017
+ :bot_name,
4018
+ :limit,
4019
+ :number_of_top_traffic_bots_per_path,
4020
+ :next_marker)
4021
+ SENSITIVE = []
4022
+ include Aws::Structure
4023
+ end
4024
+
4025
+ # @!attribute [rw] path_statistics
4026
+ # The list of path statistics, ordered by request count. Each entry
4027
+ # includes the path, request count, percentage of total traffic, and
4028
+ # the top bots accessing that path.
4029
+ # @return [Array<Types::PathStatistics>]
4030
+ #
4031
+ # @!attribute [rw] total_request_count
4032
+ # The total number of requests that match the query criteria within
4033
+ # the specified time window.
4034
+ # @return [Integer]
4035
+ #
4036
+ # @!attribute [rw] next_marker
4037
+ # When you request a list of objects with a `Limit` setting, if the
4038
+ # number of objects that are still available for retrieval exceeds the
4039
+ # limit, WAF returns a `NextMarker` value in the response. To retrieve
4040
+ # the next batch of objects, provide the marker from the prior call in
4041
+ # your next request.
4042
+ # @return [String]
4043
+ #
4044
+ # @!attribute [rw] top_categories
4045
+ # Category-level aggregations for visualizing bot category to path
4046
+ # relationships. This field is only populated when no bot filters are
4047
+ # applied to the request. Each entry includes the bot category and the
4048
+ # paths accessed by bots in that category.
4049
+ # @return [Array<Types::PathStatistics>]
4050
+ #
4051
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetTopPathStatisticsByTrafficResponse AWS API Documentation
4052
+ #
4053
+ class GetTopPathStatisticsByTrafficResponse < Struct.new(
4054
+ :path_statistics,
4055
+ :total_request_count,
4056
+ :next_marker,
4057
+ :top_categories)
4058
+ SENSITIVE = []
4059
+ include Aws::Structure
4060
+ end
4061
+
3885
4062
  # @!attribute [rw] resource_arn
3886
4063
  # The Amazon Resource Name (ARN) of the resource whose web ACL you
3887
4064
  # want to retrieve.
@@ -6633,6 +6810,47 @@ module Aws::WAFV2
6633
6810
  include Aws::Structure
6634
6811
  end
6635
6812
 
6813
+ # Statistics about bot traffic to a specific URI path, including the
6814
+ # path, request count, percentage of total traffic, and the top bots
6815
+ # accessing that path.
6816
+ #
6817
+ # @!attribute [rw] source
6818
+ # Information about the bot filter that was applied to generate these
6819
+ # statistics. This field is only populated when you filter by bot
6820
+ # category, organization, or name.
6821
+ # @return [Types::FilterSource]
6822
+ #
6823
+ # @!attribute [rw] path
6824
+ # The URI path. For example, `/api/` or `/api/v1/users`.
6825
+ # @return [String]
6826
+ #
6827
+ # @!attribute [rw] request_count
6828
+ # The number of requests to this path within the specified time
6829
+ # window.
6830
+ # @return [Integer]
6831
+ #
6832
+ # @!attribute [rw] percentage
6833
+ # The percentage of total requests that were made to this path.
6834
+ # @return [Float]
6835
+ #
6836
+ # @!attribute [rw] top_bots
6837
+ # The list of top bots accessing this path, ordered by request count.
6838
+ # The number of bots included is determined by the
6839
+ # `NumberOfTopTrafficBotsPerPath` parameter in the request.
6840
+ # @return [Array<Types::BotStatistics>]
6841
+ #
6842
+ # @see http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PathStatistics AWS API Documentation
6843
+ #
6844
+ class PathStatistics < Struct.new(
6845
+ :source,
6846
+ :path,
6847
+ :request_count,
6848
+ :percentage,
6849
+ :top_bots)
6850
+ SENSITIVE = []
6851
+ include Aws::Structure
6852
+ end
6853
+
6636
6854
  # The name of a field in the request payload that contains part or all
6637
6855
  # of your customer's primary phone number.
6638
6856
  #
data/lib/aws-sdk-wafv2.rb CHANGED
@@ -54,7 +54,7 @@ module Aws::WAFV2
54
54
  autoload :EndpointProvider, 'aws-sdk-wafv2/endpoint_provider'
55
55
  autoload :Endpoints, 'aws-sdk-wafv2/endpoints'
56
56
 
57
- GEM_VERSION = '1.125.0'
57
+ GEM_VERSION = '1.126.0'
58
58
 
59
59
  end
60
60
 
data/sig/client.rbs CHANGED
@@ -3184,6 +3184,31 @@ module Aws
3184
3184
  ) -> _GetSampledRequestsResponseSuccess
3185
3185
  | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetSampledRequestsResponseSuccess
3186
3186
 
3187
+ interface _GetTopPathStatisticsByTrafficResponseSuccess
3188
+ include ::Seahorse::Client::_ResponseSuccess[Types::GetTopPathStatisticsByTrafficResponse]
3189
+ def path_statistics: () -> ::Array[Types::PathStatistics]
3190
+ def total_request_count: () -> ::Integer
3191
+ def next_marker: () -> ::String
3192
+ def top_categories: () -> ::Array[Types::PathStatistics]
3193
+ end
3194
+ # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/WAFV2/Client.html#get_top_path_statistics_by_traffic-instance_method
3195
+ def get_top_path_statistics_by_traffic: (
3196
+ web_acl_arn: ::String,
3197
+ scope: ("CLOUDFRONT" | "REGIONAL"),
3198
+ ?uri_path_prefix: ::String,
3199
+ time_window: {
3200
+ start_time: ::Time,
3201
+ end_time: ::Time
3202
+ },
3203
+ ?bot_category: ::String,
3204
+ ?bot_organization: ::String,
3205
+ ?bot_name: ::String,
3206
+ limit: ::Integer,
3207
+ number_of_top_traffic_bots_per_path: ::Integer,
3208
+ ?next_marker: ::String
3209
+ ) -> _GetTopPathStatisticsByTrafficResponseSuccess
3210
+ | (Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options) -> _GetTopPathStatisticsByTrafficResponseSuccess
3211
+
3187
3212
  interface _GetWebACLResponseSuccess
3188
3213
  include ::Seahorse::Client::_ResponseSuccess[Types::GetWebACLResponse]
3189
3214
  def web_acl: () -> Types::WebACL
data/sig/types.rbs CHANGED
@@ -112,6 +112,13 @@ module Aws::WAFV2
112
112
  SENSITIVE: []
113
113
  end
114
114
 
115
+ class BotStatistics
116
+ attr_accessor bot_name: ::String
117
+ attr_accessor request_count: ::Integer
118
+ attr_accessor percentage: ::Float
119
+ SENSITIVE: []
120
+ end
121
+
115
122
  class ByteMatchStatement
116
123
  attr_accessor search_string: ::String
117
124
  attr_accessor field_to_match: Types::FieldToMatch
@@ -503,6 +510,13 @@ module Aws::WAFV2
503
510
  SENSITIVE: []
504
511
  end
505
512
 
513
+ class FilterSource
514
+ attr_accessor bot_category: ::String
515
+ attr_accessor bot_organization: ::String
516
+ attr_accessor bot_name: ::String
517
+ SENSITIVE: []
518
+ end
519
+
506
520
  class FirewallManagerRuleGroup
507
521
  attr_accessor name: ::String
508
522
  attr_accessor priority: ::Integer
@@ -670,6 +684,28 @@ module Aws::WAFV2
670
684
  SENSITIVE: []
671
685
  end
672
686
 
687
+ class GetTopPathStatisticsByTrafficRequest
688
+ attr_accessor web_acl_arn: ::String
689
+ attr_accessor scope: ("CLOUDFRONT" | "REGIONAL")
690
+ attr_accessor uri_path_prefix: ::String
691
+ attr_accessor time_window: Types::TimeWindow
692
+ attr_accessor bot_category: ::String
693
+ attr_accessor bot_organization: ::String
694
+ attr_accessor bot_name: ::String
695
+ attr_accessor limit: ::Integer
696
+ attr_accessor number_of_top_traffic_bots_per_path: ::Integer
697
+ attr_accessor next_marker: ::String
698
+ SENSITIVE: []
699
+ end
700
+
701
+ class GetTopPathStatisticsByTrafficResponse
702
+ attr_accessor path_statistics: ::Array[Types::PathStatistics]
703
+ attr_accessor total_request_count: ::Integer
704
+ attr_accessor next_marker: ::String
705
+ attr_accessor top_categories: ::Array[Types::PathStatistics]
706
+ SENSITIVE: []
707
+ end
708
+
673
709
  class GetWebACLForResourceRequest
674
710
  attr_accessor resource_arn: ::String
675
711
  SENSITIVE: []
@@ -1109,6 +1145,15 @@ module Aws::WAFV2
1109
1145
  SENSITIVE: []
1110
1146
  end
1111
1147
 
1148
+ class PathStatistics
1149
+ attr_accessor source: Types::FilterSource
1150
+ attr_accessor path: ::String
1151
+ attr_accessor request_count: ::Integer
1152
+ attr_accessor percentage: ::Float
1153
+ attr_accessor top_bots: ::Array[Types::BotStatistics]
1154
+ SENSITIVE: []
1155
+ end
1156
+
1112
1157
  class PhoneNumberField
1113
1158
  attr_accessor identifier: ::String
1114
1159
  SENSITIVE: []
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-wafv2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.125.0
4
+ version: 1.126.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services