簡體   English   中英

Elasticsearch 服務與 Cognito — 如何通過 Python HTTP 請求訪問

[英]Elasticsearch Service with Cognito — how to access via Python HTTP request

我最近設置了一個 Elasticsearch 服務並將其配置為使用 Cognito 進行身份管理。 我遵循了本指南,到目前為止一切都按預期工作。 我能夠按預期添加新用戶,他們可以按預期訪問 Kibana。

但是,我還想使用 Python 與 Elasticsearch 服務進行交互。 我已遵循本指南,但我收到有關沒有正確訪問權限的權限錯誤。

from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth
import boto3

host = 'hostname.us-east-2.es.amazonaws.com/'
region = 'us-east-2'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

es = Elasticsearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection
)

print(es.info())
AuthorizationException: AuthorizationException(403, 'security_exception', 'no permissions for [indices:admin/get] and User [name=arn:aws:iam::12345678:user/username, backend_roles=[], requestedTenant=null]')

我不確定問題是否與我配置 Conginto 的方式有關,或者是否與我提交此請求的方式有關。 任何有關找出我的問題可能出在哪里的幫助將不勝感激。

它也發生在我身上。 我找到了兩種方法,您必須為它們創建一個 IAM 用戶。

  • 打開 IAM 控制台並為 IAM 用戶提供必要的策略以訪問您的 elasticsearch 域(或者我僅附加了“AdministratorAccess”策略(它提供 AWS 的所有訪問權限)),然后您應該使用此 IAM 帳戶的憑證。
  • 或者打開kibana -> security -> roles -> 點擊all_access role -> mapped_users -> manage_mapping。 然后,您應該將 IAM 用戶的 arn 添加到后端角色。 您必須在代碼上使用此用戶的憑據而不是“boto3.Session().get_credentials()”來連接 ES。 如果您不熟悉 IAM 角色和策略,我建議您使用第二個。

您應該在 kibana 中轉到此頁面:

您可以使用此按鈕為 IAM 用戶創建憑證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM