CertificateSigningRequests
| Operation | Description | Sample | Rule |
|---|---|---|---|
| get-certificatesigningrequests | Y | N | |
| list-certificatesigningrequests | Y | N | |
| watch-certificatesigningrequests | Y | N | |
| create-certificatesigningrequests | Certificate signing request created (e.g. for TLS bootstrapping or privilege escalation via cert issuance). | Y | Y |
| update-certificatesigningrequests | Modifies a pending CertificateSigningRequest's status. Elastic flags create/update/patch by a non-control-plane identity as cert-based privilege escalation. | Y | Y |
| patch-certificatesigningrequests | Same as update via patch. Elastic flags create/update/patch of a CSR by a non-control-plane identity as cert-based privilege escalation or self-approval. | Y | Y |
| delete-certificatesigningrequests | Y | N | |
| deletecollection-certificatesigningrequests | Y | N | |
| get-certificatesigningrequests-approval | Y | N | |
| update-certificatesigningrequests-approval | CSR approval/denial (Kubernetes client-certificate privilege escalation path). | Y | Y |
| patch-certificatesigningrequests-approval | N | Y | |
| get-certificatesigningrequests-status | Y | N | |
| update-certificatesigningrequests-status | Y | N | |
| patch-certificatesigningrequests-status | Y | N | |
| any-certificatesigningrequests | Synthetic aggregation for rules that filter the certificatesigningrequests resource with no specific verb. Not a distinct audit record; hosts rule listings that key on objectRef.resource alone. | N | N |
get certificatesigningrequests
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-10e47a",
"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": "certificatesigningrequests",
"name": "dw-harn-csr-10e47a",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T04:49:00.174658Z",
"stageTimestamp": "2026-07-02T04:49:00.175967Z",
"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\""
}
}
References #
list certificatesigningrequests
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests?fieldSelector=metadata.name%3Ddw-harn-csr-83be6c",
"verb": "list",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.995206Z",
"stageTimestamp": "2026-07-02T22:49:23.996759Z",
"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\""
}
}
References #
watch certificatesigningrequests
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests?resourceVersion=1467&timeout=3s&watch=true",
"verb": "watch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T22:49:20.345780Z",
"stageTimestamp": "2026-07-02T22:49:23.360135Z",
"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\""
}
}
References #
create certificatesigningrequests
#Description
Certificate signing request created (e.g. for TLS bootstrapping or privilege escalation via cert issuance).
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests?fieldManager=kubectl-create&fieldValidation=Strict",
"verb": "create",
"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": "certificatesigningrequests",
"name": "dw-harn-csr-10e47a",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 201
},
"requestObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-10e47a"
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeFFQMHQwOHhVMGtVCnZqTXZJeGU4UDlzVjhkbkh4VkdHWFVxQjdJQzdGUnp0Nit1bDJVZEQzTmNrMU1aNGZuc3lNL241S09yUWNoN1gKOVJ0T29NVGhoVUJ6aksvR0cyTk1oT09JSjVEd25NWUFYWStIZm84RzVFN0pBbzJLWlNMZHo2UHZGWmYwa1o0Rgo1b01GajJSRTZrRWVlei94NTgrbkd6czBJZUZCNm1BU3V3Z3JHb1RyWUplcmZ5OVorUTMrcGRFb2VUdEYxWHpwCm5MOEJpTXkzNlBwc1duU1p3TDVYMFB3SElnZkc0ckZRcG00d1lDa2FuYWwyNXhZUXAwY3lyZWIrQmhMQU1hUG0KUE1XWnp5Q3NJcTNoR2gybmhJVGhMVUh0YjBVejRFQi9zdksxTnJ3YTU1SFlqUHE4VHBwbHlVZ1BTRXkxblhLWQora0ViQ1R5WTN3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFR2pBUHZndEdjWlNTc1JmRkU5Cjk2eWtVMlZub0owRWhINGo3aEIxYUZCdUE5akVRMVpRUnl4QnFuS2ZGQzRqK0toNUNjWXpTWWhNS3BadW90RC8KV3pXOTZqMDgyRHNpVFd6TTR3K1dhZUdmWEhRc3N6VHVlR3kzR0hwZG8yOW1xNGFOQU85SHhtODF4aXUyR000SApMUjllNVVDRSt4b0ZSVE16T21zbGJ1Y1NvRm5vMkUvcWZMbHhPQWY3WXg3TitFbFRDZ2hmR0dldjdjTXkwb0c0CnVXMlFwVk5vNDhneVpZMkFLZTVzQVZzYWgyWU1KY3VZeHM4bC9YT0RoeVlPaXZSZWRCWWorQ3A2WHkxWG04RFgKQ253cHE1RkExdnRSdmxwalY4aFpSN2FXTmZNNXRYNWVVM0JVKzhScXRWWnRZUFpxenVodFVTbVJ4SjlLVk0zVgpxbzQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
]
},
"status": {}
},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-10e47a",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1857",
"creationTimestamp": "2026-07-02T04:49:00Z"
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeFFQMHQwOHhVMGtVCnZqTXZJeGU4UDlzVjhkbkh4VkdHWFVxQjdJQzdGUnp0Nit1bDJVZEQzTmNrMU1aNGZuc3lNL241S09yUWNoN1gKOVJ0T29NVGhoVUJ6aksvR0cyTk1oT09JSjVEd25NWUFYWStIZm84RzVFN0pBbzJLWlNMZHo2UHZGWmYwa1o0Rgo1b01GajJSRTZrRWVlei94NTgrbkd6czBJZUZCNm1BU3V3Z3JHb1RyWUplcmZ5OVorUTMrcGRFb2VUdEYxWHpwCm5MOEJpTXkzNlBwc1duU1p3TDVYMFB3SElnZkc0ckZRcG00d1lDa2FuYWwyNXhZUXAwY3lyZWIrQmhMQU1hUG0KUE1XWnp5Q3NJcTNoR2gybmhJVGhMVUh0YjBVejRFQi9zdksxTnJ3YTU1SFlqUHE4VHBwbHlVZ1BTRXkxblhLWQora0ViQ1R5WTN3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFR2pBUHZndEdjWlNTc1JmRkU5Cjk2eWtVMlZub0owRWhINGo3aEIxYUZCdUE5akVRMVpRUnl4QnFuS2ZGQzRqK0toNUNjWXpTWWhNS3BadW90RC8KV3pXOTZqMDgyRHNpVFd6TTR3K1dhZUdmWEhRc3N6VHVlR3kzR0hwZG8yOW1xNGFOQU85SHhtODF4aXUyR000SApMUjllNVVDRSt4b0ZSVE16T21zbGJ1Y1NvRm5vMkUvcWZMbHhPQWY3WXg3TitFbFRDZ2hmR0dldjdjTXkwb0c0CnVXMlFwVk5vNDhneVpZMkFLZTVzQVZzYWgyWU1KY3VZeHM4bC9YT0RoeVlPaXZSZWRCWWorQ3A2WHkxWG04RFgKQ253cHE1RkExdnRSdmxwalY4aFpSN2FXTmZNNXRYNWVVM0JVKzhScXRWWnRZUFpxenVodFVTbVJ4SjlLVk0zVgpxbzQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"status": {}
},
"requestReceivedTimestamp": "2026-07-02T04:49:00.110324Z",
"stageTimestamp": "2026-07-02T04:49:00.114882Z",
"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\""
}
}
Common Indicators #
Field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
ServiceName (elastic rule field) | eq | k8s.io | 4 rules | elastic |
EventType (elastic rule field) | eq | io.k8s.certificates.v1.certificatesigningrequests.create | 2 rules | elastic |
EventType (elastic rule field) | in | io.k8s.certificates.v1.certificatesigningrequests.approval.update | 2 rules | elastic |
EventType (elastic rule field) | in | io.k8s.certificates.v1.certificatesigningrequests.create | 2 rules | elastic |
azure.platformlogs.category (elastic rule field) | in | kube-audit | 1 rule | elastic |
azure.platformlogs.category (elastic rule field) | in | kube-audit-admin | 1 rule | elastic |
azure.platformlogs.properties.log.stage (elastic rule field) | eq | responsecomplete | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | eq | create | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | patch | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | update | 1 rule | elastic |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → AKS kube-audit events are carried under the flattened This rule groups CSR create and approval events by Identify the actor ( For create events, Priority CNs that usually indicate privilege escalation intent:Elastic #
T1649↳ also matches update-certificatesigningrequests-approval: update certificatesigningrequests/approval, patch-certificatesigningrequests-approval: patch certificatesigningrequests/approval Investigation guide
Triage and analysis#
Investigating Azure AKS Certificate Signing Request Created or Approved#
azure.platformlogs.properties.log.* subtree and share the ARM operation event.action: Microsoft.ContainerService/managedClusters/diagnosticLogs/Read. A CSR created against the kubernetes.io/kube-apiserver-client signer lets the requester choose the certificate's subject (Common Name and organization/groups); once approved it mints a client certificate for an arbitrary identity that yields access not tied to a token. The default CertificateSubjectRestriction admission controller blocks requests for the system:masters group, so attackers commonly request a Common Name matching an existing privileged user (or another privileged group) instead, making the requested subject the key thing to decode. Node and kubelet certificates use the kube-apiserver-client-kubelet and kubelet-serving signers (whose subject is constrained to the node) and are out of scope; cert-manager and application CSRs use their own signers.Possible investigation steps#
azure.platformlogs.properties.log.user.username (and its groups in azure.platformlogs.properties.log.user.groups) and whether it should submit or approve CSRs. A workload service account (system:serviceaccount:<ns>:<sa>) or masterclient (the local cluster-admin cert) is the higher-concern case.azure.platformlogs.properties.log.requestObject.spec.signerName and decode the base64 CSR in azure.platformlogs.properties.log.requestObject.spec.request to read the requested Common Name and organization (groups); a subject in system:masters or another privileged group is the escalation.verb:update/patch on the approval subresource), which indicates self-approval, and inspect azure.platformlogs.properties.log.userAgent.azure.platformlogs.properties.log.sourceIPs and pivot on it for follow-on privileged API activity using the newly issued certificate.False positive analysis#
kube-apiserver-client-kubelet signer), kubelet-serving CSRs, and cert-manager/application CSRs (custom signers) are out of scope by design; the kube-controller-manager certificate-controller and the AKS aksService approver are excluded by identity.system:*, which would blind the rule to compromised workload service accounts.Response and remediation#
T1098, T1098.006↳ also matches update-certificatesigningrequests-approval: update certificatesigningrequests/approval Investigation guide
Triage and analysis#
Investigating GKE Certificate Signing Request Self-Approved#
client.user.email and normalized CSR name (Esql.csr_name). GKE logs approval on subresource paths (.../csr-name/approval), so the query strips /approval suffixes before correlating. An alert means the same identity both submitted and approved the same CSR within five minutes, a strong indicator of manual self-approval rather than normal system:gcp-controller-manager auto-approval of node certificates.Possible investigation steps#
Esql.event_action_values for the sequence of create followed by approval.update.gcp.audit.request.spec.signerName and decode gcp.audit.request.spec.request on create events for the requested identity.False positive analysis#
Related rules#
Response and remediation#
T1098, T1098.006↳ also matches update-certificatesigningrequests-approval: update certificatesigningrequests/approval Investigation guide
Triage and analysis#
Investigating GKE Client Certificate Signing Request Created or Approved#
client.user.email), source.ip, and user_agent.original. Confirm whether the principal is expected to create or approve CSRs. Review event.action, gcp.audit.resource_name, and when audit level captures request bodies, the CSR spec in gcp.audit.request (requested signer, usages, and requested identity / Common Name).Extracting the Certificate Common Name#
gcp.audit.request.spec.request may hold the base64-encoded PEM certificate signing request. On GKE this is base64 of the full PEM CSR. Decode and inspect the subject for high-risk Common Names such as system:masters, system:kube-controller-manager, and system:admin. The companion rule "GKE Certificate Signing Request Privileged Identity Requested" decodes the CSR body and matches those identities automatically.# Full decoded PEM block
echo "<gcp.audit.request.spec.request>" | base64 -d
# Parsed CSR details (subject, key type/size, extensions, signature)
echo "<gcp.audit.request.spec.request>" | base64 -d | openssl req -noout -text
# Subject only
echo "<gcp.audit.request.spec.request>" | base64 -d | openssl req -noout -subject
system:masters (cluster-admin group)system:kube-controller-manager (broad control-plane-style access, including secrets and token minting)system:kube-scheduler (scheduling across the cluster)system:kube-proxy (node/network-adjacent access)Possible investigation steps#
approval.update, update, or patch), which matches self-approval abuse.gcp.audit.resource_name and subsequent authentication or API activity from unusual networks.False positive analysis#
Related rules#
Response and remediation#
certificatesigningrequests create/update/patch or approval for untrusted identities; enforce signer restrictions and approved issuers where supported.Panther #
T1098, T1552
References #
update certificatesigningrequests
#Description
Modifies a pending CertificateSigningRequest's status. Elastic flags create/update/patch by a non-control-plane identity as cert-based privilege escalation.
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c?fieldManager=kubectl-replace&fieldValidation=Strict",
"verb": "update",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"resourceVersion": "1475"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1475",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {}
},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1475",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {}
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.581773Z",
"stageTimestamp": "2026-07-02T22:49:23.584217Z",
"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 → Identify the actor ( For create events, "kubernetes.audit.requestObject.spec.request" holds the base64-encoded PEM certificate signing request. Decode that value to PEM, then inspect the CSR subject (for example with OpenSSL’s CSR subject view) to read the requested Common Name (CN). Known base64 substrings that often appear inside the encoded request for high-risk identities: Priority CNs that usually indicate privilege escalation intent:Elastic #
T1098, T1098.006↳ also matches create-certificatesigningrequests: create certificatesigningrequests, patch-certificatesigningrequests: patch certificatesigningrequests Investigation guide
Triage and analysis#
Investigating Kubernetes Client Certificate Signing Request Created or Approved#
user.name, groups), client (user_agent.original), and source.ip. Confirm whether the principal is expected to create or approve CSRs. Review kubernetes.audit.requestURI and, when audit level captures request bodies, the CSR spec (requested signer, usages, and requested identity / Common Name).Extracting the Certificate Common Name#
c3lzdGVtOm1hc3Rlcn — system:mastersc3lzdGVtOmt1YmUtY29udHJvbGxlci1tYW5hZ2Vy — system:kube-controller-managerc3lzdGVtOmFkbWlu — system:adminsystem:masters (cluster-admin group)system:kube-controller-manager (broad control-plane–style access, including secrets and token minting)system:kube-scheduler (scheduling across the cluster)system:kube-proxy (node/network–adjacent access)Possible investigation steps#
kubernetes.audit.objectRef and subsequent authentication or API activity from unusual networks.Response and remediation#
certificatesigningrequests create/update/patch or approval for untrusted identities; enforce signer restrictions and approved issuers where supported.
References #
patch certificatesigningrequests
#Description
Same as update via patch. Elastic flags create/update/patch of a CSR by a non-control-plane identity as cert-based privilege escalation or self-approval.
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c?fieldManager=kubectl-patch",
"verb": "patch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"metadata": {
"labels": {
"dw-harn-patched": "1"
}
}
},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1475",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {}
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.432961Z",
"stageTimestamp": "2026-07-02T22:49:23.438428Z",
"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 → Identify the actor ( For create events, "kubernetes.audit.requestObject.spec.request" holds the base64-encoded PEM certificate signing request. Decode that value to PEM, then inspect the CSR subject (for example with OpenSSL’s CSR subject view) to read the requested Common Name (CN). Known base64 substrings that often appear inside the encoded request for high-risk identities: Priority CNs that usually indicate privilege escalation intent:Elastic #
T1098, T1098.006↳ also matches create-certificatesigningrequests: create certificatesigningrequests, update-certificatesigningrequests: update certificatesigningrequests Investigation guide
Triage and analysis#
Investigating Kubernetes Client Certificate Signing Request Created or Approved#
user.name, groups), client (user_agent.original), and source.ip. Confirm whether the principal is expected to create or approve CSRs. Review kubernetes.audit.requestURI and, when audit level captures request bodies, the CSR spec (requested signer, usages, and requested identity / Common Name).Extracting the Certificate Common Name#
c3lzdGVtOm1hc3Rlcn — system:mastersc3lzdGVtOmt1YmUtY29udHJvbGxlci1tYW5hZ2Vy — system:kube-controller-managerc3lzdGVtOmFkbWlu — system:adminsystem:masters (cluster-admin group)system:kube-controller-manager (broad control-plane–style access, including secrets and token minting)system:kube-scheduler (scheduling across the cluster)system:kube-proxy (node/network–adjacent access)Possible investigation steps#
kubernetes.audit.objectRef and subsequent authentication or API activity from unusual networks.Response and remediation#
certificatesigningrequests create/update/patch or approval for untrusted identities; enforce signer restrictions and approved issuers where supported.
References #
delete certificatesigningrequests
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-10e47a",
"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": "certificatesigningrequests",
"name": "dw-harn-csr-10e47a",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"status": "Success",
"details": {
"name": "dw-harn-csr-10e47a",
"group": "certificates.k8s.io",
"kind": "certificatesigningrequests",
"uid": "00000000-0000-0000-0000-000000000000"
},
"code": 200
},
"requestObject": {
"kind": "DeleteOptions",
"apiVersion": "meta.k8s.io/__internal",
"propagationPolicy": "Background"
},
"responseObject": {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Success",
"details": {
"name": "dw-harn-csr-10e47a",
"group": "certificates.k8s.io",
"kind": "certificatesigningrequests",
"uid": "00000000-0000-0000-0000-000000000000"
}
},
"requestReceivedTimestamp": "2026-07-02T04:49:00.304408Z",
"stageTimestamp": "2026-07-02T04:49:00.307279Z",
"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\""
}
}
References #
deletecollection certificatesigningrequests
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests?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": "certificatesigningrequests",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"responseObject": {
"kind": "CertificateSigningRequestList",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"resourceVersion": "1482"
},
"items": [
{
"metadata": {
"name": "dw-harn-csr-30f363",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1480",
"creationTimestamp": "2026-07-02T23:16:10Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBb3pDQWlXSStHdk1lCnRMb0J2QnJKa2lhQU45L0lSaGloN2orQnB5Mk1RYnExTWxFY0hlSkp4bW9CMjZ5WTdUME5oQnY0Z0ZHdk80STcKVTNBRE5iTENDdXF5dmpqOEdKRldYM3M1VGNMQmVCeFNzRjhQSWNhazU5eHZVVXlJL24yOU5DTEpObXJMeVNOSApRcGVwOWp1bnE2WUtjTjNWY2hwcC9TeDQ0cXJWK2VzeTl2Z3pndHFLNjdObVpuWTJVZWhQZ2U3S0RRQmZJd1g5ClVBTVVTdXFTTGFTWndNTDY0U0hUOTVOQ2hpWXpLZ3EzOWM4R1k4RXBmUkVNY3djOGdGbml1V0x6MmZZUW1wWmgKWG5uYWY0a0dQbEJjdm9wOUM3Q0hCVzBPRnhlbjhGM0FnTW9BdkRrenp2VlRSK3FtWTd6aUQrQ3AyWmR2akZwNwphWU4zeVFId2p3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJc05nSXczdnI0SjdZS2hVWGpMCldVa2ppaThaSzJJaTUwWTdZcGtJbUJSRlMrb1hkNHFtWkU2WUpoMDRxVGNOUUVLZTRXK1pSUzdkMlRWVGZjK04KdkdnZ0NDaFRSbUxaNE5LcEhxWjNiMkU0NmVHUS9FK1c4dFFRK3lmUVYxTVhOdEk4VGlKdkhIY1hoS3BPZytBWApUcWNuM3hwVDR3YkpEZ0dtelcrVmgzNjg2YWJSRnVMbWtoZm96OVQ3WDJlcVFiYmliZHVudTFTTkJqZGV6bnJwCkJUTUh1L2NjRS9JK1VNYzJyTmlmUFNjMkFtYjd0SkdXZDBhckNJYnNNUmFlVGhPbTJUZUMySVMwY2pEQytoWGYKVHlRaDJOZHcyUitrajdqUVJnclByZVhPbDBmSUNabENERGNXTTRoVms0OHI5WGQ1OGtId2h2bHRjRTZpYlpnNgo1OVE9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=3ffde68ef687218e01296d94b0aa59c81cc98de2bd73ab70e21510c8cd4b9cec"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T23:16:14Z",
"lastTransitionTime": "2026-07-02T23:16:14Z"
}
],
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREekNDQWZlZ0F3SUJBZ0lSQU5HdHRjbWxZSzRuUks4TzdyclN1KzR3RFFZSktvWklodmNOQVFFTEJRQXcKRlRFVE1CRUdBMVVFQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TmpBM01ESXlNekV4TVRSYUZ3MHlOakEzTURNdwpNREUyTVRSYU1Da3hFREFPQmdOVkJBb1RCMlIzTFdoaGNtNHhGVEFUQmdOVkJBTVRER1IzTFdoaGNtNHRkWE5sCmNqQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUtNd2dJbGlQaHJ6SHJTNkFid2EKeVpJbWdEZmZ5RVlZb2U0L2dhY3RqRUc2dFRKUkhCM2lTY1pxQWR1c21PMDlEWVFiK0lCUnJ6dUNPMU53QXpXeQp3Z3Jxc3I0NC9CaVJWbDk3T1UzQ3dYZ2NVckJmRHlIR3BPZmNiMUZNaVA1OXZUUWl5VFpxeThralIwS1hxZlk3CnA2dW1DbkRkMVhJYWFmMHNlT0txMWZuck12YjRNNExhaXV1elptWjJObEhvVDRIdXlnMEFYeU1GL1ZBREZFcnEKa2kya21jREMrdUVoMC9lVFFvWW1NeW9LdC9YUEJtUEJLWDBSREhNSFBJQlo0cmxpODluMkVKcVdZVjU1Mm4rSgpCajVRWEw2S2ZRdXdod1Z0RGhjWHAvQmR3SURLQUx3NU04NzFVMGZxcG1PODRnL2dxZG1YYjR4YWUybURkOGtCCjhJOENBd0VBQWFOR01FUXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWYKQmdOVkhTTUVHREFXZ0JTNzdjUUJCT1psaEI1QklwNWM5b25YMEZvV3ZEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQwpBUUVBS2VqdTF4Q1dMc1MweStGYXhPaTE2am9zMy9sdXM3ZXhPQ2JjcWUwbHUzUFdIamkwOXRUU0t1T21VaWhiCjBlNStJcExyKzl2T004NTllRVg1T3Z3c2hMTFZNeGlVOEs1b2JFN3ZuRUc3anB2RFJreUJldTZWVFI1bjlKMHgKeW83L25WRVRyWmV5QURWSHdjek1DWUtCYWQzZlNJY3FNbFhmZDl5MkFxYmZaaTZyZTRaNjMyU3F2RFBsalducQpla09GM0k1ZUI2WlRheUhKR1BLb2JJeW1uQTBJWmpYcnZGWnBKSVY1TW1pVjhjdUpRb2szZ2FYMFJlTVZraWtvCktJTWdBenRnazZ1cjAyNlRYMWFUTXRvRWdYMjFYVDVTS29CRHBQMXRaVnFjWG1VNFh0SFRaYTZUaVJJVXlPdzkKbWVDOWltUktBREhLbGl4TE8yN3hnNnh1RWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
}
}
]
},
"requestReceivedTimestamp": "2026-07-02T23:16:14.559194Z",
"stageTimestamp": "2026-07-02T23:16:14.563945Z",
"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\""
}
}
References #
get certificatesigningrequests/approval
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c/approval",
"verb": "get",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"subresource": "approval"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.643339Z",
"stageTimestamp": "2026-07-02T22:49:23.644880Z",
"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\""
}
}
References #
update certificatesigningrequests/approval
#Description
CSR approval/denial (Kubernetes client-certificate privilege escalation path).
Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-10e47a/approval",
"verb": "update",
"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": "certificatesigningrequests",
"name": "dw-harn-csr-10e47a",
"uid": "00000000-0000-0000-0000-000000000000",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"resourceVersion": "1857",
"subresource": "approval"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-10e47a",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1857",
"creationTimestamp": "2026-07-02T04:49:00Z"
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeFFQMHQwOHhVMGtVCnZqTXZJeGU4UDlzVjhkbkh4VkdHWFVxQjdJQzdGUnp0Nit1bDJVZEQzTmNrMU1aNGZuc3lNL241S09yUWNoN1gKOVJ0T29NVGhoVUJ6aksvR0cyTk1oT09JSjVEd25NWUFYWStIZm84RzVFN0pBbzJLWlNMZHo2UHZGWmYwa1o0Rgo1b01GajJSRTZrRWVlei94NTgrbkd6czBJZUZCNm1BU3V3Z3JHb1RyWUplcmZ5OVorUTMrcGRFb2VUdEYxWHpwCm5MOEJpTXkzNlBwc1duU1p3TDVYMFB3SElnZkc0ckZRcG00d1lDa2FuYWwyNXhZUXAwY3lyZWIrQmhMQU1hUG0KUE1XWnp5Q3NJcTNoR2gybmhJVGhMVUh0YjBVejRFQi9zdksxTnJ3YTU1SFlqUHE4VHBwbHlVZ1BTRXkxblhLWQora0ViQ1R5WTN3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFR2pBUHZndEdjWlNTc1JmRkU5Cjk2eWtVMlZub0owRWhINGo3aEIxYUZCdUE5akVRMVpRUnl4QnFuS2ZGQzRqK0toNUNjWXpTWWhNS3BadW90RC8KV3pXOTZqMDgyRHNpVFd6TTR3K1dhZUdmWEhRc3N6VHVlR3kzR0hwZG8yOW1xNGFOQU85SHhtODF4aXUyR000SApMUjllNVVDRSt4b0ZSVE16T21zbGJ1Y1NvRm5vMkUvcWZMbHhPQWY3WXg3TitFbFRDZ2hmR0dldjdjTXkwb0c0CnVXMlFwVk5vNDhneVpZMkFLZTVzQVZzYWgyWU1KY3VZeHM4bC9YT0RoeVlPaXZSZWRCWWorQ3A2WHkxWG04RFgKQ253cHE1RkExdnRSdmxwalY4aFpSN2FXTmZNNXRYNWVVM0JVKzhScXRWWnRZUFpxenVodFVTbVJ4SjlLVk0zVgpxbzQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T04:49:00Z",
"lastTransitionTime": null
}
]
}
},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-10e47a",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1858",
"creationTimestamp": "2026-07-02T04:49:00Z"
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeFFQMHQwOHhVMGtVCnZqTXZJeGU4UDlzVjhkbkh4VkdHWFVxQjdJQzdGUnp0Nit1bDJVZEQzTmNrMU1aNGZuc3lNL241S09yUWNoN1gKOVJ0T29NVGhoVUJ6aksvR0cyTk1oT09JSjVEd25NWUFYWStIZm84RzVFN0pBbzJLWlNMZHo2UHZGWmYwa1o0Rgo1b01GajJSRTZrRWVlei94NTgrbkd6czBJZUZCNm1BU3V3Z3JHb1RyWUplcmZ5OVorUTMrcGRFb2VUdEYxWHpwCm5MOEJpTXkzNlBwc1duU1p3TDVYMFB3SElnZkc0ckZRcG00d1lDa2FuYWwyNXhZUXAwY3lyZWIrQmhMQU1hUG0KUE1XWnp5Q3NJcTNoR2gybmhJVGhMVUh0YjBVejRFQi9zdksxTnJ3YTU1SFlqUHE4VHBwbHlVZ1BTRXkxblhLWQora0ViQ1R5WTN3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFR2pBUHZndEdjWlNTc1JmRkU5Cjk2eWtVMlZub0owRWhINGo3aEIxYUZCdUE5akVRMVpRUnl4QnFuS2ZGQzRqK0toNUNjWXpTWWhNS3BadW90RC8KV3pXOTZqMDgyRHNpVFd6TTR3K1dhZUdmWEhRc3N6VHVlR3kzR0hwZG8yOW1xNGFOQU85SHhtODF4aXUyR000SApMUjllNVVDRSt4b0ZSVE16T21zbGJ1Y1NvRm5vMkUvcWZMbHhPQWY3WXg3TitFbFRDZ2hmR0dldjdjTXkwb0c0CnVXMlFwVk5vNDhneVpZMkFLZTVzQVZzYWgyWU1KY3VZeHM4bC9YT0RoeVlPaXZSZWRCWWorQ3A2WHkxWG04RFgKQ253cHE1RkExdnRSdmxwalY4aFpSN2FXTmZNNXRYNWVVM0JVKzhScXRWWnRZUFpxenVodFVTbVJ4SjlLVk0zVgpxbzQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=9bb0383c49b319fbf6b5ed61ab944378956d4292c784d32244ce2fa4dd846a3c"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T04:49:00Z",
"lastTransitionTime": "2026-07-02T04:49:00Z"
}
]
}
},
"requestReceivedTimestamp": "2026-07-02T04:49:00.240164Z",
"stageTimestamp": "2026-07-02T04:49:00.244500Z",
"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\""
}
}
Common Indicators #
Field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
EventType (elastic rule field) | in | io.k8s.certificates.v1.certificatesigningrequests.approval.update | 2 rules | elastic |
EventType (elastic rule field) | in | io.k8s.certificates.v1.certificatesigningrequests.create | 2 rules | elastic |
azure.platformlogs.category (elastic rule field) | in | kube-audit | 1 rule | elastic |
azure.platformlogs.category (elastic rule field) | in | kube-audit-admin | 1 rule | elastic |
azure.platformlogs.properties.log.stage (elastic rule field) | eq | responsecomplete | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | eq | create | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | patch | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | update | 1 rule | elastic |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries → AKS kube-audit events are carried under the flattened This rule groups CSR create and approval events by Identify the actor ( For create events, Priority CNs that usually indicate privilege escalation intent:Elastic #
T1649↳ also matches create-certificatesigningrequests: create certificatesigningrequests, patch-certificatesigningrequests-approval: patch certificatesigningrequests/approval Investigation guide
Triage and analysis#
Investigating Azure AKS Certificate Signing Request Created or Approved#
azure.platformlogs.properties.log.* subtree and share the ARM operation event.action: Microsoft.ContainerService/managedClusters/diagnosticLogs/Read. A CSR created against the kubernetes.io/kube-apiserver-client signer lets the requester choose the certificate's subject (Common Name and organization/groups); once approved it mints a client certificate for an arbitrary identity that yields access not tied to a token. The default CertificateSubjectRestriction admission controller blocks requests for the system:masters group, so attackers commonly request a Common Name matching an existing privileged user (or another privileged group) instead, making the requested subject the key thing to decode. Node and kubelet certificates use the kube-apiserver-client-kubelet and kubelet-serving signers (whose subject is constrained to the node) and are out of scope; cert-manager and application CSRs use their own signers.Possible investigation steps#
azure.platformlogs.properties.log.user.username (and its groups in azure.platformlogs.properties.log.user.groups) and whether it should submit or approve CSRs. A workload service account (system:serviceaccount:<ns>:<sa>) or masterclient (the local cluster-admin cert) is the higher-concern case.azure.platformlogs.properties.log.requestObject.spec.signerName and decode the base64 CSR in azure.platformlogs.properties.log.requestObject.spec.request to read the requested Common Name and organization (groups); a subject in system:masters or another privileged group is the escalation.verb:update/patch on the approval subresource), which indicates self-approval, and inspect azure.platformlogs.properties.log.userAgent.azure.platformlogs.properties.log.sourceIPs and pivot on it for follow-on privileged API activity using the newly issued certificate.False positive analysis#
kube-apiserver-client-kubelet signer), kubelet-serving CSRs, and cert-manager/application CSRs (custom signers) are out of scope by design; the kube-controller-manager certificate-controller and the AKS aksService approver are excluded by identity.system:*, which would blind the rule to compromised workload service accounts.Response and remediation#
T1098, T1098.006↳ also matches create-certificatesigningrequests: create certificatesigningrequests Investigation guide
Triage and analysis#
Investigating GKE Certificate Signing Request Self-Approved#
client.user.email and normalized CSR name (Esql.csr_name). GKE logs approval on subresource paths (.../csr-name/approval), so the query strips /approval suffixes before correlating. An alert means the same identity both submitted and approved the same CSR within five minutes, a strong indicator of manual self-approval rather than normal system:gcp-controller-manager auto-approval of node certificates.Possible investigation steps#
Esql.event_action_values for the sequence of create followed by approval.update.gcp.audit.request.spec.signerName and decode gcp.audit.request.spec.request on create events for the requested identity.False positive analysis#
Related rules#
Response and remediation#
T1098, T1098.006↳ also matches create-certificatesigningrequests: create certificatesigningrequests Investigation guide
Triage and analysis#
Investigating GKE Client Certificate Signing Request Created or Approved#
client.user.email), source.ip, and user_agent.original. Confirm whether the principal is expected to create or approve CSRs. Review event.action, gcp.audit.resource_name, and when audit level captures request bodies, the CSR spec in gcp.audit.request (requested signer, usages, and requested identity / Common Name).Extracting the Certificate Common Name#
gcp.audit.request.spec.request may hold the base64-encoded PEM certificate signing request. On GKE this is base64 of the full PEM CSR. Decode and inspect the subject for high-risk Common Names such as system:masters, system:kube-controller-manager, and system:admin. The companion rule "GKE Certificate Signing Request Privileged Identity Requested" decodes the CSR body and matches those identities automatically.# Full decoded PEM block
echo "<gcp.audit.request.spec.request>" | base64 -d
# Parsed CSR details (subject, key type/size, extensions, signature)
echo "<gcp.audit.request.spec.request>" | base64 -d | openssl req -noout -text
# Subject only
echo "<gcp.audit.request.spec.request>" | base64 -d | openssl req -noout -subject
system:masters (cluster-admin group)system:kube-controller-manager (broad control-plane-style access, including secrets and token minting)system:kube-scheduler (scheduling across the cluster)system:kube-proxy (node/network-adjacent access)Possible investigation steps#
approval.update, update, or patch), which matches self-approval abuse.gcp.audit.resource_name and subsequent authentication or API activity from unusual networks.False positive analysis#
Related rules#
Response and remediation#
certificatesigningrequests create/update/patch or approval for untrusted identities; enforce signer restrictions and approved issuers where supported.
References #
patch certificatesigningrequests/approval
#Common Indicators #
Field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis.
| Field | Kind | Value | Rules | Vendors |
|---|---|---|---|---|
azure.platformlogs.category (elastic rule field) | in | kube-audit | 1 rule | elastic |
azure.platformlogs.category (elastic rule field) | in | kube-audit-admin | 1 rule | elastic |
azure.platformlogs.properties.log.stage (elastic rule field) | eq | responsecomplete | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | eq | create | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | patch | 1 rule | elastic |
azure.platformlogs.properties.log.verb (elastic rule field) | in | update | 1 rule | elastic |
Detection Rules #
Full rule details for this event, including ATT&CK technique mappings and native queries →Elastic #
T1649↳ also matches create-certificatesigningrequests: create certificatesigningrequests, update-certificatesigningrequests-approval: update certificatesigningrequests/approval
get certificatesigningrequests/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c/status",
"verb": "get",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.784065Z",
"stageTimestamp": "2026-07-02T22:49:23.785395Z",
"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\""
}
}
References #
update certificatesigningrequests/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c/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=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"resourceVersion": "1478",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1478",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T22:49:23Z",
"lastTransitionTime": "2026-07-02T22:49:23Z"
}
],
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREakNDQWZhZ0F3SUJBZ0lRQWV2WURuYXdVM2hidFNaS3hkTzhYREFOQmdrcWhraUc5dzBCQVFzRkFEQVYKTVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1CNFhEVEkyTURjd01qSXlORFF5TTFvWERUSTJNRGN3TWpJegpORGt5TTFvd0tURVFNQTRHQTFVRUNoTUhaSGN0YUdGeWJqRVZNQk1HQTFVRUF4TU1aSGN0YUdGeWJpMTFjMlZ5Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKbHN5SFlYbnMKcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamJXaEprK05FcQpuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWV0s3S0FpNjgyCkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0VlEzeGNCYlMKM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnNMTzdEeTRkNApEcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWXJnRE1DdFFSCnhRSURBUUFCbzBZd1JEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1COEcKQTFVZEl3UVlNQmFBRkoweFQ1eldESlY4MW82a3J1YkpTbWM1RDZ2aE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQgpBUUI2RHNjakdDRDltWFN2QVQwdWt1L1B1RlRqVGNucjdHLyt3a0RvR1FxVzcwOE12NUVCNVlMSUdKa2FObCt5CnFPdm84Yk9RMFR6OUFnQWNBNzFGOEtZZ0lndEVxaDJuUmpueFFjMWd5SVNLV0FaaWFGa0FML2pLQ2VkbHFFbUwKWVp6WHZIaHlMdUNLS0hCSDgxNStzclJKZGpvMk9PQjU3SkpjbzJsUk9BZE5wOCt1SG1SajVQTHNRU01tbTdYagpXWERwKzZRdGlTZzFWQm13ZDhkOWNmeTVWZWlxbFFFdXlVdkZRODZyL0VqS0MvK3M0UUM1Wmk5dnJ6RThZSG83CjR0ZVN4aTFQaWZOZThWNHRHZ3Mzb3VGczgwWVBMYWlES09ocE0yOThHaFJGRWxMdTF1bUtQRDZldGljRVRDYVQKbHpaYlRSNDlXV3BRcGY2dDZGc2x2aFg4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
}
},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1478",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T22:49:23Z",
"lastTransitionTime": "2026-07-02T22:49:23Z"
}
],
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREakNDQWZhZ0F3SUJBZ0lRQWV2WURuYXdVM2hidFNaS3hkTzhYREFOQmdrcWhraUc5dzBCQVFzRkFEQVYKTVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1CNFhEVEkyTURjd01qSXlORFF5TTFvWERUSTJNRGN3TWpJegpORGt5TTFvd0tURVFNQTRHQTFVRUNoTUhaSGN0YUdGeWJqRVZNQk1HQTFVRUF4TU1aSGN0YUdGeWJpMTFjMlZ5Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKbHN5SFlYbnMKcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamJXaEprK05FcQpuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWV0s3S0FpNjgyCkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0VlEzeGNCYlMKM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnNMTzdEeTRkNApEcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWXJnRE1DdFFSCnhRSURBUUFCbzBZd1JEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1COEcKQTFVZEl3UVlNQmFBRkoweFQ1eldESlY4MW82a3J1YkpTbWM1RDZ2aE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQgpBUUI2RHNjakdDRDltWFN2QVQwdWt1L1B1RlRqVGNucjdHLyt3a0RvR1FxVzcwOE12NUVCNVlMSUdKa2FObCt5CnFPdm84Yk9RMFR6OUFnQWNBNzFGOEtZZ0lndEVxaDJuUmpueFFjMWd5SVNLV0FaaWFGa0FML2pLQ2VkbHFFbUwKWVp6WHZIaHlMdUNLS0hCSDgxNStzclJKZGpvMk9PQjU3SkpjbzJsUk9BZE5wOCt1SG1SajVQTHNRU01tbTdYagpXWERwKzZRdGlTZzFWQm13ZDhkOWNmeTVWZWlxbFFFdXlVdkZRODZyL0VqS0MvK3M0UUM1Wmk5dnJ6RThZSG83CjR0ZVN4aTFQaWZOZThWNHRHZ3Mzb3VGczgwWVBMYWlES09ocE0yOThHaFJGRWxMdTF1bUtQRDZldGljRVRDYVQKbHpaYlRSNDlXV3BRcGY2dDZGc2x2aFg4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
}
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.857184Z",
"stageTimestamp": "2026-07-02T22:49:23.859549Z",
"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\""
}
}
References #
patch certificatesigningrequests/status
#Example Audit Event #
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
"auditID": "00000000-0000-0000-0000-000000000000",
"stage": "ResponseComplete",
"requestURI": "/apis/certificates.k8s.io/v1/certificatesigningrequests/dw-harn-csr-83be6c/status?fieldManager=kubectl-patch",
"verb": "patch",
"user": {
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"sourceIPs": [
"203.0.113.10"
],
"userAgent": "kubectl/v1.36.2 (linux/amd64) kubernetes/24e2b02",
"objectRef": {
"resource": "certificatesigningrequests",
"name": "dw-harn-csr-83be6c",
"apiGroup": "certificates.k8s.io",
"apiVersion": "v1",
"subresource": "status"
},
"responseStatus": {
"metadata": {},
"code": 200
},
"requestObject": {},
"responseObject": {
"kind": "CertificateSigningRequest",
"apiVersion": "certificates.k8s.io/v1",
"metadata": {
"name": "dw-harn-csr-83be6c",
"uid": "00000000-0000-0000-0000-000000000000",
"resourceVersion": "1478",
"creationTimestamp": "2026-07-02T22:49:20Z",
"labels": {
"dw-harn-patched": "1"
}
},
"spec": {
"request": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ2JqQ0NBVllDQVFBd0tURVZNQk1HQTFVRUF3d01aSGN0YUdGeWJpMTFjMlZ5TVJBd0RnWURWUVFLREFkawpkeTFvWVhKdU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKCmxzeUhZWG5zcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamIKV2hKaytORXFuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWVwpLN0tBaTY4MkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0ClZRM3hjQmJTM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnMKTE83RHk0ZDREcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWQpyZ0RNQ3RRUnhRSURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNb0dEbW5zU3V4MUE1SE5QcG90CkIyNWZJc3dvNVNwRkxjaDFDa2V6cm45UmxNS2Q0b3NvczlFRUR3SUxKSHlwdEVxU2pnRlpMR0FWZGM1Nks3ckkKaVhKbUFISDBxZ3Q1ZUR0eG9sU1J2R2pQUVQrbW1NZ0RJRS9MNW9FMkROQ3d2T2NraUYzWGM1YktZczBkV2FpUApOOFlzeDdrNmRQRDdQdENESkt2VTM1eEp3NlJTZmpUczVQdTZMbEh5UFpkZy81UG5OUzZCNFZkWS9CNUpMa3N6Ck1hZDRLbDE3YU9WUE1wQThoaklmZHZWNHhWMTJ3VkF0WUJ6T3p3WngwZTFTeW96VWE0c1RZQWs0eUxlV0Fzbm0KNStheXhDbjRMQkVSaVBCUVZ5OEE0SWtuS2ppZFd2MFVrcHM5NkVUS2w0M2YweEdOYWk3MlllcDZVbDgxRkhTdgo3aW89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=",
"signerName": "kubernetes.io/kube-apiserver-client",
"expirationSeconds": 3600,
"usages": [
"client auth"
],
"username": "kubernetes-admin",
"groups": [
"kubeadm:cluster-admins",
"system:authenticated"
],
"extra": {
"authentication.kubernetes.io/credential-id": [
"X509SHA256=97ca5ec05d5b7c1923d58d85f4449a4c26b2df61defa2a59b4045149ffed589e"
]
}
},
"status": {
"conditions": [
{
"type": "Approved",
"status": "True",
"reason": "KubectlApprove",
"message": "This CSR was approved by kubectl certificate approve.",
"lastUpdateTime": "2026-07-02T22:49:23Z",
"lastTransitionTime": "2026-07-02T22:49:23Z"
}
],
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREakNDQWZhZ0F3SUJBZ0lRQWV2WURuYXdVM2hidFNaS3hkTzhYREFOQmdrcWhraUc5dzBCQVFzRkFEQVYKTVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1CNFhEVEkyTURjd01qSXlORFF5TTFvWERUSTJNRGN3TWpJegpORGt5TTFvd0tURVFNQTRHQTFVRUNoTUhaSGN0YUdGeWJqRVZNQk1HQTFVRUF4TU1aSGN0YUdGeWJpMTFjMlZ5Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBM0EzMzdTdmY5a3RKbHN5SFlYbnMKcXRtWGp5dC9CSGQ2cGNGY1RNN3UyZ1lFK2JodlVjTnR0c3N3M3ptMFpFQ0Z6SC9SUFo1VE8yamJXaEprK05FcQpuTlYvVjVxaEV3clM5TVNhNVdzRnVTWFc2Mms2VkVtdHEwV3VpMlZsd1lrK0g2b05LRVJVYkVWV0s3S0FpNjgyCkRHV2ZJT1hZSjNrVExxT0laSlBRcnFhNVNtSEx0NVR1dkpKSDEvTzgrelF1NUxXNGpLK3lOWnB0VlEzeGNCYlMKM2hUTGpPTWpxQXZDY3VsN2pwMjNQRTFHQzN5cjRCbVZoUVJibFg5dTRqeTlkRFpzSEF6UG1BRnNMTzdEeTRkNApEcitaSFF6UU56bnluNWFkNWVyeXN4cnJ1dlJ1VTYwK1Qza1AvUlp0SjFmNnJDcnFubWx6N3NqWXJnRE1DdFFSCnhRSURBUUFCbzBZd1JEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1COEcKQTFVZEl3UVlNQmFBRkoweFQ1eldESlY4MW82a3J1YkpTbWM1RDZ2aE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQgpBUUI2RHNjakdDRDltWFN2QVQwdWt1L1B1RlRqVGNucjdHLyt3a0RvR1FxVzcwOE12NUVCNVlMSUdKa2FObCt5CnFPdm84Yk9RMFR6OUFnQWNBNzFGOEtZZ0lndEVxaDJuUmpueFFjMWd5SVNLV0FaaWFGa0FML2pLQ2VkbHFFbUwKWVp6WHZIaHlMdUNLS0hCSDgxNStzclJKZGpvMk9PQjU3SkpjbzJsUk9BZE5wOCt1SG1SajVQTHNRU01tbTdYagpXWERwKzZRdGlTZzFWQm13ZDhkOWNmeTVWZWlxbFFFdXlVdkZRODZyL0VqS0MvK3M0UUM1Wmk5dnJ6RThZSG83CjR0ZVN4aTFQaWZOZThWNHRHZ3Mzb3VGczgwWVBMYWlES09ocE0yOThHaFJGRWxMdTF1bUtQRDZldGljRVRDYVQKbHpaYlRSNDlXV3BRcGY2dDZGc2x2aFg4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
}
},
"requestReceivedTimestamp": "2026-07-02T22:49:23.927841Z",
"stageTimestamp": "2026-07-02T22:49:23.930293Z",
"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\""
}
}
References #
any verb on certificatesigningrequests (synthetic aggregation)
#Description
Synthetic aggregation for rules that filter the certificatesigningrequests resource with no specific verb. Not a distinct audit record; hosts rule listings that key on objectRef.resource alone.