使用 python 在 Elasticsearch 查询中进行用户身份验证
Posted
技术标签:
【中文标题】使用 python 在 Elasticsearch 查询中进行用户身份验证【英文标题】:User authentication in Elasticsearch query using python 【发布时间】:2017-04-28 10:28:47 【问题描述】:我正在使用 Python 的弹性搜索。我的代码看起来有点像这样:-
from elasticsearch import Elasticsearch
if __name__ == '__main__':
index="IndexPosition"
es=Elasticsearch(['https://localhost:8080'])
res = es.search(index='0'.format(index), doc_type="log",size=1000, from_=0, body= "query":
"match":
...Match condition
)
现在,由于架构的变化,在 elasticsearch 中添加了用户身份验证。假设 username-user 和 password-pass。如何在查询中传递用户名和密码..?
【问题讨论】:
【参考方案1】:您需要将用户名和密码传递给 Elasticsearch 对象,如下所示:
es = Elasticsearch(['http://localhost:8080'], http_auth=('user', 'pass'))
【讨论】:
【参考方案2】:你可以在url中传递用户名、密码:
例如:
用户名:弹性
密码:更改密码
es = Elasticsearch(hosts="http://elastic:changeme@localhost:9200/")
使用 CURL
curl -X GET "elastic:changeme@localhost:9200/"
【讨论】:
为什么 this 解决方案对我有用,而不是上面的那个 (http_auth=(user,pwd)
)?此外,以明文形式保存密码对于概念验证来说很好,但我不能长期这样做。关于如何隐藏密码的建议?
@Guy 在代码中避免硬编码凭据的一种常见方法是使用环境变量。 pypi.org/project/python-dotenv 允许您将凭据放入 .env 文件中并从那里加载它们作为环境变量【参考方案3】:
您可以将 elasticsearch 连接到下面的主机 url 配置
es = Elasticsearch(hosts="http://user:pass@localhost:9200/")
【讨论】:
【参考方案4】:es = Elasticsearch(['host': 'localhost', 'port': '8080'], http_auth=('user', 'pass'))
【讨论】:
【参考方案5】:是的,使用es = Elasticsearch(hosts="http://username:password@es-endpoint:es-port/")
es版测试成功7.7.1
【讨论】:
嗨,在尝试查看索引是否存在时出现身份验证错误?您能否提供一些示例代码。在使用用户名/密码创建 esClient 对象后,我正在使用“res = esClient.indices.exists('metadata-store')”【参考方案6】:我用过
es = Elasticsearch(['http://kibana.mydomain.com:8080'], http_auth=('user', 'pass'))
es.search(index="logstash-my_index_log", body=, size=99)
NotFoundError: NotFoundError(404, 'Not Found', 'Not Found')
【讨论】:
我看到您的域包含关键字 Kibana。 Kibana 只是用于可视化和管理存储在 ElasticSearch 中的数据的前端,如果您尝试使用 Python 以编程方式访问 ES,则主机应该指向 ES。以上是关于使用 python 在 Elasticsearch 查询中进行用户身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 编辑保存在 Elasticsearch 中的文档
python对于新版本elasticsearch-dsl(7.1)的使用说明
Elasticsearch:运用 Python 实现在 Elasticsearch 上的向量搜索
python使用elasticsearch模块操作elasticsearch