我正在尝试创建一个使用 AWS OpenSearch Serverless 的最小工作示例。在 本 教程的帮助下,这是代码:
import boto3
from opensearchpy import OpenSearch, RequestsHttpConnection, AWSV4SignerAuth
host = 'onb565zzbfkjr3spn8v5.us-east-1.aoss.amazonaws.com'
region = 'us-east-1'
credentials = boto3.Session().get_credentials()
auth = AWSV4SignerAuth(credentials, region)
client = OpenSearch(
hosts = [{
'host': host,
'port': 443
}],
http_auth = auth,
use_ssl = True,
verify_certs=True,
connection_class = RequestsHttpConnection
)
def create_index(index_name):
index_body = {
'settings': {
'index': {
'number_of_shards': 1
}
}
}
response = client.indices.create(index_name, body=index_body)
print('\nCreating index:')
print(response)
create_index('myindex')
我执行了以下步骤:
-
创建了一个具有策略
AmazonOpenSearchServiceFullAccess
和AmazonESFullAccess
的 IAM 用户(以防万一)。我还添加了两个内联策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "aoss:APIAccessAll",
"Resource": "*"
}
]
}
和
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "aoss:DashboardsAccessAll",
"Resource": "*"
}
]
}
(由于某种原因,后两个权限在我创建集合时不显示)
-
执行
aws configure
以提供密钥和区域。 -
使用
Public
访问规则创建了一个集合,将 IAM 用户作为所选主体,并启用了所有访问。
尽管如此,我在尝试创建索引时仍收到 403(访问被拒绝)。我可能会遗漏什么?
更新 我现在在 AWS 社区 中提出了同样的问题。
在使用 AWS OpenSearch Serverless 创建索引时遇到“访问被拒绝”错误,这是因为虽然已授予 IAM 用户广泛的 OpenSearch 访问权限,但还需要明确允许与的 OpenSearch Serverless 集合关联的 网络策略 对其进行访问。
以下是解决此问题并使的代码正常运行的步骤:
-
识别的网络策略:
- 在 OpenSearch Serverless 控制台中,转到“集合”。
- 选择的集合,然后导航到“网络访问”选项卡。
-
记下与的集合关联的网络策略的名称。它通常类似于
OpenSearchServerlessNetworkPolicy-*
。
-
修改网络策略:
- 在 OpenSearch Serverless 控制台中,转到“网络访问”。
- 选择在步骤 1 中记下的网络策略。
- 编辑策略以将允许的来源添加到的 IAM 用户。可以使用以下 JSON 语法:
json { "Version": "2022-11-01", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/YOUR_IAM_USER_NAME" }, "Action": [ "aoss:HTTPRequest" ], "Resource": "*" } ] }
-
将
YOUR_ACCOUNT_ID
替换为的 AWS 账户 ID,并将YOUR_IAM_USER_NAME
替换为的 IAM 用户名。
-
测试的代码:
- 保存网络策略更改后,请尝试再次运行的 Python 代码。现在,应该能够成功创建索引,而不会出现“访问被拒绝”错误。
其他提示:
-
原则的最低权限:
始终遵循最低权限原则。与其授予
aoss:APIAccessAll
和aoss:DashboardsAccessAll
等广泛权限,不如授予的 IAM 用户完成其任务所需的特定权限。 - 内联策略与托管策略: 虽然可以使用内联策略,但最佳实践是使用托管策略来简化权限管理。可以创建自定义托管策略或使用 AWS 提供的预定义策略。
通过按照上述步骤操作,将配置 OpenSearch Serverless 网络策略以允许的 IAM 用户访问并成功创建索引。
标签:python,amazon-web-services,boto3,aws-sdk,amazon-opensearch From: 76649409