我试图从Python Lambda脚本将文档提交到Elasticsearch索引,该脚本作为附加了AmazonESFullAccess策略的角色运行。我用pythonelasticsearch库创建请求,并用aws_requests_auth库对它们进行签名。在
cred = boto3.session.Session().get_credentials()
es_host = '<elasticsearch-server>'
auth = AWSRequestsAuth(
aws_access_key=cred.access_key,
aws_secret_access_key=cred.secret_key,
aws_host=es_host,
aws_region='us-east-1',
aws_service='es')
ES_CLIENT = Elasticsearch(
host=es_host,
port=80,
connection_class=RequestsHttpConnection,
http_auth=auth)
然后按如下方式发送批量请求:
^{pr2}$这是由于以下原因而失败的:
TransportError(403, u'{"message": "The security token included in the request is invalid." }'): AuthorizationException ...
虽然用户密钥与运行相同的管理代码。在
为什么这些请求在作为具有“完全访问权限”的角色运行时失败?在
因为Elasticsearch是AWS的一个独立实体,但是一个版本是由AWS托管的,所以Elasticsearch似乎没有像您期望的那样对待IAM。。AWS已经有了一些可以尝试的东西,但是仅仅使用access_密钥和secret_密钥就不能很好地工作了。它还需要会话令牌。在
答案是使用
cred.token
以及访问密钥和密钥,然后将其传递到AWSRequestsAuth对象:相关问题 更多 >
编程相关推荐