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 的合规门禁,实现“上线即合规”。