You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The design intention for this page is to describing what NGINX App Protect is, expanding on the detail from the [landing page]({{< ref "/waf/" >}}).
18
-
19
-
It is also an opportunity to explain the difference between NGINX App Protect versions, and how integrates with other products in the NGINX ecosystem.
20
-
21
-
The text here will likely be synthesized from the Overview descriptions at the top of the [Administration Guides]({{< ref "/nap-waf/v4/admin-guide/install.md#overview" >}}), but there's also detail from [F5.com](https://www.f5.com/products/nginx/nginx-app-protect) that can be added.
They will be used in later steps to download and apply necessary resources for policy lifecycle management.
57
+
They will be used to download and apply necessary resources.
54
58
55
59
## Configure Docker for the F5 Container Registry
56
60
@@ -109,7 +113,9 @@ kubectl apply -f crds/
109
113
110
114
### Update NGINX configuration
111
115
112
-
Policy Lifecycle Management requires specific NGINX configuration to integrate with the Policy Controller. The key directive `app_protect_default_config_source` must be set to `"custom-resource"` to enable PLM integration.
116
+
Policy lifecycle management requires NGINX configuration to integrate with the Policy Controller.
117
+
118
+
The directive `app_protect_default_config_source` must be set to `"custom-resource"` to enable PLM integration.
-`app_protect_policy_file my-policy-cr` - References the Custom Resource policy name instead of bundle file paths
176
-
-`app_protect_security_log my-logging-cr` - References the Custom Resource logging configuration name
179
+
These are the Policy lifecycle management directives:
180
+
181
+
-`app_protect_default_config_source "custom-resource"` - Enables the Policy Controller integration
182
+
-`app_protect_policy_file my-policy-cr` - References a Custom Resource policy name instead of bundle file paths
183
+
-`app_protect_security_log my-logging-cr` - References a Custom Resource logging configuration name
177
184
178
185
## Update Helm configuration
179
186
180
-
Policy Lifecycle Management is deployed as part of the NGINX App Protect Helm chart. To enable PLM, you must configure the Policy Controller settings in your `values.yaml` file.
187
+
Policy lifecycle management is deployed as part of the F5 WAF for NGINX Helm chart.
181
188
182
-
Set the following configuration in your `values.yaml`:
189
+
To enable it, you must configure the Policy Controller settings in your `values.yaml` file:
183
190
184
191
```yaml
185
192
appprotect:
@@ -203,7 +210,7 @@ appprotect:
203
210
204
211
### NGINX Repository Configuration
205
212
206
-
To enable signature updates with the APSignatures CRD, configure the NGINX repository credentials:
213
+
To enable signature updates with the APSignatures CRD, add your NGINX repository credentials:
207
214
208
215
```yaml
209
216
appprotect:
@@ -212,7 +219,6 @@ appprotect:
212
219
nginxKey: <base64-encoded-key>
213
220
```
214
221
215
-
216
222
## Configure Docker
217
223
218
224
Create a Docker registry secret or add the details to _values.yaml_:
Check that all components are deployed successfully:
250
+
Check that all components are deployed successfully using _kubectl get_:
245
251
246
252
```shell
247
253
kubectl get pods -n <namespace>
248
254
kubectl get crds | grep appprotect.f5.com
249
255
kubectl get all -n <namespace>
250
256
```
251
257
252
-
## Using Policy Lifecycle Management
258
+
## Use Policy lifecycle management
259
+
260
+
### Create Policy resources
253
261
254
-
### Creating Policy Resources
262
+
Once Policy lifecycle management is deployed, you can create policy resources using Kubernetes manifests.
255
263
256
-
Once PLM is deployed, you can create policy resources using Kubernetes manifests. Apply the following Custom Resource examples or create your own based on these templates:
264
+
Here are two examples, which you can use to create your own:
257
265
258
-
**Sample APPolicy Resource:**
266
+
{{< tabs name="resource-examples">}}
267
+
268
+
{{% tab name="APPolicy" %}}
259
269
260
270
Create a file named `dataguard-blocking-policy.yaml` with the following content:
2025-09-04T10:05:52Z INFO job state is {"controller": "appolicy", "controllerGroup": "appprotect.f5.com", "controllerKind": "APPolicy", "APPolicy": {"name":"dataguard-blocking","namespace":"localenv-plm"}, "namespace": "localenv-plm", "name": "dataguard-blocking", "reconcileID": "6bab7054-8a8a-411f-8ecc-01399a308ef6", "job": "dataguard-blocking-appolicy-compile", "state": "ready"}
@@ -399,46 +415,41 @@ You should see the compiled policy bundle file in the directory structure.
399
415
400
416
### Test policy enforcement
401
417
402
-
To verify that the policy bundles are being deployed and enforced correctly:
418
+
There are a few steps involved in testing that policy bundles are being deployed and enforced correctly.
419
+
420
+
First, use the Custom Resource name in your NGINX configuration:
403
421
404
-
**Update NGINX Configuration**
405
-
406
-
Use the Custom Resource name in your NGINX configuration:
407
422
```nginx
408
423
app_protect_policy_file dataguard-blocking;
409
424
```
410
425
411
-
**Reload NGINX**
412
-
413
-
Reload NGINX to apply the new policy:
426
+
Then, reload NGINX to apply the new policy:
427
+
414
428
```shell
415
429
nginx -s reload
416
430
```
417
-
418
-
**Test Policy Enforcement**
419
431
420
-
Send a request that should be blocked by the dataguard policy to verify it's working:
432
+
You can then send a request that should be blocked by the dataguard policy to verify it's working:
433
+
421
434
```shell
422
435
curl "http://[CLUSTER-IP]:80/?a=<script>"
423
436
```
424
437
425
-
The request should be blocked, confirming that PLM has successfully compiled and deployed the policy.
438
+
The request should be blocked, confirming that Policy lifecycle management has successfully compiled and deployed the policy.
426
439
427
-
## Common issues
440
+
## Possible issues
428
441
429
-
**Policy Controller Not Starting**
430
-
- Verify CRDs are installed: `kubectl get crds | grep appprotect.f5.com`
431
-
- Check pod logs: `kubectl logs <policy-controller-pod> -n <namespace>`
442
+
**Policy Controller does not start**
443
+
- Verify the CRDs are installed: `kubectl get crds | grep appprotect.f5.com`
444
+
- Check the pod logs: `kubectl logs <policy-controller-pod> -n <namespace>`
432
445
- Ensure proper RBAC permissions are configured
433
446
434
-
**Policy Compilation Failures**
447
+
**Policies fail to compile**
435
448
- Check Policy Controller logs for compilation errors
436
-
- Verify WAF compiler image is accessible
437
-
- Ensure policy syntax is valid
438
-
439
-
**Bundle Storage Issues**
440
-
- Verify persistent volume is properly mounted
441
-
- Check storage permissions (should be 101:101)
442
-
- Confirm PVC is bound to the correct PV
449
+
- Verify the WAF compiler image is accessible
450
+
- Ensure the policy syntax is valid
443
451
444
-
For additional troubleshooting information, see the [Troubleshooting Guide]({{< ref "/nap-waf/v5/troubleshooting-guide/troubleshooting.md#nginx-app-protect-5" >}}).
452
+
**Issues with bundle storage**
453
+
- Verify the persistent volume is properly mounted
0 commit comments