我有一个执行 ssl-pki 身份验证的 nginx 配置 - 我很高兴能够对我的用户进行身份验证。
但是,我想更进一步 - 我想根据 ssl 变量允许/拒绝对资源的访问 - 具体来说$ssl_client_s_dn
(并验证是否$ssl_client_verify
“成功”)
基于此,我想根据用户列表有选择地允许/拒绝 URL 组。在这种情况下,Elasticsearch。我有:
- 我想要访问的一些常见 API(服务器状态、集群健康、‘ping’)。
- 我希望一组用户能够“看到”一些指标
- 我希望另一组用户能够“看到”一些索引。
现在看来我可以大概做这个http_auth_request
- 重定向到“auth”url - 有点像这个博客
但这对我来说似乎有点小题大做,因为要做到这一点我必须编写自己的“引擎”来接受/读取 http,根据正则表达式对其进行验证,并输出响应代码。
我正在尝试为我做“白名单”例如:
allow if /(logstash|filebeat|topbeat)-mygroup-.*/;
(其中“mygroup”是从某个文件读取的,理想情况下允许拥有多个组成员身份)。
现在,最好的办法是不是http_auth_request
就是将其提供给一个真正精简的验证器 Web 应用程序(独立脚本,或者 NGINX 内的 cgi 类型脚本),或者有更好的方法?
此模块是 nginx 的附加模块,这意味着需要重新编译。这不是什么灾难,但如果没有必要(我可以继续使用“原版”nginx),那就更好了。
答案1
也许类似这样的方法可以奏效。给定一个文件路径,它将返回“禁止”响应,除非$ssl_client_verify
已正确设置。
location ^~ /(logstash|filebeat|topbeat) {
if ($ssl_client_verify != "SUCCESS") {
return 403;
}
}