@composurecdk/wafv2 0.0.0-stage → 0.13.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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -2
  3. package/dist/commonjs/alarm-config.d.ts +60 -0
  4. package/dist/commonjs/alarm-config.d.ts.map +1 -0
  5. package/dist/commonjs/alarm-config.js +3 -0
  6. package/dist/commonjs/alarm-config.js.map +1 -0
  7. package/dist/commonjs/alarm-defaults.d.ts +34 -0
  8. package/dist/commonjs/alarm-defaults.d.ts.map +1 -0
  9. package/dist/commonjs/alarm-defaults.js +37 -0
  10. package/dist/commonjs/alarm-defaults.js.map +1 -0
  11. package/dist/commonjs/alarms.d.ts +18 -0
  12. package/dist/commonjs/alarms.d.ts.map +1 -0
  13. package/dist/commonjs/alarms.js +94 -0
  14. package/dist/commonjs/alarms.js.map +1 -0
  15. package/dist/commonjs/association.d.ts +21 -0
  16. package/dist/commonjs/association.d.ts.map +1 -0
  17. package/dist/commonjs/association.js +61 -0
  18. package/dist/commonjs/association.js.map +1 -0
  19. package/dist/commonjs/custom-response.d.ts +52 -0
  20. package/dist/commonjs/custom-response.d.ts.map +1 -0
  21. package/dist/commonjs/custom-response.js +137 -0
  22. package/dist/commonjs/custom-response.js.map +1 -0
  23. package/dist/commonjs/defaults.d.ts +89 -0
  24. package/dist/commonjs/defaults.d.ts.map +1 -0
  25. package/dist/commonjs/defaults.js +90 -0
  26. package/dist/commonjs/defaults.js.map +1 -0
  27. package/dist/commonjs/index.d.ts +30 -0
  28. package/dist/commonjs/index.d.ts.map +1 -0
  29. package/dist/commonjs/index.js +35 -0
  30. package/dist/commonjs/index.js.map +1 -0
  31. package/dist/commonjs/logging-filter.d.ts +27 -0
  32. package/dist/commonjs/logging-filter.d.ts.map +1 -0
  33. package/dist/commonjs/logging-filter.js +17 -0
  34. package/dist/commonjs/logging-filter.js.map +1 -0
  35. package/dist/commonjs/logging.d.ts +59 -0
  36. package/dist/commonjs/logging.d.ts.map +1 -0
  37. package/dist/commonjs/logging.js +91 -0
  38. package/dist/commonjs/logging.js.map +1 -0
  39. package/dist/commonjs/metrics.d.ts +58 -0
  40. package/dist/commonjs/metrics.d.ts.map +1 -0
  41. package/dist/commonjs/metrics.js +67 -0
  42. package/dist/commonjs/metrics.js.map +1 -0
  43. package/dist/commonjs/names.d.ts +46 -0
  44. package/dist/commonjs/names.d.ts.map +1 -0
  45. package/dist/commonjs/names.js +140 -0
  46. package/dist/commonjs/names.js.map +1 -0
  47. package/dist/commonjs/package.json +3 -0
  48. package/dist/commonjs/rule-builder.d.ts +123 -0
  49. package/dist/commonjs/rule-builder.d.ts.map +1 -0
  50. package/dist/commonjs/rule-builder.js +163 -0
  51. package/dist/commonjs/rule-builder.js.map +1 -0
  52. package/dist/commonjs/scope.d.ts +15 -0
  53. package/dist/commonjs/scope.d.ts.map +1 -0
  54. package/dist/commonjs/scope.js +35 -0
  55. package/dist/commonjs/scope.js.map +1 -0
  56. package/dist/commonjs/web-acl-builder.d.ts +152 -0
  57. package/dist/commonjs/web-acl-builder.d.ts.map +1 -0
  58. package/dist/commonjs/web-acl-builder.js +205 -0
  59. package/dist/commonjs/web-acl-builder.js.map +1 -0
  60. package/dist/esm/alarm-config.d.ts +60 -0
  61. package/dist/esm/alarm-config.d.ts.map +1 -0
  62. package/dist/esm/alarm-config.js +2 -0
  63. package/dist/esm/alarm-config.js.map +1 -0
  64. package/dist/esm/alarm-defaults.d.ts +34 -0
  65. package/dist/esm/alarm-defaults.d.ts.map +1 -0
  66. package/dist/esm/alarm-defaults.js +34 -0
  67. package/dist/esm/alarm-defaults.js.map +1 -0
  68. package/dist/esm/alarms.d.ts +18 -0
  69. package/dist/esm/alarms.d.ts.map +1 -0
  70. package/dist/esm/alarms.js +90 -0
  71. package/dist/esm/alarms.js.map +1 -0
  72. package/dist/esm/association.d.ts +21 -0
  73. package/dist/esm/association.d.ts.map +1 -0
  74. package/dist/esm/association.js +58 -0
  75. package/dist/esm/association.js.map +1 -0
  76. package/dist/esm/custom-response.d.ts +52 -0
  77. package/dist/esm/custom-response.d.ts.map +1 -0
  78. package/dist/esm/custom-response.js +133 -0
  79. package/dist/esm/custom-response.js.map +1 -0
  80. package/dist/esm/defaults.d.ts +89 -0
  81. package/dist/esm/defaults.d.ts.map +1 -0
  82. package/dist/esm/defaults.js +87 -0
  83. package/dist/esm/defaults.js.map +1 -0
  84. package/dist/esm/index.d.ts +30 -0
  85. package/dist/esm/index.d.ts.map +1 -0
  86. package/dist/esm/index.js +23 -0
  87. package/dist/esm/index.js.map +1 -0
  88. package/dist/esm/logging-filter.d.ts +27 -0
  89. package/dist/esm/logging-filter.d.ts.map +1 -0
  90. package/dist/esm/logging-filter.js +14 -0
  91. package/dist/esm/logging-filter.js.map +1 -0
  92. package/dist/esm/logging.d.ts +59 -0
  93. package/dist/esm/logging.d.ts.map +1 -0
  94. package/dist/esm/logging.js +88 -0
  95. package/dist/esm/logging.js.map +1 -0
  96. package/dist/esm/metrics.d.ts +58 -0
  97. package/dist/esm/metrics.d.ts.map +1 -0
  98. package/dist/esm/metrics.js +63 -0
  99. package/dist/esm/metrics.js.map +1 -0
  100. package/dist/esm/names.d.ts +46 -0
  101. package/dist/esm/names.d.ts.map +1 -0
  102. package/dist/esm/names.js +132 -0
  103. package/dist/esm/names.js.map +1 -0
  104. package/dist/esm/package.json +3 -0
  105. package/dist/esm/rule-builder.d.ts +123 -0
  106. package/dist/esm/rule-builder.d.ts.map +1 -0
  107. package/dist/esm/rule-builder.js +160 -0
  108. package/dist/esm/rule-builder.js.map +1 -0
  109. package/dist/esm/scope.d.ts +15 -0
  110. package/dist/esm/scope.d.ts.map +1 -0
  111. package/dist/esm/scope.js +32 -0
  112. package/dist/esm/scope.js.map +1 -0
  113. package/dist/esm/web-acl-builder.d.ts +152 -0
  114. package/dist/esm/web-acl-builder.d.ts.map +1 -0
  115. package/dist/esm/web-acl-builder.js +202 -0
  116. package/dist/esm/web-acl-builder.js.map +1 -0
  117. package/package.json +78 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-acl-builder.d.ts","sourceRoot":"","sources":["../../src/web-acl-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import { Annotations, Lazy } from "aws-cdk-lib";
