匿名身份验证编辑

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 服务器的限速功能。