@pulumi/cloudngfwaws 1.1.0-alpha.1777010799 → 2.0.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.
package/README.md CHANGED
@@ -8,7 +8,7 @@ This package is available for several languages/platforms:
8
8
 
9
9
  - JavaScript/TypeScript: [`@pulumi/cloudngfwaws`](https://www.npmjs.com/package/@pulumi/cloudngfwaws)
10
10
  - Python: [`pulumi-cloudngfwaws`](https://pypi.org/project/pulumi-cloudngfwaws/)
11
- - Go: [`github.com/pulumi/pulumi-cloudngfwaws/sdk/go/cloudngfwaws`](https://pkg.go.dev/github.com/pulumi/pulumi-cloudngfwaws/sdk/go/cloudngfwaws)
11
+ - Go: [`github.com/pulumi/pulumi-cloudngfwaws/sdk/v2/go/cloudngfwaws`](https://pkg.go.dev/github.com/pulumi/pulumi-cloudngfwaws/sdk/v2/go/cloudngfwaws)
12
12
  - .NET: [`Pulumi.CloudNgfwAws`](https://www.nuget.org/packages/Pulumi.CloudNgfwAws)
13
13
 
14
14
  ### Node.js (JavaScript/TypeScript)
@@ -38,7 +38,7 @@ pip install pulumi-cloudngfwaws
38
38
  To use from Go, use `go get` to grab the latest version of the library:
39
39
 
40
40
  ```bash
41
- go get github.com/pulumi/pulumi-cloudngfwaws/sdk/go/cloudngfwaws
41
+ go get github.com/pulumi/pulumi-cloudngfwaws/sdk/v2/go/cloudngfwaws
42
42
  ```
43
43
 
44
44
  ### .NET
package/getNgfw.d.ts CHANGED
@@ -8,25 +8,42 @@ import * as outputs from "./types/output";
8
8
  * * `Firewall`
9
9
  *
10
10
  * ## Example Usage
11
+ *
12
+ * ```typescript
13
+ * import * as pulumi from "@pulumi/pulumi";
14
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
15
+ *
16
+ * const example = cloudngfwaws.getNgfw({
17
+ * name: "example-instance",
18
+ * });
19
+ * ```
11
20
  */
12
- export declare function getNgfw(args: GetNgfwArgs, opts?: pulumi.InvokeOptions): Promise<GetNgfwResult>;
21
+ export declare function getNgfw(args?: GetNgfwArgs, opts?: pulumi.InvokeOptions): Promise<GetNgfwResult>;
13
22
  /**
14
23
  * A collection of arguments for invoking getNgfw.
15
24
  */
16
25
  export interface GetNgfwArgs {
26
+ /**
27
+ * The Account Id.
28
+ */
29
+ accountId?: string;
17
30
  /**
18
31
  * The Firewall ID.
19
32
  */
20
- firewallId: string;
33
+ firewallId?: string;
34
+ /**
35
+ * The NGFW name.
36
+ */
37
+ name?: string;
21
38
  }
22
39
  /**
23
40
  * A collection of values returned by getNgfw.
24
41
  */
25
42
  export interface GetNgfwResult {
26
43
  /**
27
- * The description.
44
+ * The Account Id.
28
45
  */
29
- readonly accountId: string;
46
+ readonly accountId?: string;
30
47
  /**
31
48
  * The list of allowed accounts for this NGFW.
32
49
  */
@@ -68,7 +85,7 @@ export interface GetNgfwResult {
68
85
  /**
69
86
  * The Firewall ID.
70
87
  */
71
- readonly firewallId: string;
88
+ readonly firewallId?: string;
72
89
  /**
73
90
  * The global rulestack for this NGFW.
74
91
  */
@@ -92,12 +109,13 @@ export interface GetNgfwResult {
92
109
  /**
93
110
  * The NGFW name.
94
111
  */
95
- readonly name: string;
112
+ readonly name?: string;
96
113
  readonly privateAccesses: outputs.GetNgfwPrivateAccess[];
97
114
  /**
98
115
  * The rulestack for this NGFW.
99
116
  */
100
117
  readonly rulestack: string;
118
+ readonly securityZones: outputs.GetNgfwSecurityZone[];
101
119
  readonly statuses: outputs.GetNgfwStatus[];
102
120
  /**
103
121
  * Subnet mappings.
@@ -109,6 +127,10 @@ export interface GetNgfwResult {
109
127
  readonly tags: {
110
128
  [key: string]: string;
111
129
  };
130
+ /**
131
+ * Firewall Instance Tier. Allowed values are 'base', 'standard', or 'premium'.
132
+ */
133
+ readonly tier: string;
112
134
  /**
113
135
  * The update token.
114
136
  */
@@ -127,14 +149,31 @@ export interface GetNgfwResult {
127
149
  * * `Firewall`
128
150
  *
129
151
  * ## Example Usage
152
+ *
153
+ * ```typescript
154
+ * import * as pulumi from "@pulumi/pulumi";
155
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
156
+ *
157
+ * const example = cloudngfwaws.getNgfw({
158
+ * name: "example-instance",
159
+ * });
160
+ * ```
130
161
  */
131
- export declare function getNgfwOutput(args: GetNgfwOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output<GetNgfwResult>;
162
+ export declare function getNgfwOutput(args?: GetNgfwOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output<GetNgfwResult>;
132
163
  /**
133
164
  * A collection of arguments for invoking getNgfw.
134
165
  */
135
166
  export interface GetNgfwOutputArgs {
167
+ /**
168
+ * The Account Id.
169
+ */
170
+ accountId?: pulumi.Input<string>;
136
171
  /**
137
172
  * The Firewall ID.
138
173
  */
139
- firewallId: pulumi.Input<string>;
174
+ firewallId?: pulumi.Input<string>;
175
+ /**
176
+ * The NGFW name.
177
+ */
178
+ name?: pulumi.Input<string>;
140
179
  }
package/getNgfw.js CHANGED
@@ -13,11 +13,23 @@ const utilities = require("./utilities");
13
13
  * * `Firewall`
14
14
  *
15
15
  * ## Example Usage
16
+ *
17
+ * ```typescript
18
+ * import * as pulumi from "@pulumi/pulumi";
19
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
20
+ *
21
+ * const example = cloudngfwaws.getNgfw({
22
+ * name: "example-instance",
23
+ * });
24
+ * ```
16
25
  */
17
26
  function getNgfw(args, opts) {
27
+ args = args || {};
18
28
  opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {});
19
29
  return pulumi.runtime.invoke("cloudngfwaws:index/getNgfw:getNgfw", {
30
+ "accountId": args.accountId,
20
31
  "firewallId": args.firewallId,
32
+ "name": args.name,
21
33
  }, opts);
22
34
  }
23
35
  exports.getNgfw = getNgfw;
@@ -29,11 +41,23 @@ exports.getNgfw = getNgfw;
29
41
  * * `Firewall`
30
42
  *
31
43
  * ## Example Usage
44
+ *
45
+ * ```typescript
46
+ * import * as pulumi from "@pulumi/pulumi";
47
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
48
+ *
49
+ * const example = cloudngfwaws.getNgfw({
50
+ * name: "example-instance",
51
+ * });
52
+ * ```
32
53
  */
33
54
  function getNgfwOutput(args, opts) {
55
+ args = args || {};
34
56
  opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {});
35
57
  return pulumi.runtime.invokeOutput("cloudngfwaws:index/getNgfw:getNgfw", {
58
+ "accountId": args.accountId,
36
59
  "firewallId": args.firewallId,
60
+ "name": args.name,
37
61
  }, opts);
38
62
  }
39
63
  exports.getNgfwOutput = getNgfwOutput;
package/getNgfw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"getNgfw.js","sourceRoot":"","sources":["../getNgfw.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iFAAiF;;;AAEjF,yCAAyC;AAGzC,yCAAyC;AAEzC;;;;;;;;GAQG;AACH,SAAgB,OAAO,CAAC,IAAiB,EAAE,IAA2B;IAClE,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,oCAAoC,EAAE;QAC/D,YAAY,EAAE,IAAI,CAAC,UAAU;KAChC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AALD,0BAKC;AA8GD;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,IAAuB,EAAE,IAAiC;IACpF,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,oCAAoC,EAAE;QACrE,YAAY,EAAE,IAAI,CAAC,UAAU;KAChC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AALD,sCAKC"}
1
+ {"version":3,"file":"getNgfw.js","sourceRoot":"","sources":["../getNgfw.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iFAAiF;;;AAEjF,yCAAyC;AAGzC,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,OAAO,CAAC,IAAkB,EAAE,IAA2B;IACnE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,oCAAoC,EAAE;QAC/D,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,YAAY,EAAE,IAAI,CAAC,UAAU;QAC7B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AARD,0BAQC;AA2HD;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,aAAa,CAAC,IAAwB,EAAE,IAAiC;IACrF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,oCAAoC,EAAE;QACrE,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,YAAY,EAAE,IAAI,CAAC,UAAU;QAC7B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AARD,sCAQC"}
@@ -28,6 +28,10 @@ export interface GetNgfwLogProfileArgs {
28
28
  * The unique ID of the account.
29
29
  */
30
30
  accountId?: string;
31
+ /**
32
+ * The Firewall Id for the NGFW.
33
+ */
34
+ firewallId?: string;
31
35
  /**
32
36
  * The name of the NGFW.
33
37
  */
@@ -56,7 +60,7 @@ export interface GetNgfwLogProfileResult {
56
60
  /**
57
61
  * The Firewall Id for the NGFW.
58
62
  */
59
- readonly firewallId: string;
63
+ readonly firewallId?: string;
60
64
  /**
61
65
  * The provider-assigned unique ID for this managed resource.
62
66
  */
@@ -110,6 +114,10 @@ export interface GetNgfwLogProfileOutputArgs {
110
114
  * The unique ID of the account.
111
115
  */
112
116
  accountId?: pulumi.Input<string>;
117
+ /**
118
+ * The Firewall Id for the NGFW.
119
+ */
120
+ firewallId?: pulumi.Input<string>;
113
121
  /**
114
122
  * The name of the NGFW.
115
123
  */
@@ -29,6 +29,7 @@ function getNgfwLogProfile(args, opts) {
29
29
  opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {});
30
30
  return pulumi.runtime.invoke("cloudngfwaws:index/getNgfwLogProfile:getNgfwLogProfile", {
31
31
  "accountId": args.accountId,
32
+ "firewallId": args.firewallId,
32
33
  "ngfw": args.ngfw,
33
34
  }, opts);
34
35
  }
@@ -57,6 +58,7 @@ function getNgfwLogProfileOutput(args, opts) {
57
58
  opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {});
58
59
  return pulumi.runtime.invokeOutput("cloudngfwaws:index/getNgfwLogProfile:getNgfwLogProfile", {
59
60
  "accountId": args.accountId,
61
+ "firewallId": args.firewallId,
60
62
  "ngfw": args.ngfw,
61
63
  }, opts);
62
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getNgfwLogProfile.js","sourceRoot":"","sources":["../getNgfwLogProfile.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iFAAiF;;;AAEjF,yCAAyC;AAGzC,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,iBAAiB,CAAC,IAA4B,EAAE,IAA2B;IACvF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,wDAAwD,EAAE;QACnF,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AAPD,8CAOC;AAiED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,uBAAuB,CAAC,IAAkC,EAAE,IAAiC;IACzG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,wDAAwD,EAAE;QACzF,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AAPD,0DAOC"}
1
+ {"version":3,"file":"getNgfwLogProfile.js","sourceRoot":"","sources":["../getNgfwLogProfile.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iFAAiF;;;AAEjF,yCAAyC;AAGzC,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,iBAAiB,CAAC,IAA4B,EAAE,IAA2B;IACvF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,wDAAwD,EAAE;QACnF,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,YAAY,EAAE,IAAI,CAAC,UAAU;QAC7B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AARD,8CAQC;AAqED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,uBAAuB,CAAC,IAAkC,EAAE,IAAiC;IACzG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,wDAAwD,EAAE;QACzF,WAAW,EAAE,IAAI,CAAC,SAAS;QAC3B,YAAY,EAAE,IAAI,CAAC,UAAU;QAC7B,MAAM,EAAE,IAAI,CAAC,IAAI;KACpB,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AARD,0DAQC"}
package/ngfw.d.ts CHANGED
@@ -10,47 +10,272 @@ import * as outputs from "./types/output";
10
10
  *
11
11
  * * `Firewall`
12
12
  *
13
- * ## Example Usage
13
+ * ## Configuration Guide
14
+ *
15
+ * ***
16
+ *
17
+ * ### V1 Schema — Existing Deployments Only
18
+ *
19
+ * > **Important:** V1 schema is for existing customers who already have firewalls deployed with Terraform.
20
+ * New firewalls must be created using the V2 schema.
21
+ *
22
+ * ***
23
+ *
24
+ * #### 1. Managing an Existing Firewall (no configuration changes)
25
+ *
26
+ * Use the V1 schema as-is. No steps required beyond ensuring your existing state is in sync.
27
+ *
28
+ * **Steps:**
29
+ *
30
+ * 1. Verify there is no unintended drift:
31
+ * 2. If the plan is clean, no action needed. If drift is detected, review and apply:
32
+ *
33
+ * **Full example — existing V1 firewall:**
14
34
  *
15
35
  * ```typescript
16
36
  * import * as pulumi from "@pulumi/pulumi";
17
- * import * as aws from "@pulumi/aws";
18
37
  * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
19
38
  *
20
39
  * const rs = new cloudngfwaws.CommitRulestack("rs", {rulestack: "my-rulestack"});
21
40
  * const example = new cloudngfwaws.Ngfw("example", {
22
41
  * name: "example-instance",
42
+ * vpcId: exampleAwsVpc.id,
43
+ * accountId: "111111111111",
23
44
  * description: "Example description",
24
- * azLists: ["use1-az1"],
45
+ * endpointMode: "ServiceManaged",
46
+ * subnetMappings: [
47
+ * {
48
+ * subnetId: subnet1.id,
49
+ * },
50
+ * {
51
+ * subnetId: subnet2.id,
52
+ * },
53
+ * ],
25
54
  * rulestack: rs.rulestack,
26
55
  * tags: {
27
56
  * Foo: "bar",
28
57
  * },
29
58
  * });
30
- * const exampleVpc = new aws.index.Vpc("example", {
31
- * cidrBlock: "172.16.0.0/16",
59
+ * ```
60
+ *
61
+ * ***
62
+ *
63
+ * #### 2. Configuring Egress NAT on an Existing Firewall (V1)
64
+ *
65
+ * Egress NAT can be added to an existing V1 firewall without recreating the resource.
66
+ *
67
+ * > `ipPoolType` accepts `AWSService` or `BYOIP`. Use `BYOIP` together with `ipamPoolId`
68
+ * if bringing your own IP pool.
69
+ *
70
+ * **Steps:**
71
+ *
72
+ * 1. Add the `egressNat` block to your existing resource.
73
+ *
74
+ * **Full example — existing V1 firewall with Egress NAT enabled:**
75
+ *
76
+ * ```typescript
77
+ * import * as pulumi from "@pulumi/pulumi";
78
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
79
+ *
80
+ * const example = new cloudngfwaws.Ngfw("example", {
81
+ * name: "example-instance",
82
+ * vpcId: "vpc-0a1b2c3d4e5f00001",
83
+ * accountId: "111111111111",
84
+ * description: "Example description",
85
+ * endpointMode: "CustomerManaged",
86
+ * subnetMappings: [
87
+ * {
88
+ * availabilityZone: "us-east-1a",
89
+ * },
90
+ * {
91
+ * availabilityZone: "us-east-1c",
92
+ * },
93
+ * ],
94
+ * rulestack: "my-rulestack",
95
+ * egressNats: [{
96
+ * enabled: true,
97
+ * settings: [{
98
+ * ipPoolType: "AWSService",
99
+ * }],
100
+ * }],
101
+ * tags: {
102
+ * Foo: "bar",
103
+ * },
104
+ * });
105
+ * ```
106
+ *
107
+ * **To disable Egress NAT:** set `enabled = false` and re-apply.
108
+ *
109
+ * ***
110
+ *
111
+ * #### 3. Configuring Security Zones on an Existing Firewall (V1)
112
+ *
113
+ * Security zones let you enable or disable Egress NAT per endpoint and add or remove private CIDR prefixes.
114
+ *
115
+ * > **Prerequisite:** Endpoints must be successfully created and in `ACCEPTED` state before
116
+ * security zones can be configured. Check `status.attachment[*].status` in Terraform state
117
+ * or the AWS console before proceeding.
118
+ *
119
+ * **Steps:**
120
+ *
121
+ * 1. Confirm endpoint status is `ACCEPTED`:
122
+ *
123
+ * **To remove private prefixes:** remove the CIDR entries from `cidrs` and re-apply.
124
+ * **To disable Egress NAT for a specific zone:** set `egressNatEnabled = false` and re-apply.
125
+ *
126
+ * ***
127
+ *
128
+ * ### V2 Schema — New Firewalls
129
+ *
130
+ * > **Important:** New firewalls can only be created using the V2 schema. Use `azList`
131
+ * instead of `subnetMapping`, and `endpoints` instead of `endpointMode`/`subnetMapping`.
132
+ *
133
+ * ***
134
+ *
135
+ * #### 1. Creating a New Firewall (V2)
136
+ *
137
+ * Firewall creation uses `azList` to specify availability zones.
138
+ * **Do not include `endpoints` during creation** — they must be added in a separate update after the firewall is running.
139
+ *
140
+ * **Steps:**
141
+ *
142
+ * 1. Define the resource with `azList` and no `endpoints` block.
143
+ * 2. Proceed to **Step 2** once the firewall reaches `RUNNING` state.
144
+ *
145
+ * **Full example — new V2 firewall (creation only):**
146
+ *
147
+ * ```typescript
148
+ * import * as pulumi from "@pulumi/pulumi";
149
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
150
+ *
151
+ * const example = new cloudngfwaws.Ngfw("example", {
152
+ * name: "my-firewall",
153
+ * description: "My new firewall",
154
+ * azLists: [
155
+ * "use1-az1",
156
+ * "use1-az4",
157
+ * ],
158
+ * allowlistAccounts: ["111111111111"],
32
159
  * tags: {
33
- * name: "tf-example",
160
+ * Owner: "my-team",
34
161
  * },
35
162
  * });
36
- * const subnet1 = new aws.index.Subnet("subnet1", {
37
- * vpcId: myVpc.id,
38
- * cidrBlock: "172.16.10.0/24",
39
- * availabilityZone: "us-west-2a",
163
+ * ```
164
+ *
165
+ * ***
166
+ *
167
+ * #### 2. Adding Endpoints to a V2 Firewall
168
+ *
169
+ * Endpoints connect the firewall to customer VPCs. They must be added in a separate
170
+ * a separate update after the firewall is running.
171
+ *
172
+ * **Steps:**
173
+ *
174
+ * 1. Confirm the firewall status is `RUNNING`:
175
+ *
176
+ * **Full example — V2 firewall with endpoints added:**
177
+ *
178
+ * ```typescript
179
+ * import * as pulumi from "@pulumi/pulumi";
180
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
181
+ *
182
+ * const example = new cloudngfwaws.Ngfw("example", {
183
+ * name: "my-firewall",
184
+ * description: "My new firewall",
185
+ * azLists: [
186
+ * "use1-az1",
187
+ * "use1-az4",
188
+ * ],
189
+ * allowlistAccounts: ["111111111111"],
190
+ * endpoints: [
191
+ * {
192
+ * accountId: "111111111111",
193
+ * vpcId: "vpc-0a1b2c3d4e5f00002",
194
+ * subnetId: "subnet-0a1b2c3d4e5f00001",
195
+ * mode: "ServiceManaged",
196
+ * },
197
+ * {
198
+ * accountId: "111111111111",
199
+ * vpcId: "vpc-0a1b2c3d4e5f00003",
200
+ * subnetId: "subnet-0a1b2c3d4e5f00002",
201
+ * mode: "ServiceManaged",
202
+ * },
203
+ * ],
40
204
  * tags: {
41
- * name: "tf-example",
205
+ * Owner: "my-team",
42
206
  * },
43
207
  * });
44
- * const subnet2 = new aws.index.Subnet("subnet2", {
45
- * vpcId: myVpc.id,
46
- * cidrBlock: "172.16.20.0/24",
47
- * availabilityZone: "us-west-2b",
208
+ * ```
209
+ *
210
+ * ***
211
+ *
212
+ * #### 3. Configuring Egress NAT on a V2 Firewall
213
+ *
214
+ * Egress NAT can be enabled at the firewall level once at least one endpoint is accepted.
215
+ *
216
+ * > **Prerequisite:** At least one endpoint must be in `ACCEPTED` state.
217
+ *
218
+ * **Steps:**
219
+ *
220
+ * 1. Add the `egressNat` block to the resource.
221
+ *
222
+ * **Full example — V2 firewall with Egress NAT enabled:**
223
+ *
224
+ * ```typescript
225
+ * import * as pulumi from "@pulumi/pulumi";
226
+ * import * as cloudngfwaws from "@pulumi/cloudngfwaws";
227
+ *
228
+ * const example = new cloudngfwaws.Ngfw("example", {
229
+ * name: "my-firewall",
230
+ * description: "My new firewall",
231
+ * azLists: [
232
+ * "use1-az1",
233
+ * "use1-az4",
234
+ * ],
235
+ * allowlistAccounts: ["111111111111"],
236
+ * endpoints: [
237
+ * {
238
+ * accountId: "111111111111",
239
+ * vpcId: "vpc-0a1b2c3d4e5f00002",
240
+ * subnetId: "subnet-0a1b2c3d4e5f00001",
241
+ * mode: "ServiceManaged",
242
+ * },
243
+ * {
244
+ * accountId: "111111111111",
245
+ * vpcId: "vpc-0a1b2c3d4e5f00003",
246
+ * subnetId: "subnet-0a1b2c3d4e5f00002",
247
+ * mode: "ServiceManaged",
248
+ * },
249
+ * ],
250
+ * egressNats: [{
251
+ * enabled: true,
252
+ * settings: [{
253
+ * ipPoolType: "AWSService",
254
+ * }],
255
+ * }],
48
256
  * tags: {
49
- * name: "tf-example",
257
+ * Owner: "my-team",
50
258
  * },
51
259
  * });
52
260
  * ```
53
261
  *
262
+ * **To disable Egress NAT:** set `enabled = false` and re-apply.
263
+ *
264
+ * ***
265
+ *
266
+ * #### 4. Configuring Private Prefixes and Per-Endpoint Egress NAT (V2)
267
+ *
268
+ * Once an endpoint is accepted, you can enable or disable Egress NAT and configure private
269
+ * CIDR prefixes on a per-endpoint basis within the `endpoints` block.
270
+ *
271
+ * > **Prerequisite:** The endpoint must be in `ACCEPTED` state. The `endpointId`
272
+ * is a read-only computed value — retrieve it from Terraform state after apply:
273
+ *
274
+ * **To remove private prefixes:** remove the CIDR entries from `cidrs` and re-apply.
275
+ * **To disable per-endpoint Egress NAT:** set `egressNatEnabled = false` and re-apply.
276
+ *
277
+ * ***
278
+ *
54
279
  * ## Import
55
280
  *
56
281
  * import name is <account_id>:<name>
@@ -76,7 +301,7 @@ export declare class Ngfw extends pulumi.CustomResource {
76
301
  */
77
302
  static isInstance(obj: any): obj is Ngfw;
78
303
  /**
79
- * The description.
304
+ * The Account Id.
80
305
  */
81
306
  readonly accountId: pulumi.Output<string | undefined>;
82
307
  /**
@@ -94,7 +319,7 @@ export declare class Ngfw extends pulumi.CustomResource {
94
319
  /**
95
320
  * The list of availability zone IDs for this NGFW.
96
321
  */
97
- readonly azLists: pulumi.Output<string[]>;
322
+ readonly azLists: pulumi.Output<string[] | undefined>;
98
323
  /**
99
324
  * Enables or disables change protection for the NGFW.
100
325
  */
@@ -146,6 +371,7 @@ export declare class Ngfw extends pulumi.CustomResource {
146
371
  * The rulestack for this NGFW.
147
372
  */
148
373
  readonly rulestack: pulumi.Output<string | undefined>;
374
+ readonly securityZones: pulumi.Output<outputs.NgfwSecurityZone[] | undefined>;
149
375
  readonly statuses: pulumi.Output<outputs.NgfwStatus[]>;
150
376
  /**
151
377
  * Subnet mappings.
@@ -157,6 +383,10 @@ export declare class Ngfw extends pulumi.CustomResource {
157
383
  readonly tags: pulumi.Output<{
158
384
  [key: string]: string;
159
385
  }>;
386
+ /**
387
+ * Firewall Instance Tier. Allowed values are 'base', 'standard', or 'premium'.
388
+ */
389
+ readonly tier: pulumi.Output<string>;
160
390
  /**
161
391
  * The update token.
162
392
  */
@@ -173,14 +403,14 @@ export declare class Ngfw extends pulumi.CustomResource {
173
403
  * @param args The arguments to use to populate this resource's properties.
174
404
  * @param opts A bag of options that control this resource's behavior.
175
405
  */
176
- constructor(name: string, args: NgfwArgs, opts?: pulumi.CustomResourceOptions);
406
+ constructor(name: string, args?: NgfwArgs, opts?: pulumi.CustomResourceOptions);
177
407
  }
178
408
  /**
179
409
  * Input properties used for looking up and filtering Ngfw resources.
180
410
  */
181
411
  export interface NgfwState {
182
412
  /**
183
- * The description.
413
+ * The Account Id.
184
414
  */
185
415
  accountId?: pulumi.Input<string>;
186
416
  /**
@@ -250,6 +480,7 @@ export interface NgfwState {
250
480
  * The rulestack for this NGFW.
251
481
  */
252
482
  rulestack?: pulumi.Input<string>;
483
+ securityZones?: pulumi.Input<pulumi.Input<inputs.NgfwSecurityZone>[]>;
253
484
  statuses?: pulumi.Input<pulumi.Input<inputs.NgfwStatus>[]>;
254
485
  /**
255
486
  * Subnet mappings.
@@ -261,6 +492,10 @@ export interface NgfwState {
261
492
  tags?: pulumi.Input<{
262
493
  [key: string]: pulumi.Input<string>;
263
494
  }>;
495
+ /**
496
+ * Firewall Instance Tier. Allowed values are 'base', 'standard', or 'premium'.
497
+ */
498
+ tier?: pulumi.Input<string>;
264
499
  /**
265
500
  * The update token.
266
501
  */
@@ -276,7 +511,7 @@ export interface NgfwState {
276
511
  */
277
512
  export interface NgfwArgs {
278
513
  /**
279
- * The description.
514
+ * The Account Id.
280
515
  */
281
516
  accountId?: pulumi.Input<string>;
282
517
  /**
@@ -294,7 +529,7 @@ export interface NgfwArgs {
294
529
  /**
295
530
  * The list of availability zone IDs for this NGFW.
296
531
  */
297
- azLists: pulumi.Input<pulumi.Input<string>[]>;
532
+ azLists?: pulumi.Input<pulumi.Input<string>[]>;
298
533
  /**
299
534
  * Enables or disables change protection for the NGFW.
300
535
  */
@@ -309,6 +544,10 @@ export interface NgfwArgs {
309
544
  */
310
545
  endpointMode?: pulumi.Input<string>;
311
546
  endpoints?: pulumi.Input<pulumi.Input<inputs.NgfwEndpoint>[]>;
547
+ /**
548
+ * The Firewall ID.
549
+ */
550
+ firewallId?: pulumi.Input<string>;
312
551
  /**
313
552
  * The global rulestack for this NGFW.
314
553
  */
@@ -330,6 +569,7 @@ export interface NgfwArgs {
330
569
  * The rulestack for this NGFW.
331
570
  */
332
571
  rulestack?: pulumi.Input<string>;
572
+ securityZones?: pulumi.Input<pulumi.Input<inputs.NgfwSecurityZone>[]>;
333
573
  /**
334
574
  * Subnet mappings.
335
575
  */
@@ -340,6 +580,10 @@ export interface NgfwArgs {
340
580
  tags?: pulumi.Input<{
341
581
  [key: string]: pulumi.Input<string>;
342
582
  }>;
583
+ /**
584
+ * Firewall Instance Tier. Allowed values are 'base', 'standard', or 'premium'.
585
+ */
586
+ tier?: pulumi.Input<string>;
343
587
  userIds?: pulumi.Input<pulumi.Input<inputs.NgfwUserId>[]>;
344
588
  /**
345
589
  * The VPC ID for the NGFW.