You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Keycloak 23.0.1与OpenTelemetry 0.90.1的安全链路配置问询

OpenTelemetry 0.90.1 + Keycloak 23.0.1 节点间安全链路配置流程

架构回顾

  • InsideAppExporter:内置OpenTelemetry SDK,生成并发送追踪数据到Collector
  • OpenTelemetry Collector:代理节点,接收应用数据,带OAuth2鉴权转发到Agent
  • OpenTelemetry Agent:部署在Keycloak所在节点,接收Collector数据,启用OIDC鉴权+TLS加密

1. 生成TLS证书(用cfssl工具)

先搞定节点间加密的证书:

  • 初始化CA配置文件:cfssl print-defaults config > ca-config.json,按需修改过期时间等参数
  • 生成CA根证书和密钥:cfssl gencert -initca ca-csr.json | cfssljson -bare ca
  • 给Agent节点生成服务端证书:cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server agent.example.com-csr.json | cfssljson -bare agent.example.com

证书分发:

  • Agent节点:放置agent.example.com.pem(服务端证书)和agent.example.com-key.pem(私钥)
  • Collector和InsideAppExporter节点:放置ca.pem(根证书)用于验证服务端身份

2. Keycloak客户端配置

在Keycloak后台完成鉴权基础配置:

  • 创建客户端:类型选OpenID Connect,客户端ID设为otel-collector-client,访问类型选confidential,开启服务账户
  • 配置角色:创建otel-traces-writer角色,分配给该客户端的服务账户
  • 权限配置:确保服务账户拥有获取令牌的权限(默认已开启,可在「客户端权限」里确认)

3. OpenTelemetry Agent(服务端)配置

编写otel-agent-config.yaml,启用OIDC鉴权和TLS加密的OTLP接收器:

extensions:
  oidcauth:
    issuer_url: "https://你的Keycloak地址/realms/你的领域名"
    audience: "otel-agent"
    tls_config:
      ca_file: "/path/to/ca.pem" # 之前生成的CA根证书

receivers:
  otlp:
    protocols:
      http:
        tls:
          cert_file: "/path/to/agent.example.com.pem" # Agent的服务端证书
          key_file: "/path/to/agent.example.com-key.pem" # Agent的私钥
        auth:
          authenticator: oidcauth # 绑定OIDC鉴权扩展

processors:
  batch: # 批量处理优化性能

exporters:
  # 替换成你实际的追踪存储服务,比如Jaeger、Zipkin等
  jaeger:
    endpoint: "jaeger.example.com:14250"
    tls:
      insecure: false

service:
  extensions: [oidcauth]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [jaeger]

说明:OIDC扩展会验证Collector发送的JWT令牌,确保携带otel-traces-writer角色;OTLP接收器强制TLS加密,拒绝未加密的连接。

4. OpenTelemetry Collector(代理端)配置

编写otel-collector-config.yaml,启用OAuth2客户端凭证鉴权的OTLP导出器:

extensions:
  oauth2client:
    client_id: "otel-collector-client" # Keycloak里创建的客户端ID
    client_secret: "你的Keycloak客户端密钥" # 从Keycloak客户端详情里复制
    token_url: "https://你的Keycloak地址/realms/你的领域名/protocol/openid-connect/token"
    scopes: ["openid", "otel-traces-writer"] # 请求的权限范围
    tls_config:
      ca_file: "/path/to/ca.pem" # CA根证书,验证Keycloak的HTTPS证书

receivers:
  otlp:
    protocols:
      http:
      grpc: # 接收InsideAppExporter的追踪数据

processors:
  batch:

exporters:
  otlp:
    endpoint: "agent.example.com:4318" # Agent的OTLP HTTP端点
    tls:
      insecure: false
      ca_file: "/path/to/ca.pem" # 验证Agent的服务端证书
    auth:
      authenticator: oauth2client # 绑定OAuth2客户端扩展,自动获取并携带JWT

service:
  extensions: [oauth2client]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]

说明:OAuth2客户端扩展会自动从Keycloak获取JWT令牌,每次发送数据时带上;OTLP导出器启用TLS,确保和Agent的连接加密。

5. InsideAppExporter应用配置

如果要给应用到Collector的连接也加安全,可配置OTLP导出器启用TLS(可选,根据实际需求):
以Java SDK为例,用环境变量配置:

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.example.com:4318
OTEL_EXPORTER_OTLP_TLS_CA_FILE=/path/to/ca.pem

如果Collector也配置了鉴权,还需添加OAuth2相关配置,否则保持上述配置即可。


参考资料

  • 使用Keycloak保护OpenTelemetry端点
  • 保护OpenTelemetry Collector(已过时)
  • 认证器 - OAuth2客户端凭证(配置客户端Collector的导出器)
  • 认证器 - OIDC(配置服务端Agent的接收器)
  • cfssl(生成SSL密钥)

内容的提问来源于stack exchange,提问作者lei hua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:35:30