匿名身份验证
编辑

Elastic APM 代理可以将未经身份验证(匿名)的事件发送到 APM 服务器。如果无法从传入请求中提取身份验证令牌,则该事件被视为匿名事件。APM 服务器对此类请求的默认响应取决于其配置。

配置 默认值

已配置API 密钥密钥

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

未配置 API 密钥或密钥

APM 服务器接受匿名请求。

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

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

只有在配置了API 密钥密钥时,才能启用和配置匿名身份验证。如果没有配置两者中的任何一个,则会忽略这些设置。

配置API 密钥密钥后,必须启用匿名身份验证才能收集 RUM 数据。将匿名代理访问设置为 true 以启用匿名身份验证。

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

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

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

获取传入请求的client.ip地址编辑

传入请求的远程 IP 地址可能与最终用户的实际 IP 地址不同,例如,由于使用了代理。为此,APM 服务器尝试从 HTTP 标头中获取传入请求的 IP 地址。支持的标头按以下顺序解析

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

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

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

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

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