我挣扎了一段时间去做类似的事情。目前,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