SkyWalking 安全实践
介绍
Apache SkyWalking 是一款开源的分布式系统监控和追踪工具,广泛应用于微服务架构中。在生产环境中,确保 SkyWalking 的安全性至关重要。本章将介绍如何通过认证、授权、数据加密等措施保护 SkyWalking 的部署,避免未授权访问或数据泄露。
1. 认证与授权
1.1 Basic 认证
SkyWalking 支持 Basic 认证,可以通过配置用户名和密码限制访问。
配置示例
在 application.yml
中添加以下配置:
yaml
security:
user:
admin:
password: "your_secure_password"
验证方式
访问 SkyWalking UI 或 API 时,需提供用户名和密码:
bash
curl -u admin:your_secure_password http://localhost:8080/graphql
警告
确保密码强度足够,并定期更换密码。
1.2 OAuth2 集成
对于企业级部署,建议集成 OAuth2 实现更安全的认证。
配置示例
yaml
security:
oauth2:
enabled: true
client-id: "your_client_id"
client-secret: "your_client_secret"
token-uri: "https://oauth-provider.com/token"
2. 数据加密
2.1 TLS/SSL 加密
确保 SkyWalking 组件之间的通信使用 TLS/SSL 加密。
配置示例
在 application.yml
中启用 TLS:
yaml
server:
ssl:
enabled: true
key-store: "classpath:keystore.p12"
key-store-password: "your_keystore_password"
提示
使用工具如 keytool
生成自签名证书,或从可信 CA 获取证书。
2.2 存储加密
敏感数据(如密码、API 密钥)应加密存储。SkyWalking 支持通过 Secret Management 工具(如 Vault)管理密钥。
3. 网络隔离与防火墙
3.1 最小化网络暴露
仅开放必要的端口(如 UI 端口 8080
和 Collector 端口 11800
/12800
),并通过防火墙限制访问来源。
示例规则
bash
# 仅允许内网 IP 访问 Collector
iptables -A INPUT -p tcp --dport 11800 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 11800 -j DROP
3.2 使用反向代理
通过 Nginx 或 Apache 反向代理 SkyWalking UI,添加额外的安全层(如 WAF、速率限制)。
Nginx 配置示例
nginx
server {
listen 443 ssl;
server_name skywalking.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8080;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
4. 实际案例
案例:金融行业的安全部署
某银行在微服务监控中部署 SkyWalking,要求:
- 所有通信必须通过 TLS 加密。
- 仅允许内部 VPN 用户访问 UI。
- 集成 LDAP 认证。
解决方案
- 配置 SkyWalking Collector 和 UI 使用 TLS。
- 通过 Nginx 反向代理实现 IP 白名单和 LDAP 认证。
- 定期审计访问日志。
5. 总结
通过认证、加密和网络隔离,可以显著提升 SkyWalking 的安全性。关键实践包括:
- 启用 Basic 认证或 OAuth2。
- 强制使用 TLS/SSL 加密通信。
- 限制网络访问并定期审计。
附加资源
练习
- 为 SkyWalking 配置 Basic 认证并测试访问。
- 使用
keytool
生成自签名证书并启用 TLS。 - 通过 Nginx 设置反向代理和 IP 白名单。