Предоставление доступа только для чтения пользователю IBM Cloud Elasticsearch - PullRequest
1 голос
/ 27 апреля 2020

Я хочу иметь пользователя, который имеет доступ только для чтения к данному индексу. Я прочитал документацию Elasticsearch и узнал, что этого можно достичь с помощью API xpack, предоставляемого Elasticsearch в качестве функции безопасности. Сейчас я использую «IBM Cloud Database для Elasticsearch», и он поставляется с Elasticsearch 6.8.4, я успешно могу общаться с ним через Python и REST API, а также могу создать индексный документ et c, но я я вообще не могу использовать ни один из методов xpack, даже такие базовые c, как get_role или get_user, он выдает ошибку, которую я добавил к настоящему документу. Я также попробовал ту же версию Elasticsearch, локально развернутую на моей машине, и я успешно могу использовать все методы xpack. Ниже приведены примеры того, как я пытаюсь использовать метод get_user с использованием запросов иasticsearch python.

Вот используемый метод запросов и ответ:

# Get User via requests

endpoint = "https://9fb4-f729-4d0c-86b1-da.eb46187.databases.appdomain.cloud:31248/_xpack/security/user"

header = {'Authorization': access_token,
          'Content-Type': 'application/json',
          'Accept': 'application/json'}

requests.get(url=endpoint, 
              auth=(cred_elastic["username"],cred_elastic['password']), 
              verify='./cert.pem',
              headers=header).json()

Ответ:

{'error': {'root_cause': [{'type': 'security_exception',
    'reason': 'Unexpected exception indices:data/read/get'}],
  'type': 'security_exception',
  'reason': 'Unexpected exception indices:data/read/get'},
 'status': 500}

Вот pythonasticsearch тот же метод и ответ:

# Creating Elasticsearch Object
context = create_default_context(cadata=cred_elastic['tls_certificate'])
es = Elasticsearch(cred_elastic['endpoint'],
                   ssl_context=context,
                   http_auth=(cred_elastic['username'],
                              cred_elastic['password']))
es.security.get_user()

Ответ:

TransportError: TransportError(405, 'Incorrect HTTP method for uri [/_security/user] and method [GET], allowed: [POST]', 'Incorrect HTTP method for uri [/_security/user] and method [GET], allowed: [POST]')

Кроме того, во втором методе ошибка другая, но если вместо этого я использую put_user, он выдает точно такую ​​же ошибку 500, что и предыдущий метод.

Я использую учетные данные пользователя и службы по умолчанию , которые IBM Cloud создает для аутентификация.

Обновление: это ссылка на службу, которую я использую (также содержит ссылку на документацию): https://cloud.ibm.com/catalog/services/databases-for-elasticsearch

...