Kubernetes 审计是一项重要的安全措施,它可以帮助您监控和审计集群中的各种活动,以保障集群的安全性和合规性。本指南将带您逐步实现 Kubernetes 安全审计的配置和实战应用。
步骤 1: 检查集群是否支持审计
检查你的 Kubernetes 集群中支持的审计策略版本。使用以下命令列出所有支持的 API 资源版本:
kubectl api-resources | grep audit
步骤 2: 配置审计策略
创建审计策略文件 /etc/kubernetes/audit-policy.yaml
,定义需要审计的事件和规则。例如,以下是一个简单的审计策略文件:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Request
resources:
- '*'
verbs:
- create
- update
- delete
userGroups:
- system:authenticated
- level: RequestResponse
resources:
- 'secrets'
verbs:
- '*'
userGroups:
- system:masters
- level: Metadata
resources:
- '*'
verbs:
- get
- list
- level: None
详细说明
- Rule 1:
level: Request
: 定义了审计记录的级别为 Request,表示记录请求的详细信息。resources:
: 包含了所有资源,使用通配符*
表示适用于所有资源。verbs:
: 指定了敏感操作,这里是create
、update
和delete
。userGroups:
: 适用于所有经过身份验证的用户。
- Rule 2:
level: RequestResponse
: 定义了审计记录的级别为 RequestResponse,表示记录请求和响应的详细信息。resources:
: 适用于secrets
资源。verbs:
: 使用通配符*
表示适用于所有操作。userGroups:
: 适用于system:masters
用户组,表示具有集群管理员权限的用户组。
- Rule 3:
level: Metadata
: 定义了审计记录的级别为 Metadata,表示只记录关于对象元数据的信息。resources:
: 使用通配符*
表示适用于所有资源。verbs:
: 指定了get
和list
操作。
- Rule 4:
level: None
: 定义了审计记录的级别为 None,表示不记录任何信息。
这个示例涵盖了对敏感操作的请求和响应的记录、监控集群管理员对 secrets
资源的所有操作、记录对所有资源对象元数据的读取操作等。请确保审计策略符合你的生产环境的具体需求和合规性要求。在实际生产环境中,审计策略的设置可能需要更加细致的调整,以满足特定的安全标准和法规要求。
步骤 3: 验证策略文件
kubectl apply -f /etc/kubernetes/audit-policy.yaml --dry-run=client
步骤 4: 启用 API Server 的审计
编辑 Kubernetes API Server 的配置文件(通常是 /etc/kubernetes/manifests/kube-apiserver.yaml
),添加审计配置。确保以下参数已添加到 kube-apiserver
部分:
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- <other-flags>
- --audit-log-path=/var/log/kubernetes/audit.log
- --audit-log-format=json
- --audit-log-maxage=30
- --audit-log-maxbackup=3
- --audit-log-maxsize=100
- --audit-policy-file=/etc/kubernetes/audit-policy.yaml
volumeMounts:
- mountPath: /var/log/kubernetes
name: var-log-kubernetes
- mountPath: /etc/kubernetes/audit-policy.yaml
name: audit-policy
volumes:
- hostPath:
path: /var/log/kubernetes
name: var-log-kubernetes
- hostPath:
path: /etc/kubernetes/audit-policy.yaml
name: audit-policy
参数说明:
--audit-log-path
: 审计日志的存储路径。- --audit-log-format=json:指定审计日志的格式。
--audit-log-maxage
: 审计日志文件的最大保留天数。--audit-log-maxbackup
: 审计日志文件的最大备份数。--audit-log-maxsize
: 审计日志文件的最大大小。--audit-policy-file
: 审计策略文件的路径。
步骤 5: 重启 API Server
应用新的审计配置,需要重启 API Server:
sudo systemctl restart kubelet
步骤 6: 查看审计日志
审计日志将记录在指定的路径,您可以通过查看此文件来了解集群中的各种操作和事件:
cat /var/log/kubernetes/audit.log
实战应用:监控敏感操作
使用审计日志,您可以监控集群中发生的敏感操作,例如 Pod 的创建、删除等。通过分析审计日志,可以追踪特定用户的活动,识别潜在的安全风险。
cat /var/log/kubernetes/audit.log | grep "CreatePod"
这将筛选出所有创建 Pod 的审计事件,帮助您跟踪 Pod 的创建情况。
实战应用:异常行为检测
审计日志中记录了每个请求的详细信息,包括请求参数、用户信息等。通过分析日志,您可以检测到异常行为,例如异常频繁的登录尝试、权限提升等。
cat /var/log/kubernetes/audit.log | grep "LoginAttempt" | grep "Failure"
这将筛选出所有登录尝试失败的审计事件,帮助您及时发现潜在的安全风险。
结语
通过配置和实战应用 Kubernetes 安全审计,您可以更好地了解和维护集群的安全状态。审计是保障 Kubernetes 安全性的不可或缺的一环,帮助您及时发现潜在的风险并采取适当的措施。希望本指南能够帮助您实施和优化 Kubernetes 安全审计。