我掙扎了一段時間去做類似的事情。目前,boto3庫不支持簽署es請求,但由於I raised an issue與它們一起成爲功能請求。
下面是我在同時使用上述DavidMuller's library和boto3提到讓我STS會話憑證進行:
import boto3
from aws_requests_auth.aws_auth import AWSRequestsAuth
from elasticsearch import Elasticsearch, RequestsHttpConnection
session = boto3.session.Session()
credentials = session.get_credentials().get_frozen_credentials()
es_host = 'search-my-es-domain.eu-west-1.es.amazonaws.com'
awsauth = AWSRequestsAuth(
aws_access_key=credentials.access_key,
aws_secret_access_key=credentials.secret_key,
aws_token=credentials.token,
aws_host=es_host,
aws_region=session.region_name,
aws_service='es'
)
# use the requests connection_class and pass in our custom auth class
es = Elasticsearch(
hosts=[{'host': es_host, 'port': 443}],
http_auth=awsauth,
use_ssl=True,
verify_certs=True,
connection_class=RequestsHttpConnection
)
print(es.info())
希望這樣可以節省別人一些時間。
確實做了一些挖掘。不要以爲'generate_presigned_url'是要走的路。我認爲唯一可用的操作是文檔中列出的高級ES操作:http://boto3.readthedocs.io/en/latest/reference/services/es.html#ElasticsearchService.Client.generate_presigned_url – Alec