19.11.6 安全与权限平台整合实践案例
安全与权限平台整合实践案例#
本案例聚焦于将安全体系与权限体系平台化整合,覆盖账号全生命周期、权限申请与审批、操作审计、合规检查与告警联动,实现“统一身份、统一授权、统一审计、统一合规”的运维闭环。
1. 目标与范围#
- 目标:降低权限滥用风险、提高运维效率、满足审计合规、提升可追溯性。
- 范围:服务器登录与提权、数据库访问、配置管理、发布与变更、CI/CD流水线、云资源与K8s权限。
2. 平台总体架构#
- 统一身份认证:SSO + 多因素认证(MFA),对接LDAP/AD/企业IAM。
- 权限中枢:RBAC/ABAC混合模型,统一策略引擎。
- 运维入口:堡垒机、运维门户、API网关。
- 审计与风控:全链路审计、基线合规、异常行为检测。
- 集成对象:Linux、MySQL、Nginx、Redis、Nacos、Kafka、ZK、Keepalived、HAProxy、ProxySQL、Docker、K8s、Jenkins、Prometheus。
原理草图(身份-授权-审计闭环):
3. 权限模型设计与落地#
- 角色设计:按业务域与环境分层(开发/测试/生产),定义标准运维角色。
- 权限粒度:主机级、服务级、命名空间级、命令级、SQL级。
- 策略方式:通过策略模板与标签(环境、区域、业务线)动态授权。
- 临时授权:支持工单申请、时效授权、自动回收。
示例:Kubernetes 生产命名空间只读角色(RBAC)
# 文件: rbac-prod-readonly.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: prod-readonly
namespace: prod
rules:
- apiGroups: ["", "apps", "batch"]
resources: ["pods", "deployments", "jobs", "configmaps", "services"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: prod-readonly-binding
namespace: prod
subjects:
- kind: User
name: devops_readonly
roleRef:
kind: Role
name: prod-readonly
apiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac-prod-readonly.yaml
kubectl -n prod auth can-i list pods --as=devops_readonly
# 预期输出: yes
4. 账号与访问控制#
- 账号统一:取消共享账号,使用个人账号+短期凭证。
- 访问方式:SSH密钥托管与动态下发,K8s使用短期token。
- 数据库访问:SQL白名单、只读/写分离、敏感库强审批。
- 中间件管理:API级权限控制与操作审计。
示例:Linux 统一账号 + sudo 最小化授权
# 创建个人账号
useradd -m devops01
passwd devops01
# 限制sudo执行命令
cat >/etc/sudoers.d/devops01 <<'EOF'
devops01 ALL=(root) NOPASSWD: /usr/bin/systemctl status *,/usr/bin/journalctl
EOF
chmod 440 /etc/sudoers.d/devops01
# 验证
su - devops01 -c "sudo /usr/bin/systemctl status sshd"
示例:SSH 密钥托管与禁用口令
# 1) 禁用口令登录
sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl reload sshd
# 2) 下发公钥
mkdir -p /home/devops01/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..." >> /home/devops01/.ssh/authorized_keys
chown -R devops01:devops01 /home/devops01/.ssh
chmod 700 /home/devops01/.ssh
chmod 600 /home/devops01/.ssh/authorized_keys
示例:MySQL 只读账号与白名单
CREATE USER 'ro_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass#2024';
GRANT SELECT ON appdb.* TO 'ro_user'@'10.0.0.%';
FLUSH PRIVILEGES;
# 验证只读
mysql -uro_user -p -h 10.0.0.10 -e "SELECT 1;"
# 预期:执行SELECT成功,写入语句报错
5. 审计与合规实践#
- 审计范围:登录、命令、文件变更、SQL、K8s操作、发布动作。
- 合规检查:基线核查、弱口令扫描、权限漂移检测。
- 告警联动:Prometheus触发权限异常告警,联动工单系统。
- 审计报表:按业务/人/系统维度输出月度合规报告。
示例:Linux auditd 关键文件与sudo命令审计
# 安装与启用
yum install -y audit
systemctl enable --now auditd
# 规则:审计sudo与sshd配置变更
cat >/etc/audit/rules.d/ops.rules <<'EOF'
-w /etc/sudoers -p wa -k sudo_change
-w /etc/ssh/sshd_config -p wa -k sshd_conf
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_cmd
EOF
augenrules --load
systemctl restart auditd
# 查询审计
ausearch -k sudo_change
ausearch -k root_cmd | tail
示例:K8s 审计策略(API级审计)
# 文件: /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
resources:
- group: ""
resources: ["pods", "configmaps", "secrets"]
- level: RequestResponse
resources:
- group: "rbac.authorization.k8s.io"
resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"]
6. 与自动化、发布、监控平台的联动#
- 自动化任务:自动化平台调用权限中枢进行授权校验。
- 发布平台:发布任务需校验变更审批与权限范围。
- 监控平台:关键操作与异常行为触发告警并自动冻结权限。
示例:Jenkins Pipeline 调用权限接口校验(伪接口)
// Jenkinsfile
pipeline {
agent any
stages {
stage('Auth Check') {
steps {
sh '''
curl -s -X POST https://iam.example.com/api/check \
-H "Content-Type: application/json" \
-d '{"user":"devops01","resource":"k8s/prod","action":"deploy"}' | tee /tmp/iam_check.json
grep -q '"allow":true' /tmp/iam_check.json
'''
}
}
stage('Deploy') {
steps {
sh 'kubectl -n prod apply -f deploy.yaml'
}
}
}
}
7. 典型落地流程#
- 资产与账号清理:统一资产归档与账号规范化。
- 权限梳理:梳理业务系统权限矩阵与依赖关系。
- 统一接入:逐步接入主机、数据库与中间件。
- 审计打通:接入审计系统并建立审计规则。
- 风控闭环:异常告警与权限冻结流程落地。
落地脚本示例:批量检查Linux共享账号
#!/bin/bash
# 文件: check_shared_user.sh
# 规则:系统内同名UID>1000且密码为空或同一密钥即判定风险
awk -F: '$3>=1000{print $1,$3}' /etc/passwd | while read u uid; do
pass=$(passwd -S "$u" | awk '{print $2}')
echo "$u $uid $pass"
done | grep -E ' NP | LK '
8. 关键问题与解决策略#
- 权限碎片化:通过策略模板与标签授权降低复杂度。
- 多系统对接难:建立标准化权限接口与审计规范。
- 业务阻力:通过可视化审批、临时授权降低阻碍。
- 审计数据量大:分级存储与冷热数据分离。
常见故障排错清单(示例)
1) 用户无法登录:
- 检查SSO状态、LDAP连通性、账号是否禁用
- 服务器侧检查:/var/log/secure、/var/log/auth.log
2) sudo权限失效:
- 校验 /etc/sudoers.d 权限是否 440
- 使用 visudo -c 检查语法
3) K8s权限拒绝:
- kubectl auth can-i
- 检查Role/RoleBinding是否在正确namespace
4) 审计无日志:
- auditd状态、规则加载是否成功(augenrules --load)
- K8s apiserver 是否加载 audit-policy
9. 效果与指标#
- 权限申请平均耗时下降50%以上。
- 高风险操作100%审计覆盖。
- 权限回收周期从月级缩短到小时级。
- 合规检查自动化覆盖率达到80%以上。
10. 可复用经验总结#
- 权限模型先行,平台联动后置。
- 先治理账号与资产,再治理权限。
- 权限最小化原则与持续回收机制必须常态化。
- 审计驱动改进,形成闭环安全运营。
练习与作业
1) 设计一个“生产数据库只读+审批临时写入”的权限流程图,并给出审批字段。
2) 在测试环境配置auditd审计sudo与sshd配置变更,提交一份审计日志样例。
3) 使用K8s RBAC限制某用户只能查看prod命名空间pods,并验证授权结果。
4) 编写脚本检查/var/log/secure中失败登录次数超过5次的IP列表并输出。