19.1.7 安全合规与权限治理
安全合规与权限治理的目标是“最小权限、可追溯、可审计、可合规”。平台需建立统一的身份与权限体系,覆盖人、服务与自动化任务三类主体,确保访问控制、数据安全、操作审计和合规要求在全链路闭环。
原理与总体架构(身份、权限、审计、密钥、合规联动):
1. 统一身份与访问控制(IAM/LDAP/SSO + RBAC/ABAC)#
示例:OpenLDAP 安装与初始化(Ubuntu/Debian)
# 安装
sudo apt-get update
sudo apt-get install -y slapd ldap-utils
# 重新配置基本域名
sudo dpkg-reconfigure slapd
# 交互中示例:domain=example.com 组织=Ops 选择MDB
# 验证
ldapwhoami -x -D "cn=admin,dc=example,dc=com" -W
示例:创建组织、用户与组(LDIF)
# /tmp/base.ldif
dn: ou=ops,dc=example,dc=com
objectClass: organizationalUnit
ou: ops
dn: uid=alice,ou=ops,dc=example,dc=com
objectClass: inetOrgPerson
cn: Alice
sn: Ops
uid: alice
userPassword: {SSHA}REPLACE_WITH_HASH
dn: cn=ops-admin,ou=ops,dc=example,dc=com
objectClass: groupOfNames
cn: ops-admin
member: uid=alice,ou=ops,dc=example,dc=com
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/base.ldif
示例:RBAC + ABAC 策略(伪代码/策略引擎)
# /etc/iam/policy.yaml
roles:
- name: ops-admin
permissions:
- "asset:*"
- "deploy:*"
- name: ops-readonly
permissions:
- "asset:read"
abac:
rules:
- if: "user.department == 'ops' and resource.env in ['prod','staging']"
allow: ["deploy:run"]
- if: "resource.tags contains 'db' and user.level < 3"
deny: ["asset:write"]
命令解释
- ldapwhoami:验证 LDAP 认证是否可用。
- ldapadd:导入组织/用户/组对象。
- roles/abac:角色权限 + 属性条件混合控制。
排错要点
- ldapwhoami 失败:检查 slapd 是否启动、cn=admin 是否正确。
- 连接超时:检查 389/636 端口、防火墙。
- 密码不一致:重置管理员密码并更新配置。
练习
1. 新建 ops-readonly 组并分配一个用户,验证只能读资产。
2. 增加 ABAC 规则:仅允许带 project=alpha 标签的资源被 alpha 成员访问。
2. 凭据与密钥管理(KMS/Secrets/轮换)#
示例:使用 HashiCorp Vault 进行 Secrets 管理
# 安装(以二进制为例)
wget https://releases.hashicorp.com/vault/1.15.0/vault_1.15.0_linux_amd64.zip
unzip vault_1.15.0_linux_amd64.zip
sudo mv vault /usr/local/bin/
# 启动开发模式(生产需开启 TLS 与存储后端)
vault server -dev -dev-root-token-id="root"
# 设置环境变量
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'
# 写入与读取
vault kv put secret/db/mysql user=ops password='P@ssw0rd'
vault kv get secret/db/mysql
示例:周期性轮换(脚本 + Vault)
# /opt/ops/rotate_mysql.sh
#!/bin/bash
set -e
NEW_PASS=$(openssl rand -base64 20)
mysql -uroot -p'RootPass' -e "ALTER USER 'ops'@'%' IDENTIFIED BY '${NEW_PASS}';"
vault kv put secret/db/mysql user=ops password="${NEW_PASS}"
echo "rotated at $(date)"
chmod +x /opt/ops/rotate_mysql.sh
crontab -e
# 每周日 03:00 轮换
0 3 * * 0 /opt/ops/rotate_mysql.sh
排错要点
- vault 连接失败:确认 VAULT_ADDR,服务监听与防火墙。
- 写入失败:检查 token 权限。
- 轮换后连接失败:确认应用已重新拉取新凭据。
练习
1. 设计一个“临时凭据 1 小时过期”的策略。
2. 对 Nginx SSL 证书做自动更新并写入 Vault。
3. 操作审计与不可篡改日志#
示例:Linux auditd 基础审计
sudo apt-get install -y auditd
sudo systemctl enable --now auditd
# 审计 sudo、用户变更与关键文件修改
sudo auditctl -w /etc/sudoers -p wa -k sudoers_change
sudo auditctl -w /etc/passwd -p wa -k user_change
sudo auditctl -w /etc/shadow -p wa -k shadow_change
# 查询审计日志
sudo ausearch -k sudoers_change
示例:堡垒机会话审计(伪配置)
# /etc/bastion/bastion.conf
session_record = true
command_audit = true
storage = s3://audit-log-bucket
排错要点
- 无审计记录:检查 auditd 服务状态与规则是否加载。
- 日志量过大:缩小审计范围或增加日志存储。
练习
1. 监控 /etc/ssh/sshd_config 变化并发送告警。
2. 查询过去 24 小时内所有 user_change 事件并导出。
4. 合规基线与配置漂移检测#
示例:使用 Lynis 做基线扫描
sudo apt-get install -y lynis
sudo lynis audit system --quick
# 输出报告 /var/log/lynis-report.dat
示例:CIS 基线检查(OpenSCAP)
sudo apt-get install -y libopenscap8 scap-security-guide
oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_level1_server \
--report /tmp/cis-report.html \
/usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
排错要点
- 报告为空:检查 OS 版本与基线文件匹配。
- 大量不合规:分批修复并制定白名单/例外策略。
练习
1. 将扫描结果接入 CI/CD,失败即阻断发布。
2. 制定“配置漂移”检测清单并模拟回滚。
5. 数据安全与分级分域#
示例:数据库字段脱敏(MySQL)
CREATE VIEW v_user_mask AS
SELECT id, CONCAT(LEFT(phone,3),'****',RIGHT(phone,4)) AS phone_mask
FROM user_info;
示例:日志脱敏(Filebeat + Ingest Pipeline)
PUT _ingest/pipeline/mask_pipeline
{
"processors": [
{
"gsub": {
"field": "message",
"pattern": "(\\d{3})\\d{4}(\\d{4})",
"replacement": "$1****$2"
}
}
]
}
排错要点
- 脱敏失效:检查正则是否匹配实际日志格式。
- 越权访问:审计角色权限与资源标签。
练习
1. 设计“核心数据不可出域”的访问策略。
2. 对备份文件启用加密与解密验证。
6. 权限治理闭环(盘点、回收、审批)#
示例:权限盘点导出(伪 API + 脚本)
# /opt/ops/export_perm.sh
curl -s -H "Authorization: Bearer $TOKEN" \
https://ops.example.com/api/iam/permissions > /tmp/perm.json
jq '.[] | {user, role, resources}' /tmp/perm.json > /tmp/perm_report.txt
示例:JIT 临时授权流程(示意)
sequenceDiagram
participant U as 用户
participant WF as 工单/审批
participant IAM as 权限系统
participant AUD as 审计
U->>WF: 提交高危操作申请
WF->>IAM: 审批通过后授予临时权限
IAM->>AUD: 记录授权与时效
U->>IAM: 执行操作
IAM->>AUD: 记录操作
IAM-->>U: 权限到期自动回收
排错要点
- 权限未回收:检查 TTL 策略与定时任务。
- 审批阻塞:优化审批流程与分级授权。
练习
1. 建立季度权限复盘清单并执行一次模拟回收。
2. 设置高危操作“强制双人确认”。
本节小结与交付物清单#
交付物应包括:统一身份体系、RBAC+ABAC 策略、审计与告警体系、密钥与凭据管理、合规基线与检测闭环,以及可持续的权限治理流程。
建议以“策略即代码”的形式沉淀到仓库,并纳入 CI/CD 的合规门禁,实现“上线即合规”。