匿名身份验证
Elastic APM 探针可以向 APM Server 发送未认证的(匿名)事件。如果无法从传入请求中提取出认证令牌,则该事件被视为匿名事件。APM Server 对这些请求的默认响应取决于其配置
然而,在某些情况下,同时允许经过认证和匿名的请求是合理的。例如,由于无法保护密钥令牌或 API 密钥,因此无法对来自前端服务的请求进行认证。运行在浏览器中的真实用户监控(RUM)探针,或运行在用户应用程序中的 Android、iOS/Swift 探针就是这种情况。不过,你可能仍然希望对来自后端服务的请求进行认证。为了解决这个问题,你可以在 APM Server 中启用匿名认证,以允许引入未经认证的客户端 APM 数据,同时仍然要求对服务端服务进行认证。
当配置了 API 密钥 或 密钥令牌 时,必须启用匿名认证才能收集 RUM data。将 Anonymous Agent access 设置为 true 以启用匿名认证。
为客户端服务配置匿名认证时,有一些配置变量可以减轻恶意请求对未经认证的 APM Server 端点的影响。
使用 Allowed anonymous agents 和 Allowed anonymous services 配置来确保每个传入请求的 agent.name 和 service.name 与指定的列表相匹配。
此外,APM Server 可以根据请求的客户端 IP 地址(client.ip)对未经认证的请求进行速率限制。这允许你指定每个唯一 IP 地址每秒允许的最大请求数。
当配置了 API 密钥 或 密钥令牌 时,必须启用匿名认证才能收集 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 地址。支持的标头按以下顺序进行解析
已转发X-Real-IpX-Forwarded-For
如果这些标头都不存在,则使用传入请求的远程地址。
HTTP 标头很容易被修改;任何人都可以通过更改或设置(例如)X-Forwarded-For 标头的值来伪造推导出的 client.ip 值。因此,如果你的任何客户端不可信,我们建议在 APM Server 前面设置反向代理或负载均衡器。
使用代理允许你清除任何现有的 IP 转发 HTTP 标头,并将其替换为代理设置的标头。这可以防止恶意用户轮换伪造的 IP 地址来绕过 APM Server 的速率限制功能。