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'{"メッセージ": "リクエストに含まれるセキュリティ トークンが無効です。" }'): AuthorizationException ...
ただし、管理者ユーザー アクセス キーを使用して実行すると、同じコードが機能します。
「フル ES アクセス」を持つロールとして実行すると、これらのリクエストが失敗するのはなぜですか?