Capture request/response bodies in audit-log, extend it to MCP

custom_fields_by_lua adds request_body/response_body to the http-log
payload. Bodies and the raw Authorization header are now both logged
in clear text — dev only, flagged in the plugin file itself.
This commit is contained in:
Stéphane Tailland
2026-08-21 14:40:20 +02:00
parent fa7abfe5bd
commit 6fa122207e
4 changed files with 39 additions and 0 deletions
+1
View File
@@ -15,4 +15,5 @@ resources:
- mcp/consumergroups.yaml - mcp/consumergroups.yaml
- mcp/ai-mcp-proxy.yaml - mcp/ai-mcp-proxy.yaml
- mcp/openid-connect.yaml - mcp/openid-connect.yaml
- mcp/audit-log.yaml
- mcp/pluginbindings.yaml - mcp/pluginbindings.yaml
+15
View File
@@ -0,0 +1,15 @@
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: ${NAME}-catalog-mcp-audit-log
namespace: ${NAMESPACE}
plugin: http-log
# dev only: request/response bodies and the raw Authorization (JWT) header
# are captured in clear text. Not acceptable as-is for a non-dev environment.
config:
http_endpoint: ${AUDIT_LOG_ENDPOINT}
method: POST
content_type: application/json
custom_fields_by_lua:
request_body: "return kong.request.get_raw_body()"
response_body: "return kong.response.get_raw_body()"
+18
View File
@@ -33,3 +33,21 @@ spec:
group: configuration.konghq.com group: configuration.konghq.com
kind: KongRoute kind: KongRoute
name: ${NAME}-catalog-mcp name: ${NAME}-catalog-mcp
---
apiVersion: configuration.konghq.com/v1alpha1
kind: KongPluginBinding
metadata:
name: ${NAME}-catalog-mcp-audit-log-binding
namespace: ${NAMESPACE}
spec:
controlPlaneRef:
type: konnectNamespacedRef
konnectNamespacedRef:
name: ${CONTROL_PLANE_REF_NAME}
pluginRef:
name: ${NAME}-catalog-mcp-audit-log
targets:
serviceRef:
group: configuration.konghq.com
kind: KongService
name: ${NAME}-catalog-mcp
+5
View File
@@ -4,7 +4,12 @@ metadata:
name: ${NAME}-catalog-api-audit-log name: ${NAME}-catalog-api-audit-log
namespace: ${NAMESPACE} namespace: ${NAMESPACE}
plugin: http-log plugin: http-log
# dev only: request/response bodies and the raw Authorization (JWT) header
# are captured in clear text. Not acceptable as-is for a non-dev environment.
config: config:
http_endpoint: ${AUDIT_LOG_ENDPOINT} http_endpoint: ${AUDIT_LOG_ENDPOINT}
method: POST method: POST
content_type: application/json content_type: application/json
custom_fields_by_lua:
request_body: "return kong.request.get_raw_body()"
response_body: "return kong.response.get_raw_body()"