Elasticsearch - 检查索引是否存在时出现身份验证错误
Elasticsearch - Authentication error when check to see if index exist
我的弹性搜索启用了 kibana 的认知身份验证。正如预期的那样工作正常。
在我的 python 脚本中,我通过在 http_auth() 中提供 username/password 来连接到 elasticsearch,同时创建连接对象。但是当我尝试检查索引是否存在时,出现身份验证错误?有人可以帮忙吗?请为您的模拟提供示例代码。
from __future__ import print_function
import json
import time
import urllib
import re
import sys
import requests
import base64
import time
from elasticsearch import Elasticsearch
from datetime import datetime
esEndpoint = ""
uname
pwd
indexName = 'index_1'
mappings_rds = {
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties" : {
"tableName": {
"type": "keyword"
},
"tableRows": {
"type": "integer"
},
"updatedTime": {
"type": "date",
"format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
},
"created_timestamp":{
"type": "date",
"format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
}
}
}
}
esClient = Elasticsearch([esEndPoint],http_auth=(uname,pwd))
try:
res = esClient.indices.exists(indexName)
print(res)
if res is False:
r = esClient.indices.create(indexName, body=mapping_rds, ignore=400)
return 1
except Exception as E:
print("Unable to Create Index {0}".format(indexName))
谢谢大家的评论。我就此与 AWS 支持团队进行了通话。发现问题出在我使用的用户名和密码上。我使用的是通过 AWS Cognito 创建的用户凭证。 AWS 支持团队确认上述凭据仅用于 Kibana 访问,不能用于从数据块/python 脚本连接到 Elasticsearch。
此处提供更多信息:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html
一旦我生成 access/secret 键,并从我的 python 脚本中使用它,我就能够连接到 elasticsearch 以创建索引。
分享一个示例代码供以后参考:
session=boto3.session.Session(aws_access_key_id=akey, aws_secret_access_key=skey, region_name=region)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
print(credentials.access_key, credentials.secret_key, credentials.token)
es = Elasticsearch(
hosts = [{'host': esEndpoint, 'port': 443}],
http_auth = awsauth,
use_ssl = True,
verify_certs = True,
connection_class = RequestsHttpConnection
)
谢谢
我的弹性搜索启用了 kibana 的认知身份验证。正如预期的那样工作正常。
在我的 python 脚本中,我通过在 http_auth() 中提供 username/password 来连接到 elasticsearch,同时创建连接对象。但是当我尝试检查索引是否存在时,出现身份验证错误?有人可以帮忙吗?请为您的模拟提供示例代码。
from __future__ import print_function
import json
import time
import urllib
import re
import sys
import requests
import base64
import time
from elasticsearch import Elasticsearch
from datetime import datetime
esEndpoint = ""
uname
pwd
indexName = 'index_1'
mappings_rds = {
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties" : {
"tableName": {
"type": "keyword"
},
"tableRows": {
"type": "integer"
},
"updatedTime": {
"type": "date",
"format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
},
"created_timestamp":{
"type": "date",
"format":"date_optional_time||yyyy-MM-dd'T'HH:mm:ss"
}
}
}
}
esClient = Elasticsearch([esEndPoint],http_auth=(uname,pwd))
try:
res = esClient.indices.exists(indexName)
print(res)
if res is False:
r = esClient.indices.create(indexName, body=mapping_rds, ignore=400)
return 1
except Exception as E:
print("Unable to Create Index {0}".format(indexName))
谢谢大家的评论。我就此与 AWS 支持团队进行了通话。发现问题出在我使用的用户名和密码上。我使用的是通过 AWS Cognito 创建的用户凭证。 AWS 支持团队确认上述凭据仅用于 Kibana 访问,不能用于从数据块/python 脚本连接到 Elasticsearch。
此处提供更多信息:https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html
一旦我生成 access/secret 键,并从我的 python 脚本中使用它,我就能够连接到 elasticsearch 以创建索引。
分享一个示例代码供以后参考:
session=boto3.session.Session(aws_access_key_id=akey, aws_secret_access_key=skey, region_name=region)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
print(credentials.access_key, credentials.secret_key, credentials.token)
es = Elasticsearch(
hosts = [{'host': esEndpoint, 'port': 443}],
http_auth = awsauth,
use_ssl = True,
verify_certs = True,
connection_class = RequestsHttpConnection
)
谢谢