匿名身份验证
编辑

Elastic APM Agent 可以向 APM Server 发送未经身份验证的(匿名)事件。如果无法从传入的请求中提取任何身份验证令牌,则该事件被视为匿名事件。APM Server 对这些请求的默认响应取决于其配置

配置 默认

配置了 API 密钥密钥令牌

匿名请求将被拒绝并返回身份验证错误。

未配置 API 密钥或密钥令牌

APM Server 接受匿名请求。

但在某些情况下,允许经过身份验证的请求和匿名请求都是有意义的。例如,无法对前端服务的请求进行身份验证,因为密钥令牌或 API 密钥无法得到保护。这是在浏览器中运行的 Real User Monitoring (RUM) Agent,或在用户应用程序中运行的 Android 或 iOS/Swift Agent 的情况。但是,您仍然可能希望对来自后端服务的请求进行身份验证。为了解决这个问题,您可以在 APM Server 中启用匿名身份验证,以允许摄取未经身份验证的客户端 APM 数据,同时仍然要求对服务器端服务进行身份验证。

为客户端服务配置匿名身份验证编辑

只有在配置了API 密钥密钥令牌的情况下,才能启用和配置匿名身份验证。如果两者均未配置,则这些设置将被忽略。

当配置了 API 密钥密钥令牌时,必须启用匿名身份验证才能收集 RUM 数据。将匿名 Agent 访问设置为 true 以启用匿名身份验证。

为客户端服务配置匿名身份验证时,有一些配置变量可以减轻恶意请求对未经身份验证的 APM Server 端点的影响。

使用允许的匿名 Agent允许的匿名服务配置,以确保每个传入请求的 agent.nameservice.name 与指定的列表匹配。

此外,APM Server 可以根据请求的客户端 IP 地址 (client.ip) 对未经身份验证的请求进行速率限制。这允许您指定每个唯一 IP 地址每秒允许的最大请求数。

派生传入请求的 client.ip 地址编辑

传入请求的远程 IP 地址可能与最终用户的实际 IP 地址不同,例如,由于代理。因此,APM Server 会尝试从 HTTP 标头中派生传入请求的 IP 地址。支持的标头按以下顺序解析

  1. Forwarded
  2. X-Real-Ip
  3. X-Forwarded-For

如果不存在这些标头中的任何一个,则使用传入请求的远程地址。

使用反向代理或负载均衡器编辑

HTTP 标头很容易被修改;任何人都可以通过更改或设置(例如)X-Forwarded-For 标头的值来伪造派生的 client.ip 值。因此,如果您的任何客户端不受信任,我们建议在 APM Server 前面设置一个反向代理或负载均衡器。

使用代理允许您清除任何现有的 IP 转发 HTTP 标头,并将其替换为由代理设置的标头。这可以防止恶意用户通过循环使用伪造的 IP 地址来绕过 APM Server 的速率限制功能。