You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Logstash HTTP输入添加API Token身份验证

给Logstash HTTP输入添加API Token身份验证

Logstash的HTTP输入插件本身没有像Elasticsearch输出那样内置的api_key配置项,但可以通过检查请求头+过滤不符合条件的请求来实现API Token验证,下面是具体的配置方案:

修改后的完整配置

input {
    http {
        host => "0.0.0.0"
        port => 8080
        ssl => false
        # 开启捕获请求头,用于后续验证
        request_headers => true
    }
}

filter {
    # 校验Authorization头的格式与令牌值
    if [headers][Authorization] !~ /^ApiKey\s+my_api_key$/ {
        # 验证失败时返回401未授权响应
        mutate {
            add_field => {
                "[@metadata][http_response_code]" => 401
                "[@metadata][http_response_body]" => '{"error": "Invalid or missing API Token"}'
            }
        }
        # 丢弃验证失败的事件,不进入后续输出流程
        drop {}
    }
}

output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts => "elasticsearch:9200"
        api_key => "my_api_key"
        index => "my-local-index"
        # 仅处理验证通过的事件
        if ![@metadata][http_response_code] { }
    }
}

配置说明

  • 输入部分:开启request_headers => true,让Logstash捕获请求的HTTP头信息,后续可通过[headers][Authorization]获取授权头内容。
  • 过滤部分:使用正则表达式匹配Authorization头的格式(必须为ApiKey 你的令牌值),不匹配则标记响应状态码与内容,直接丢弃事件。注意把my_api_key替换为你实际使用的令牌。
  • 输出部分:通过@metadata中的标记,确保只有验证通过的事件才会输出到Elasticsearch,stdout可用于调试验证结果。

测试验证

合法请求(验证通过)

curl -d '{"message": "my log"}' -H 'Content-Type: application/json' -H 'Authorization: ApiKey my_api_key' http://localhost:8080

此时Logstash会正常接收事件,输出到stdout和Elasticsearch。

非法请求(验证失败)

# 缺少Authorization头
curl -d '{"message": "invalid log"}' -H 'Content-Type: application/json' http://localhost:8080

# 令牌错误
curl -d '{"message": "invalid log"}' -H 'Content-Type: application/json' -H 'Authorization: ApiKey wrong_key' http://localhost:8080

这两种情况都会收到401响应,事件会被Logstash丢弃,不会进入输出环节。

内容的提问来源于stack exchange,提问作者Shepler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:01:19