首页 > 编程问答 >OpenSearch Serverless 中的访问被拒绝

OpenSearch Serverless 中的访问被拒绝

时间:2024-07-29 08:31:11浏览次数:8  
标签:python amazon-web-services boto3 aws-sdk amazon-opensearch

我正在尝试创建一个使用 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')

我执行了以下步骤:

  1. 创建了一个具有策略 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": "*"
        }
    ]
}

(由于某种原因,后两个权限在我创建集合时不显示)

  1. 执行 aws configure 以提供密钥和区域。

  2. 使用 Public 访问规则创建了一个集合,将 IAM 用户作为所选主体,并启用了所有访问。

尽管如此,我在尝试创建索引时仍收到 403(访问被拒绝)。我可能会遗漏什么?

更新 我现在在 AWS 社区 中提出了同样的问题。


在使用 AWS OpenSearch Serverless 创建索引时遇到“访问被拒绝”错误,这是因为虽然已授予 IAM 用户广泛的 OpenSearch 访问权限,但还需要明确允许与的 OpenSearch Serverless 集合关联的 网络策略 对其进行访问。

以下是解决此问题并使的代码正常运行的步骤:

  1. 识别的网络策略:

    • 在 OpenSearch Serverless 控制台中,转到“集合”。
    • 选择的集合,然后导航到“网络访问”选项卡。
    • 记下与的集合关联的网络策略的名称。它通常类似于 OpenSearchServerlessNetworkPolicy-*
  2. 修改网络策略:

    • 在 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 用户名。
  3. 测试的代码:

    • 保存网络策略更改后,请尝试再次运行的 Python 代码。现在,应该能够成功创建索引,而不会出现“访问被拒绝”错误。

其他提示:

  • 原则的最低权限: 始终遵循最低权限原则。与其授予 aoss:APIAccessAll aoss:DashboardsAccessAll 等广泛权限,不如授予的 IAM 用户完成其任务所需的特定权限。
  • 内联策略与托管策略: 虽然可以使用内联策略,但最佳实践是使用托管策略来简化权限管理。可以创建自定义托管策略或使用 AWS 提供的预定义策略。

通过按照上述步骤操作,将配置 OpenSearch Serverless 网络策略以允许的 IAM 用户访问并成功创建索引。

标签:python,amazon-web-services,boto3,aws-sdk,amazon-opensearch
From: 76649409

相关文章

  • python中的Telebot API不断断开连接
    使用远程机器人,不断断开服务。我暂时让它在发生这种情况时重新启动。下面是我的代码和错误:importrandomimporttelebotfromtelebot.typesimportInlineKeyboardMarkup,InlineKeyboardButtonfromthreadingimportTimer,Eventfromdotenvimportload_dotenvimporto......
  • 如何用Python制作Android服务?
    我想构建一个简单的Android应用程序,例如PushOver应用程序,它具有TCP服务器并接收其记录的文本消息,然后将其作为推送通知发送。这部分已经完成并且工作正常。但即使GUI应用程序关闭,我也想接收消息。我知道这是可能的,因为PushOver应用程序做到了!我想,我可能需要一......
  • Python Discord Bot 的应用程序命令的区域设置名称(多语言别名)
    如何根据用户的语言设置,使应用程序命令的名称具有不同的名称例如,如果一个用户将其discord的语言设置为英语,则用户可以看到英语的应用程序命令名称。另一方面,如果另一个用户将其不和谐语言设置为法语,则用户可以看到法语中的相同应用程序命令的名称。为此,我尝试使用ap......
  • 如何在Python中添加热键?
    我正在为游戏制作一个机器人,我想在按下热键时调用该函数。我已经尝试了一些解决方案,但效果不佳。这是我的代码:defstart():whileTrue:ifkeyboard.is_pressed('alt+s'):break...defmain():whileTrue:ifkeyboard.is_pr......
  • 在Python中解压文件
    我通读了zipfile文档,但不明白如何解压缩文件,只了解如何压缩文件。如何将zip文件的所有内容解压缩到同一目录中?importzipfilewithzipfile.ZipFile('your_zip_file.zip','r')aszip_ref:zip_ref.extractall('target_directory')将......
  • 如何在Python中从RSA公钥中提取N和E?
    我有一个RSA公钥,看起来像-----BEGINPUBLICKEY-----MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAvm0WYXg6mJc5GOWJ+5jkhtbBOe0gyTlujRER++cvKOxbIdg8So3mV1eASEHxqSnp5lGa8R9Pyxz3iaZpBCBBvDB7Fbbe5koVTmt+K06o96ki1/4NbHGyRVL/x5fFiVuTVfmk+GZNakH5dXDq0fwvJyVmUtGYA......
  • Swagger、Docker、Python-Flask: : https://editor.swagger.io/ 生成服务器 python-fl
    在https://editor.swagger.io/上您可以粘贴一些json/yaml。我正在将此作为JSON进行测试(不要转换为YAML):{"swagger":"2.0","info":{"version":"1.0","title":"OurfirstgeneratedRES......
  • 使用 Matplotlib 的 Python 代码中出现意外的控制流
    Ubuntu22.04上的此Python3.12代码的行为符合预期,除非我按q或ESC键退出。代码如下:importnumpyasnp,matplotlib.pyplotaspltfrompathlibimportPathfromcollectionsimportnamedtuplefromskimage.ioimportimreadfrommatplotlib.widgets......
  • 参考 - Python 类型提示
    这是什么?这是与在Python中使用类型提示主题相关的问题和答案的集合。这个问题本身就是一个社区维基;欢迎大家参与维护。这是为什么?Python类型提示是一个不断增长的话题,因此许多(可能的)新问题已经被提出,其中许多甚至已经有了答案。该集合有助于查找现有内容。范......
  • 我的 Python 程序中解决 UVa 860 的运行时错误 - 熵文本分析器
    我正在尝试为UVa860编写一个解决方案,但是当我通过vJudge发送它时,它一直显示“运行时错误”。fromsysimportstdinimportmathdefmain():end_of_input=Falselambda_words=0dictionary={}text_entropy=0relative_entropy=0whilenotend_of_in......