Services
| Operation | Description | Sample | Rule |
|---|---|---|---|
| get-services | Y | N | |
| list-services | Y | N | |
| watch-services | Y | N | |
| create-services | Service created (NodePort/LoadBalancer exposure = persistence or C2 channel). | Y | Y |
| update-services | Changes an existing Service, e.g. switching its type to NodePort for external exposure. Elastic covers update alongside create and patch. | Y | Y |
| patch-services | Same NodePort exposure signal as update, via patch, applied to an already-approved Service rather than a new, more visible one. | Y | Y |
| delete-services | Y | N | |
| deletecollection-services | Y | N | |
| get-services-proxy | N | N | |
| create-services-proxy | N | N | |
| update-services-proxy | N | N | |
| patch-services-proxy | N | N | |
| delete-services-proxy | N | N | |
| get-services-status | Y | N | |
| update-services-status | Y | N | |
| patch-services-status | Y | N | |
| any-services | Synthetic aggregation for rules that filter the services resource with no specific verb. Not a distinct audit record; hosts rule listings that key on objectRef.resource alone. | N | N |
get services
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services",
"verb": "get",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T04:47:04.318724Z",
"stageTimestamp": "2026-07-02T04:47:04.320323Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
list services
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services?limit=500&timeout=3s",
"verb": "list",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T04:47:04.445621Z",
"stageTimestamp": "2026-07-02T04:47:04.449541Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
watch services
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services?resourceVersion=1404&timeout=3s&watch=true",
"verb": "watch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T04:47:04.451062Z",
"stageTimestamp": "2026-07-02T04:47:07.452795Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
create services
#Description
Service created (NodePort/LoadBalancer exposure = persistence or C2 channel).
Detection Fields #
Detection-relevant subfields inside this operation's requestObject, present only when the audit policy captured the request body and the submitted manifest set the field.
| Name | Description | Rules |
|---|---|---|
requestObject. | type determines how the Service is exposed. | 6 detection rules |
Rule-derived Detection Fields #
Fields referenced by at least one attached detection rule. This view counts distinct rules and is not a complete event schema.
| Name | Rules | Vendors |
|---|---|---|
requestObject.spec.type | 6 detection rules | Elastic, Panther, Splunk |
objectRef.resource | 4 detection rules | Elastic, Panther, Splunk |
verb | 4 detection rules | Elastic, Panther, Splunk |
annotations.authorization.k8s.io/decision | 1 detection rule | Elastic |
responseStatus.code | 1 detection rule | Panther |
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "bf70c113-4df3-407e-8804-6c9363498fe0",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/default/services?fieldManager=kubectl-client-side-apply&fieldValidation=Strict",
"verb": "create",
"user": {
"username": "kubernetes-admin",
"uid": "aws-iam-authenticator:591511147606:AIDAYTOGP2RLJGRCUIGJZ",
"groups": [
"system:masters",
"system:authenticated"
]
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.27.2 (darwin/arm64) kubernetes/7f6f68f",
"objectRef": {
"resource": "services",
"namespace": "default",
"name": "nginx",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 201
},
"requestObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "nginx",
"namespace": "default",
"creationTimestamp": null,
"labels": {
"name": "nginx"
},
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": {
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"annotations": {},
"labels": {
"name": "nginx"
},
"name": "nginx",
"namespace": "default"
},
"spec": {
"ports": [
{
"name": "http",
"nodePort": 30080,
"port": 80
}
],
"selector": {
"name": "nginx"
},
"type": "NodePort"
}
}
}
},
"spec": {
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": 80,
"nodePort": 30080
}
],
"selector": {
"name": "nginx"
},
"type": "NodePort",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "nginx",
"namespace": "default",
"uid": "f5348e0d-31d1-4407-9114-ca124798397b",
"resourceVersion": "2618495",
"creationTimestamp": "2023-12-13T16:12:47Z",
"labels": {
"name": "nginx"
},
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": {
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"annotations": {},
"labels": {
"name": "nginx"
},
"name": "nginx",
"namespace": "default"
},
"spec": {
"ports": [
{
"name": "http",
"nodePort": 30080,
"port": 80
}
],
"selector": {
"name": "nginx"
},
"type": "NodePort"
}
}
}
},
"spec": {
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": 80,
"nodePort": 30080
}
],
"selector": {
"name": "nginx"
},
"clusterIP": "10.100.131.54",
"clusterIPs": [
"10.100.131.54"
],
"type": "NodePort",
"sessionAffinity": "None",
"externalTrafficPolicy": "Cluster",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2023-12-13T16:12:47.977900Z",
"stageTimestamp": "2023-12-13T16:12:48.027898Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": ""
}
}
Common Indicators #
Positive field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis. This is separate from Fields accounting, which also includes exclusions and counts distinct attached rules.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
verb | eq | create | 2 rules | panther, splunk |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → NodePort opens a port on each worker node hosting the service and forwards external traffic to labeled pods. Confirm whether the exposure was approved and which workloads are reachable. Disclaimer: This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs. Kubernetes NodePort services enable external access to cluster pods by opening a port on each worker node. This can be exploited by attackers to bypass network security, intercept traffic, or establish unauthorized communication channels. The detection rule identifies suspicious NodePort service creation or modification by monitoring Kubernetes audit logs for specific actions and authorization decisions, helping to mitigate potential security risks. The Kubernetes Fleet integration with Audit Logs enabled or similarly structured data is required to be compatible with this rule.Elastic #
T1133↳ also matches update-services: update services, patch-services: patch services Investigation guide
Triage and analysis#
Investigating GKE Exposed Service Created With Type NodePort#
Possible investigation steps#
client.user.email, source.ip, and user_agent.original.gcp.audit.resource_name and gcp.audit.request for the service name, namespace, selector, and port.False positive analysis#
system:addon-manager patch is excluded; unexpected create or update from that actor should still be investigated.Response and remediation#
T1133↳ also matches update-services: update services, patch-services: patch services Investigation guide
Triage and analysis#
Investigating Kubernetes Exposed Service Created With Type NodePort#
Possible investigation steps#
False positive analysis#
Response and remediation#
Setup#
Splunk #
T1204Panther #
T1190T1190
References #
update services
#Description
Changes an existing Service, e.g. switching its type to NodePort for external exposure. Elastic covers update alongside create and patch.
Detection Fields #
Detection-relevant subfields inside this operation's requestObject, present only when the audit policy captured the request body and the submitted manifest set the field.
| Name | Description | Rules |
|---|---|---|
requestObject. | type determines how the Service is exposed. | 2 detection rules |
Rule-derived Detection Fields #
Fields referenced by at least one attached detection rule. This view counts distinct rules and is not a complete event schema.
| Name | Rules | Vendors |
|---|---|---|
requestObject.spec.type | 2 detection rules | Elastic |
annotations.authorization.k8s.io/decision | 1 detection rule | Elastic |
objectRef.resource | 1 detection rule | Elastic |
verb | 1 detection rule | Elastic |
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services?fieldManager=kubectl-replace&fieldValidation=Strict",
"verb": "update",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=4cf95d11cbd90036bab41cdc6b88cc8f91550e9135ed4bb61495b02f647812ff"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"uid": "00000000-0000-0000-0000-000000000000",
"apiVersion": "v1",
"resourceVersion": "555"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "555",
"creationTimestamp": "2026-07-02T21:30:27Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.242.55",
"clusterIPs": [
"10.96.242.55"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "555",
"creationTimestamp": "2026-07-02T21:30:27Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.242.55",
"clusterIPs": [
"10.96.242.55"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2026-07-02T21:30:31.122255Z",
"stageTimestamp": "2026-07-02T21:30:31.125073Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → NodePort opens a port on each worker node hosting the service and forwards external traffic to labeled pods. Confirm whether the exposure was approved and which workloads are reachable. Disclaimer: This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs. Kubernetes NodePort services enable external access to cluster pods by opening a port on each worker node. This can be exploited by attackers to bypass network security, intercept traffic, or establish unauthorized communication channels. The detection rule identifies suspicious NodePort service creation or modification by monitoring Kubernetes audit logs for specific actions and authorization decisions, helping to mitigate potential security risks. The Kubernetes Fleet integration with Audit Logs enabled or similarly structured data is required to be compatible with this rule.Elastic #
T1133↳ also matches create-services: create services, patch-services: patch services Investigation guide
Triage and analysis#
Investigating GKE Exposed Service Created With Type NodePort#
Possible investigation steps#
client.user.email, source.ip, and user_agent.original.gcp.audit.resource_name and gcp.audit.request for the service name, namespace, selector, and port.False positive analysis#
system:addon-manager patch is excluded; unexpected create or update from that actor should still be investigated.Response and remediation#
T1133↳ also matches create-services: create services, patch-services: patch services Investigation guide
Triage and analysis#
Investigating Kubernetes Exposed Service Created With Type NodePort#
Possible investigation steps#
False positive analysis#
Response and remediation#
Setup#
patch services
#Description
Same NodePort exposure signal as update, via patch, applied to an already-approved Service rather than a new, more visible one.
Detection Fields #
Detection-relevant subfields inside this operation's requestObject, present only when the audit policy captured the request body and the submitted manifest set the field.
| Name | Description | Rules |
|---|---|---|
requestObject. | type determines how the Service is exposed. | 2 detection rules |
Rule-derived Detection Fields #
Fields referenced by at least one attached detection rule. This view counts distinct rules and is not a complete event schema.
| Name | Rules | Vendors |
|---|---|---|
requestObject.spec.type | 2 detection rules | Elastic |
annotations.authorization.k8s.io/decision | 1 detection rule | Elastic |
objectRef.resource | 1 detection rule | Elastic |
verb | 1 detection rule | Elastic |
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services?fieldManager=kubectl-patch",
"verb": "patch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"metadata": {
"labels": {
"dw-harn-patched": "1"
}
}
},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1412",
"creationTimestamp": "2026-07-02T04:47:04Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.31.22",
"clusterIPs": [
"10.96.31.22"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2026-07-02T04:47:07.529860Z",
"stageTimestamp": "2026-07-02T04:47:07.535873Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → NodePort opens a port on each worker node hosting the service and forwards external traffic to labeled pods. Confirm whether the exposure was approved and which workloads are reachable. Disclaimer: This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs. Kubernetes NodePort services enable external access to cluster pods by opening a port on each worker node. This can be exploited by attackers to bypass network security, intercept traffic, or establish unauthorized communication channels. The detection rule identifies suspicious NodePort service creation or modification by monitoring Kubernetes audit logs for specific actions and authorization decisions, helping to mitigate potential security risks. The Kubernetes Fleet integration with Audit Logs enabled or similarly structured data is required to be compatible with this rule.Elastic #
T1133↳ also matches create-services: create services, update-services: update services Investigation guide
Triage and analysis#
Investigating GKE Exposed Service Created With Type NodePort#
Possible investigation steps#
client.user.email, source.ip, and user_agent.original.gcp.audit.resource_name and gcp.audit.request for the service name, namespace, selector, and port.False positive analysis#
system:addon-manager patch is excluded; unexpected create or update from that actor should still be investigated.Response and remediation#
T1133↳ also matches create-services: create services, update-services: update services Investigation guide
Triage and analysis#
Investigating Kubernetes Exposed Service Created With Type NodePort#
Possible investigation steps#
False positive analysis#
Response and remediation#
Setup#
delete services
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services",
"verb": "delete",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "DeleteOptions",
"apiVersion": "meta.k8s.io/__internal",
"propagationPolicy": "Background"
},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1415",
"creationTimestamp": "2026-07-02T04:47:04Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.31.22",
"clusterIPs": [
"10.96.31.22"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2026-07-02T04:47:07.600969Z",
"stageTimestamp": "2026-07-02T04:47:07.609602Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
deletecollection services
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services?labelSelector=dw-harn-patched",
"verb": "deletecollection",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=3ffde68ef687218e01296d94b0aa59c81cc98de2bd73ab70e21510c8cd4b9cec"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"responseObject": {
"kind": "ServiceList",
"apiVersion": "v1",
"metadata": {
"resourceVersion": "629"
},
"items": [
{
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "625",
"creationTimestamp": "2026-07-02T23:12:28Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.89.6",
"clusterIPs": [
"10.96.89.6"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
}
]
},
"requestReceivedTimestamp": "2026-07-02T23:12:31.886267Z",
"stageTimestamp": "2026-07-02T23:12:31.897848Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
get services/proxy
#create services/proxy
#update services/proxy
#patch services/proxy
#delete services/proxy
#get services/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services/status",
"verb": "get",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=4cf95d11cbd90036bab41cdc6b88cc8f91550e9135ed4bb61495b02f647812ff"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"apiVersion": "v1",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T21:30:31.191721Z",
"stageTimestamp": "2026-07-02T21:30:31.193245Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
update services/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services/status?fieldManager=kubectl-replace&fieldValidation=Strict",
"verb": "update",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=4cf95d11cbd90036bab41cdc6b88cc8f91550e9135ed4bb61495b02f647812ff"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"uid": "00000000-0000-0000-0000-000000000000",
"apiVersion": "v1",
"resourceVersion": "555",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "555",
"creationTimestamp": "2026-07-02T21:30:27Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.242.55",
"clusterIPs": [
"10.96.242.55"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "555",
"creationTimestamp": "2026-07-02T21:30:27Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.242.55",
"clusterIPs": [
"10.96.242.55"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2026-07-02T21:30:31.323280Z",
"stageTimestamp": "2026-07-02T21:30:31.326314Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
patch services/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/dw-harn/services/dw-harn-services/status?fieldManager=kubectl-patch",
"verb": "patch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=786fc563dbb253683c44d23d0aac3742ea61ade7f27a43f50934a82662e15409"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "services",
"namespace": "dw-harn",
"name": "dw-harn-services",
"apiVersion": "v1",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {},
"responseObject": {
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dw-harn-services",
"namespace": "dw-harn",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "557",
"creationTimestamp": "2026-07-02T22:17:08Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 80,
"targetPort": 80
}
],
"selector": {
"app": "dw-harn"
},
"clusterIP": "10.96.151.58",
"clusterIPs": [
"10.96.151.58"
],
"type": "ClusterIP",
"sessionAffinity": "None",
"ipFamilies": [
"IPv4"
],
"ipFamilyPolicy": "SingleStack",
"internalTrafficPolicy": "Cluster"
},
"status": {
"loadBalancer": {}
}
},
"requestReceivedTimestamp": "2026-07-02T22:17:11.939864Z",
"stageTimestamp": "2026-07-02T22:17:11.941957Z",
"annotations": {
"authorization.k8s.io/decision": "allow",
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"kubeadm:cluster-admins\" of ClusterRole \"cluster-admin\" to Group \"kubeadm:cluster-admins\""
}
}
any verb on services (synthetic aggregation)
#Description
Synthetic aggregation for rules that filter the services resource with no specific verb. Not a distinct audit record; hosts rule listings that key on objectRef.resource alone.