OpenShift 4.14中查询特定用户对Deployment/StatefulSet操作的审计日志方法(需CLI示例)
嘿,刚好能帮你解决这个问题!在OpenShift 4.14里,完全可以通过CLI追踪特定用户对Deployment、StatefulSet这类资源的操作审计日志,不管是缩放实例数、调整存储大小还是修改配置,都能查得到。下面是具体的操作步骤和示例:
首先,OpenShift的审计日志存储在kube-apiserver的Pod中,我们先从这些Pod里拉取日志。基础的查询命令如下,先过滤出特定用户的所有操作:
oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --tail=-1 | grep -E '"user":{"username":"<你的用户名>"'把
<你的用户名>替换成你要追踪的用户账号,比如jdoe。如果想要更精准,限定资源类型和具体资源名称,比如追踪用户
jdoe对名为my-app-deployment的Deployment的操作:oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --tail=-1 | grep -E '"user":{"username":"jdoe".*"resource":"deployments".*"name":"my-app-deployment"'要是查StatefulSet,只需要把
resource":"deployments"改成resource":"statefulsets"就行,比如:oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --tail=-1 | grep -E '"user":{"username":"jdoe".*"resource":"statefulsets".*"name":"my-db-statefulset"'还可以进一步过滤操作类型,比如只看“更新”(update)或者“补丁”(patch)这类变更操作(缩放实例数通常会触发patch或update操作):
oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --tail=-1 | grep -E '"user":{"username":"jdoe".*"resource":"deployments".*"verb":"update".*"name":"my-app-deployment"'如果日志量太大,不想看所有历史记录,可以用
--since限定时间范围,比如只查最近2小时的日志:oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --since=2h | grep -E '"user":{"username":"jdoe".*"resource":"deployments"'要是想让日志格式更清晰易读,可以用
jq工具解析JSON格式的审计日志(需要提前安装jq):oc adm logs -n openshift-kube-apiserver -l app=kube-apiserver --tail=-1 | jq 'select(.user.username == "jdoe" and .objectRef.resource == "deployments") | {时间: .metadata.creationTimestamp, 用户: .user.username, 资源类型: .objectRef.resource, 资源名称: .objectRef.name, 操作类型: .verb}'这个命令会把符合条件的日志整理成简洁的键值对格式,一眼就能看到关键信息。
需要注意的是,执行这些命令需要你有cluster-admin或者能访问openshift-kube-apiserver命名空间日志的权限,如果权限不够,得联系集群管理员帮忙授权哦。
备注:内容来源于stack exchange,提问作者yield

