You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku Django应用对接AWS OpenSearch遇匿名用户未授权问题求助

解决Heroku应用访问AWS OpenSearch的403权限问题

问题根源

新创建的OpenSearch域默认资源策略是拒绝所有访问,而且AWS现在强制要求访问策略必须具备限制性,不允许直接设置完全开放的Allow策略,这就是你修改时提示“Apply a restrictive access policy”的原因。

可行配置方案

方案1:通过Heroku出站IP范围限制访问

如果你的应用需要公开访问OpenSearch,可以只允许Heroku的出站IP段访问,这样既符合AWS的限制性要求,又能让Heroku应用正常连接:

修改后的访问策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:000000000000:domain/my-domain/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "50.19.0.0/16",
            "54.235.0.0/16",
            // 补充你Heroku应用部署区域的所有出站IP范围
          ]
        }
      }
    }
  ]
}

注意:Heroku的出站IP范围会定期更新,要获取对应部署区域的最新IP列表。

方案2:用IAM用户签名请求(更安全)

这种方式不需要依赖IP,通过IAM凭证签名请求来授权:

  1. 在AWS IAM控制台创建一个新用户,给它绑定以下权限策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:000000000000:domain/my-domain/*"
    }
  ]
}
  1. 生成该用户的Access Key和Secret Key,添加到Heroku应用的环境变量中。
  2. 修改OpenSearch的资源策略,允许这个IAM用户访问:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::000000000000:user/your-heroku-iam-user"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:000000000000:domain/my-domain/*"
    }
  ]
}
  1. 在Heroku应用代码中,用requests-aws4auth这类库对OpenSearch的HTTP请求进行签名,确保每个请求都携带合法的IAM签名。

方案3:VPC对等连接(适合私有网络场景)

如果你的Heroku用了Private Spaces,可以配置AWS VPC和Heroku Private Space的VPC peering,把OpenSearch域部署在AWS VPC内,然后在访问策略中允许VPC内的IP段访问,这样就能通过私有网络安全连接。

内容的提问来源于stack exchange,提问作者apiljic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:23