从 API Gateway HTTP 端点到 AWS Elasticsearch 域的响应错误

问题描述

我在 API 网关中有一个带有 HTTP 请求集成的 post 端点。它不是代理端点。它指向的 URL 是我的 AWS ElasticSearch 域的搜索 URL。我正在获取 post 请求的正文并将其映射到模板以查询 ES 域。

现在我收到了来自 ES 的回复{"Message":"User: anonymous is not authorized to perform: es:ESHttpPost"}

我没有在 ES 域上启用细粒度访问控制,而且它不在 VPC 中。我的 JSON 访问策略如下所示:

  "Version": "2012-10-17","Statement": [
    {
      "Effect": "Allow","Principal": {
        "AWS": "*"
      },"Action": "es:ESHttP*","Resource": "arn:aws:es:xx-xxxx-x:999999999999:domain/XXXXX/*","Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "X.X.X.X/X","X.X.X.X/X"
          ]
        }
      }
    }
  ]
}

使用此策略,我可以直接联系并查询域,并在允许列表中的 IP 上导航到 Kibana 仪表板。但是,我假设来自我的网关端点的查询请求具有不同的 IP 地址,因为这是我获得上述 403 响应的地方。

我知道我可以在 x-forwarded-for 标头的请求中找到原始 IP 地址,但我认为我无法将其添加为 ES 访问策略的条件,我已经尝试过还有一些其他策略条件,例如用于原则 ARN 的 StringLike 和查找方法请求 ARN,但这些都不起作用。 理想情况下,我希望能够使用实际来源而不是网关的 IP 地址覆盖 sourceIP,但我不知道这是否可行。我也知道我可以在这里只使用一个 lambda 函数,但我想避免在这里需要一个函数,以避免需要维护代码/其他服务。

基本上,当请求来自某些 IP 时,我希望仍然能够允许匿名用户访问,但我想使用几个网关端点创建和抽象某些常用查询。有什么方法可以将 API 端点添加到允许列表中,还是必须启用细粒度的访问控制?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...