无法通过Python访问ElasticSearch AWS

Fil*_*ano 7 python amazon-web-services elasticsearch elasticsearch-dsl-py

我正试图通过Python从我的localhost访问ElasticSearch AWS(我可以通过我的浏览器访问它).

from elasticsearch import Elasticsearch
ELASTIC_SEARCH_ENDPOINT = 'https://xxx'
es = Elasticsearch([ELASTIC_SEARCH_ENDPOINT])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ImproperlyConfigured('Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically.',)
Run Code Online (Sandbox Code Playgroud)

我该如何访问它?我没有配置任何证书,我只解放了可以访问ElasticSearch Service的IP.

小智 16

对于python 3.5安装证书并使用ca_certs = certifi.where()这将传递证书

import certifi
from elasticsearch import Elasticsearch

host = 'https://###########.ap-south-1.es.amazonaws.com'

es = Elasticsearch([host], use_ssl=True, ca_certs=certifi.where())
Run Code Online (Sandbox Code Playgroud)


Aja*_*ngh 9

elasticsearch-py不附带默认的根证书集.要使用SSL证书验证,您需要将自己指定为ca_certs或安装将自动获取的certifi.

from elasticsearch import Elasticsearch

# you can use RFC-1738 to specify the url
es = Elasticsearch(['https://user:secret@localhost:443'])

# ... or specify common parameters as kwargs

# use certifi for CA certificates
import certifi

es = Elasticsearch(
    ['localhost', 'otherhost'],
    http_auth=('user', 'secret'),
    port=443,
    use_ssl=True 
)

# SSL client authentication using client_cert and client_key

es = Elasticsearch(
    ['localhost', 'otherhost'],
    http_auth=('user', 'secret'),
    port=443,
    use_ssl=True,
    ca_certs='/path/to/cacert.pem',
    client_cert='/path/to/client_cert.pem',
    client_key='/path/to/client_key.pem',
)
Run Code Online (Sandbox Code Playgroud)

https://elasticsearch-py.readthedocs.io/en/master/


Edh*_*ler 5

我是这样做的,它有效:

from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

host = 'YOURHOST.us-east-1.es.amazonaws.com'
awsauth = AWS4Auth(YOUR_ACCESS_KEY, YOUR_SECRET_KEY, REGION, 'es')

es = Elasticsearch(
    hosts=[{'host': host, 'port': 443}],
    http_auth=awsauth,
    use_ssl=True,
    verify_certs=True,
    connection_class=RequestsHttpConnection
)
print(es.info())
Run Code Online (Sandbox Code Playgroud)