匿名身份验证
Elastic Stack
Elastic APM agent 可以将未经身份验证(匿名)的事件发送到 APM Server。如果无法从传入请求中提取任何身份验证令牌,则该事件被认为是匿名的。 APM Server 对这些请求的默认响应取决于其配置
但在某些情况下,允许经过身份验证和匿名请求是有意义的。 例如,无法对来自前端服务的请求进行身份验证,因为无法保护 secret 令牌或 API 密钥。 浏览器中运行的 Real User Monitoring (RUM) agent,或者用户应用程序中运行的 Android 或 iOS/Swift agent 就是这种情况。 但是,您可能仍然希望对来自后端服务的请求进行身份验证。 为了解决这个问题,您可以启用 APM Server 中的匿名身份验证,以允许提取未经身份验证的客户端 APM 数据,同时仍然需要对服务器端服务进行身份验证。
当配置了 API 密钥或secret 令牌时,必须启用匿名身份验证才能收集 RUM 数据。 将 匿名 Agent 访问 设置为 true 以启用匿名身份验证。
为客户端服务配置匿名身份验证时,有一些配置变量可以缓解恶意请求对未经身份验证的 APM Server 端点的影响。
使用 允许的匿名 Agent 和 允许的匿名服务 配置,以确保每个传入请求的 agent.name
和 service.name
与指定的列表匹配。
此外,APM Server 可以根据请求的客户端 IP 地址 (client.ip
) 限制未经身份验证的请求的速率。 这允许您指定每个唯一 IP 地址每秒允许的最大请求数。
当配置了 API 密钥或secret 令牌时,必须启用匿名身份验证才能收集 RUM 数据。 要启用匿名访问,请将 apm-server.rum.enabled
或 apm-server.auth.anonymous.enabled
设置为 true
。
由于任何人都可以将匿名事件发送到 APM Server,因此可以使用其他配置变量来限制 APM Server 处理的匿名事件的数量;吞吐量等于 rate_limit.ip_limit
乘以 rate_limit.event_limit
。
有关完整的选项列表和示例配置文件,请参阅匿名身份验证。
传入请求的远程 IP 地址可能与最终用户的实际 IP 地址不同,例如,由于代理的原因。 因此,APM Server 尝试从 HTTP 标头推导传入请求的 IP 地址。 支持的标头按以下顺序解析
Forwarded
X-Real-Ip
X-Forwarded-For
如果这些标头都不存在,则使用传入请求的远程地址。
HTTP 标头很容易被修改;任何人都可以通过更改或设置(例如)X-Forwarded-For
标头的值来欺骗派生的 client.ip
值。 因此,如果您的任何客户端不受信任,我们建议在 APM Server 前面设置反向代理或负载均衡器。
使用代理允许您清除任何现有的 IP 转发 HTTP 标头,并将其替换为代理设置的一组标头。 这样可以防止恶意用户循环欺骗 IP 地址以绕过 APM Server 的速率限制功能。