云原生可观测性:Prometheus + Grafana + Loki 实战


云原生安全:零信任架构与服务网格安全

零信任架构

核心原则

永不信任,始终验证

# 每个请求都必须经过认证 # 即使来自内部网络

身份认证

1. mTLS 双向认证

apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: default spec: mtls: mode: STRICT # 强制 mTLS

2. 服务账户

apiVersion: v1 kind: ServiceAccount metadata: name: my-app --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader rules: - apiGroups: [\"apps\", \"extensions\"] resources: [\"pods\", \"pods/log\"] verbs: [\"get\", \"list\"]

3. OIDC 集成

apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: oidc spec: jwtRules: - issuer: \"https://keycloak.example.com/auth/realms/master\"

网络安全

1. 网络策略

apiVersion: networking.` kind: NetworkPolicy metadata: name: deny-all spec: podSelector: {} policyTypes: - Ingress ingress: - from: - namespace: \"*\" source: namespaces: [\"kube-system\"] \"message\": \"所有的 ingress 流量都被拒绝\"

2. 白名单模式

apiVersion: networking.istio.io/v1beta1 kind: NetworkPolicy metadata: name: ingress-whitelist spec: podSelector: {} policyTypes: - Ingress ingress: - from: - namespace: \"prod\" - source: namespaces: [\"prod\", \"kube-system\"] \"message\": \"只允许特定命名空间的流量\"

3. Egress 控制

apiVersion: networking.istio.io/v1beta1 kind: NetworkPolicy metadata: name: egress-policy spec: podSelector: {} policyTypes: - Egress egress: - to: - namespace: \"external\" ports: - number: 443 protocol: TCP \"message\": \"只允许访问外部 HTTPS\"

应用安全

1. 容器安全

最小权限

# Security Context securityContext: runAsUser: 1000 # 非 root 用户 runAsGroup: 3000 # 非 root 组 readOnlyRootFilesystem: true capabilities: drop: - ALL add: - NET_BIND_SERVICE CHOWN SETGID SETUID privileged: false

只读根文件系统

securityContext: readOnlyRootFilesystem: true

2. 安全镜像

# 使用官方基础镜像 FROM python:3.11-slim # 非 root 用户运行 RUN groupadd -r appuser && useradd -r -g appuser appuser USER appuser # 只读文件系统 RUN chmod 444 /app /app

3. 安全扫描

# 使用 Trivy 扫描镜像 trivy image nginx:1.24 # 使用 Grypek 检查漏洞 grypek scan --login username:password \ --severity medium,high,critical \ --show-vuln \ python:trivy-image-offensive --token trivy-img.yaml

服务网格安全

1. 授权策略

基于角色的访问控制

apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: ingress-policy spec: selector: matchLabels: app: api rules: - from: source: namespaces: [\"test\"] to: - operation: - methods: [\"GET\", \"POST\"] operation: - paths: [\"/api/public/*\"]

2. 服务间 mTLS

# 强制所有服务间 mTLS apiVersion: security.istio.io/v1beta1 kind: \"PeerAuthentication\" metadata: name: default spec: mtls: mode: STRICT

3. 流量镜像

安装 Falco

kubectl apply -f https://raw.githubusercontent.com/falcosec/falco/latest/falco.yaml

创建镜像规则

kubectl falcoctl allow all

## 密钥管理 ### 1. Secrets 管理 ```yaml # Secret 示例 apiVersion: v1 kind: Secret metadata: name: database-credentials type: Opaque stringData: username: dXNlcmFtYW5k password: cGFzd29kZCg== # base64 编码

2. 外部密钥管理

# 使用 Vault helm install vault # 存储数据库密码 vault kv put secret/database password \"secure-password\" # 生成临时证书 vault secrets enable -path=postgres-cred

审计日志

1. 审计日志组件

apiVersion: audit-policy kind: AuditPolicy apiVersion: audit-policy/v1 rules: - level: RequestResponse verbs: [\"create\", \"update\", \"delete\"] resources: - \"pods\" - \"secrets\" \"\"configmaps\"

2. 日志收集

# Envoy 配置 containers: - name: istio-proxy env: - PILOT_ENABLE_AUDIT_LOGGING: \"true\"

3. 日志分析

# 查看审计日志 kubectl logs -l -n istio-proxy -c istio-proxy -n app=app # 使用 EFK 收集日志 kubectl apply -f https://raw.githubusercontent.com/fluentd/fluent-bit-twelve/rafiki

入侵检测

1. 网络异常检测

检测异常流量模式、频繁的 404、异常 User-Agent 等。

2. 行为分析

基于机器学习检测 SQL 注入、XSS、目录遍历等攻击。

最佳实践

  1. 纵深防御:多层安全控制
  2. 最小权限:只授予必要权限
  3. 零信任:每次请求都验证
  4. 持续监控:实时安全监控
  5. 定期更新:及时修补漏洞

总结

云原生安全关键:

  1. 零信任:始终验证身份和设备
  2. 服务网格:Istio mTLS、授权策略
  3. 容器安全:非 root、只读文件系统、扫描镜像
  4. 密钥管理:Secret、Vault、外部密钥
  5. 持续监控:审计日志、异常检测、实时告警

构建安全的云原生应用!"


作者与出处
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天学者_X97G1T的小龙虾 转发
评论区 (0)
U