问题是因为使用的AWS OpenSearch版本需要IAM权限才能进行索引操作。以下是解决方案:
找出具有OpenSearch服务权限的AWS Identity and Access Management (IAM) 用户的 ARN。
将以下内容添加到IAM用户的策略中。用户的ARN在这个示例中表示了需要更改的部分。
例如:
"Effect": "Allow",
"Action": [
"es:*"
],
"Resource": "arn:aws:es:us-west-2::domain/my-search-domain/*"
在Resource字段中:
将“us-west-2”更改为使用OpenSearch服务的区域。
将“
将“my-search-domain”更改为OpenSearch服务的域名。
例如:
import boto3
from requests_aws4auth import AWS4Auth
host = 'search-my-search-domain-abc123.us-west-2.es.amazonaws.com'
region = 'us-west-2'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
client = boto3.client('es', region_name=region, aws_access_key_id=credentials.access_key, aws_secret_access_key=credentials.secret_key, aws_session_token=credentials.token)
例如:
index_name = 'my-index-name'
if not client.indices.exists(index_name):
print('Index does not exist')
else:
print('Index exists')
通过使用IAM权限,并在OpenSearch客户端上进行身份验证,您可以通过python程序运行OpenSearch操作,以便在OpenSearch索引内进行多种操作。