2
+ import { CfnWebACL, } from "aws-cdk-lib/aws-wafv2";
3
+ import { COPY_STATE, resolve } from "@composurecdk/core";
4
+ import { taggedBuilder } from "@composurecdk/cloudformation";
5
+ import { AlarmDefinitionBuilder, createAlarms, } from "@composurecdk/cloudwatch";
6
+ import { resolveWebAclAlarmDefinitions } from "./alarms.js";
7
+ import { associate } from "./association.js";
8
+ import { CustomResponseBodies } from "./custom-response.js";
9
+ import { DEFAULT_RULE_PRIORITY_STEP, WEB_ACL_DEFAULTS, WEB_ACL_VISIBILITY_DEFAULTS, } from "./defaults.js";
10
+ import { sanitizeMetricName, webAclBaseName, validateMetricName, validateRuleName, validateWebAclName, } from "./names.js";
11
+ import { createWebAclRuleBuilder, } from "./rule-builder.js";
12
+ import { configureLogging } from "./logging.js";
13
+ import { webAclMetrics } from "./metrics.js";
14
+ import { checkCloudFrontRegion } from "./scope.js";
15
+ const SAMPLING_ANNOTATION = "@composurecdk/wafv2:sampling-unredacted";
16
+ const MAX_RATE_BASED_RULES = 10;
17
+ class WebAclBuilder {
18
+ props = {};
19
+ #rules = [];
20
+ #associations = [];
21
+ #defaultAction = { action: "allow" };
22
+ #customAlarms = [];
23
+ /**
24
+ * What happens to a request no rule decides on. `allow` is the default;
25
+ * `block` can answer with a custom response.
26
+ */
27
+ defaultAction(action, response) {
28
+ if (action === "allow" && response !== undefined) {
29
+ throw new Error(`defaultAction("allow") cannot take a custom response; only Block can.`);
30
+ }
31
+ this.#defaultAction = { action, response };
32
+ return this;
33
+ }
34
+ /**
35
+ * Adds a rule. Rules are evaluated in the order they are added, unless a
36
+ * rule sets its own `.priority(n)`.
37
+ *
38
+ * @param name - Unique within the web ACL; also the rule's default metric name.
39
+ * @param configure - Sets the rule's statement, action and the rest.
40
+ */
41
+ addRule(name, configure) {
42
+ validateRuleName(name);
43
+ if (this.#rules.some((r) => r.name === name)) {
44
+ throw new Error(`WebAclBuilder.addRule: duplicate rule name "${name}". Each rule must have a unique name.`);
45
+ }
46
+ this.#rules.push({ name, configure });
47
+ return this;
48
+ }
49
+ /**
50
+ * Protects a regional resource with this web ACL. Call it once per
51
+ * resource. Accepts an ARN, a CDK reference CloudFormation's
52
+ * `AWS::WAFv2::WebACLAssociation` takes (an Application Load Balancer, an
53
+ * AppSync API), or an API Gateway stage, as a concrete value or a `ref`.
54
+ *
55
+ * A CLOUDFRONT web ACL cannot be associated: pass its ARN to the
56
+ * distribution's `webAclId` instead.
57
+ */
58
+ associateWith(target) {
59
+ this.#associations.push(target);
60
+ return this;
61
+ }
62
+ /**
63
+ * Adds a custom alarm. The metric factory receives the web ACL's
64
+ * {@link WebAclMetrics}, so a rule's metrics come by its name:
65
+ * `(m) => m.rule("PerIpRate").countedRequests()`.
66
+ */
67
+ addAlarm(key, configure) {
68
+ this.#customAlarms.push(configure(new AlarmDefinitionBuilder(key)));
69
+ return this;
70
+ }
71
+ /**
72
+ * Adds a set of custom alarms in one call: each entry exactly as if by
73
+ * `addAlarm(key, configure)`, in the record's iteration order.
74
+ */
75
+ addAlarms(alarms) {
76
+ for (const [key, configure] of Object.entries(alarms)) {
77
+ this.addAlarm(key, configure);
78
+ }
79
+ return this;
80
+ }
81
+ /** @internal — see ADR-0005. */
82
+ [COPY_STATE](target) {
83
+ target.#rules.push(...this.#rules);
84
+ target.#associations.push(...this.#associations);
85
+ target.#defaultAction = this.#defaultAction;
86
+ target.#customAlarms.push(...this.#customAlarms);
87
+ }
88
+ build(scope, id, context = {}) {
89
+ const owner = `WebAclBuilder "${id}"`;
90
+ const { scope: aclScope = WEB_ACL_DEFAULTS.scope, metricName: userMetricName, sampledRequests = WEB_ACL_DEFAULTS.sampledRequests, logging: loggingConfig = WEB_ACL_DEFAULTS.logging, recommendedAlarms, ...rest } = this.props;
91
+ if (rest.name !== undefined)
92
+ validateWebAclName(rest.name);
93
+ if (aclScope === "CLOUDFRONT") {
94
+ if (this.#associations.length > 0) {
95
+ throw new Error(`${owner} has scope CLOUDFRONT, so it cannot be associated with associateWith(). ` +
96
+ `Pass its ARN (result.webAcl.attrArn) to the distribution's webAclId instead.`);
97
+ }
98
+ checkCloudFrontRegion(scope, id);
99
+ }
100
+ if (userMetricName !== undefined)
101
+ validateMetricName(userMetricName);
102
+ const bodies = new CustomResponseBodies(owner);
103
+ const { action, response } = this.#defaultAction;
104
+ const defaultAction = action === "allow"
105
+ ? { allow: {} }
106
+ : { block: bodies.block("default action", "DefaultAction", response) };
107
+ const rules = this.#buildRules(owner, bodies, sampledRequests);
108
+ const usesSampling = sampledRequests || rules.some((r) => r.sampled);
109
+ // Read through `in`, not as a typed property: `dataProtectionConfig` is not in
110
+ // CfnWebACLProps at this package's aws-cdk-lib floor (2.93.0), so it only
111
+ // reaches `rest` as a pass-through prop on a newer install.
112
+ const hasDataProtection = "dataProtectionConfig" in rest && rest.dataProtectionConfig !== undefined;
113
+ if (usesSampling && !hasDataProtection) {
114
+ Annotations.of(scope).addWarningV2(SAMPLING_ANNOTATION, `${owner} keeps sampled requests without a dataProtectionConfig. Samples keep every ` +
115
+ `header and are not redacted by logging, so credentials in them are visible in the ` +
116
+ `console. Set a dataProtectionConfig, or turn sampling off.`);
117
+ }
118
+ // The derived name comes from the construct's path, so it is read once the construct exists.
119
+ const metricName = userMetricName ??
120
+ Lazy.string({ produce: () => sanitizeMetricName(webAclBaseName(webAcl)) });
121
+ const webAcl = new CfnWebACL(scope, id, {
122
+ ...rest,
123
+ scope: aclScope,
124
+ defaultAction,
125
+ rules: rules.map((r) => r.property),
126
+ customResponseBodies: bodies.toProperty(),
127
+ visibilityConfig: {
128
+ ...WEB_ACL_VISIBILITY_DEFAULTS,
129
+ metricName,
130
+ sampledRequestsEnabled: sampledRequests,
131
+ },
132
+ });
133
+ const associations = associate(scope, id, webAcl.attrArn, this.#associations.map((target) => resolve(target, context)));
134
+ const metrics = webAclMetrics(webAcl, metricName, new Map(rules.map((r) => [r.property.name, r.metricName])));
135
+ const alarms = createAlarms(scope, id, [
136
+ ...resolveWebAclAlarmDefinitions(owner, metrics, rules, recommendedAlarms),
137
+ ...this.#customAlarms.map((b) => b.resolve(metrics)),
138
+ ]);
139
+ return {
140
+ webAcl,
141
+ associations,
142
+ ...configureLogging(scope, id, owner, webAcl, loggingConfig, context),
143
+ metrics,
144
+ alarms,
145
+ };
146
+ }
147
+ #buildRules(owner, bodies, sampledRequests) {
148
+ const rules = this.#rules.map((entry, index) => {
149
+ const builder = createWebAclRuleBuilder();
150
+ entry.configure(builder);
151
+ return builder.toRule({
152
+ name: entry.name,
153
+ owner,
154
+ defaultPriority: index * DEFAULT_RULE_PRIORITY_STEP,
155
+ sampledRequests,
156
+ bodies,
157
+ });
158
+ });
159
+ const byPriority = new Map();
160
+ for (const { property: rule } of rules) {
161
+ const other = byPriority.get(rule.priority);
162
+ if (other !== undefined) {
163
+ throw new Error(`${owner}: rules "${other}" and "${rule.name}" both have priority ${String(rule.priority)}. ` +
164
+ `Priorities must be unique; change one rule's .priority(n).`);
165
+ }
166
+ byPriority.set(rule.priority, rule.name);
167
+ }
168
+ const rateBased = rules.filter((r) => r.rateBased);
169
+ if (rateBased.length > MAX_RATE_BASED_RULES) {
170
+ throw new Error(`${owner} has ${String(rateBased.length)} rate-based rules; AWS WAF allows at most ` +
171
+ `${String(MAX_RATE_BASED_RULES)} per web ACL. See https://docs.aws.amazon.com/waf/latest/developerguide/limits.html.`);
172
+ }
173
+ return rules;
174
+ }
175
+ }
176
+ /**
177
+ * Creates a builder for an AWS WAF web ACL, with its rules, its associations
178
+ * and the visibility settings the rest of the package relies on.
179
+ *
180
+ * By default the web ACL is regional, allows what no rule blocks, publishes
181
+ * CloudWatch metrics for itself and every rule ({@link WEB_ACL_VISIBILITY_DEFAULTS}),
182
+ * and keeps no sampled requests ({@link WEB_ACL_DEFAULTS}).
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * createWebAclBuilder()
187
+ * .associateWith(ref("api", (r: RestApiBuilderResult) => r.api.deploymentStage))
188
+ * .addRule("BlockAdmin", (rule) =>
189
+ * rule.statement({
190
+ * byteMatchStatement: {
191
+ * fieldToMatch: { uriPath: {} },
192
+ * positionalConstraint: "STARTS_WITH",
193
+ * searchString: "/admin",
194
+ * textTransformations: [{ priority: 0, type: "NONE" }],
195
+ * },
196
+ * }).respond(404));
197
+ * ```
198
+ */
199
+ export function createWebAclBuilder() {
200
+ return taggedBuilder(WebAclBuilder);
201
+ }
202
+ //# sourceMappingURL=web-acl-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-acl-builder.js","sourceRoot":"","sources":["../../src/web-acl-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,80 @@
1
1
  {
2
2
  "name": "@composurecdk/wafv2",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.13.0",
4
+ "description": "Composable AWS WAF web ACL builder with rate limits, alarms and redacted logging",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/laazyj/composureCDK.git",
8
+ "directory": "packages/wafv2"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "keywords": [
16
+ "aws",
17
+ "cdk",
18
+ "aws-cdk",
19
+ "infrastructure-as-code",
20
+ "iac",
21
+ "composurecdk",
22
+ "waf",
23
+ "wafv2",
24
+ "web-acl",
25
+ "firewall",
26
+ "rate-limiting"
27
+ ],
28
+ "author": "Jason Duffett (https://github.com/laazyj)",
29
+ "license": "MIT",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "type": "module",
34
+ "engines": {
35
+ "node": ">=20"
36
+ },
37
+ "tshy": {
38
+ "exports": {
39
+ "./package.json": "./package.json",
40
+ ".": "./src/index.ts"
41
+ }
42
+ },
43
+ "peerDependencies": {
44
+ "@composurecdk/cloudformation": "^0.13.0",
45
+ "@composurecdk/cloudwatch": "^0.13.0",
46
+ "@composurecdk/core": "^0.13.0",
47
+ "@composurecdk/logs": "^0.13.0",
48
+ "aws-cdk-lib": "^2.93.0",
49
+ "constructs": "^10.0.0"
50
+ },
51
+ "devDependencies": {
52
+ "@composurecdk/cdk-testing": "*",
53
+ "@types/node": "^26.6.6",
54
+ "aws-cdk-lib": "^2.275.0",
55
+ "constructs": "^10.8.1",
56
+ "typescript": "^6.0.3",
57
+ "vitest": "^5.0.0"
58
+ },
59
+ "exports": {
60
+ "./package.json": "./package.json",
61
+ ".": {
62
+ "import": {
63
+ "types": "./dist/esm/index.d.ts",
64
+ "default": "./dist/esm/index.js"
65
+ },
66
+ "require": {
67
+ "types": "./dist/commonjs/index.d.ts",
68
+ "default": "./dist/commonjs/index.js"
69
+ }
70
+ }
71
+ },
72
+ "main": "./dist/commonjs/index.js",
73
+ "types": "./dist/commonjs/index.d.ts",
74
+ "module": "./dist/esm/index.js",
75
+ "nx": {
76
+ "tags": [
77
+ "scope:lib"
78
+ ]
79
+ }
80
+ }