AWS Elasticsearch服务角色权限

2024-09-30 10:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从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 ...

虽然用户密钥与运行相同的管理代码。在

为什么这些请求在作为具有“完全访问权限”的角色运行时失败?在


Tags: lambdakey文档脚本authawshost角色
1条回答
网友
1楼 · 发布于 2024-09-30 10:38:44

因为Elasticsearch是AWS的一个独立实体,但是一个版本是由AWS托管的,所以Elasticsearch似乎没有像您期望的那样对待IAM。。AWS已经有了一些可以尝试的东西,但是仅仅使用access_密钥和secret_密钥就不能很好地工作了。它还需要会话令牌。在

答案是使用cred.token以及访问密钥和密钥,然后将其传递到AWSRequestsAuth对象:

auth = AWSRequestsAuth(
    aws_access_key=cred.access_key,
    aws_secret_access_key=cred.secret_key,
    aws_token=cred.token,
    aws_host=es_host,
    aws_region='us-east-1',
    aws_service='es')

相关问题 更多 >

    热门问题