跳到主要内容

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,要求:

  1. 所有通信必须通过 TLS 加密。
  2. 仅允许内部 VPN 用户访问 UI。
  3. 集成 LDAP 认证。

解决方案

  1. 配置 SkyWalking Collector 和 UI 使用 TLS。
  2. 通过 Nginx 反向代理实现 IP 白名单和 LDAP 认证。
  3. 定期审计访问日志。

5. 总结

通过认证、加密和网络隔离,可以显著提升 SkyWalking 的安全性。关键实践包括:

  • 启用 Basic 认证或 OAuth2。
  • 强制使用 TLS/SSL 加密通信。
  • 限制网络访问并定期审计。

附加资源

  1. SkyWalking 官方安全文档
  2. OpenSSL 证书生成指南
  3. Nginx 安全配置最佳实践

练习

  1. 为 SkyWalking 配置 Basic 认证并测试访问。
  2. 使用 keytool 生成自签名证书并启用 TLS。
  3. 通过 Nginx 设置反向代理和 IP 白名单。