我正在尝试从作为附加了 AmazonESFullAccess 策略的角色运行的 Python Lambda 脚本将文档提交到 Elasticsearch 索引。我正在使用 python elasticsearch 库创建请求,并使用 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)
然后发送批量创建请求,如下所示:
ES_CLIENT.bulk(
index='test_index',
body=docs)
这是失败的,原因如下:
TransportError(403, u'{"message": "请求中包含的安全令牌无效。" }'): AuthorizationException ...
尽管使用管理员用户访问密钥运行时相同的代码有效。
为什么这些请求在作为具有“完全 ES 访问权限”的角色运行时会失败?