用户:无权执行匿名:ES:ESHTTPPPOST在资源上:



我在应用程序中遇到了这个问题。我的应用程序已部署到Heroku服务器,我正在使用AWS上部署的Elasticsearch。当我尝试本地访问Elasticsearch(在AWS域上)时,每项工作。但是,当我尝试访问我的Heroku域(均来自Postman)时,我会在此消息中获得503错误:

2017-12-21T13:36:52.982331+00:00 app[web.1]:   statusCode: 403,
2017-12-21T13:36:52.982332+00:00 app[web.1]:   response: '{"Message":"User: anonymous is not authorized to perform: es:ESHttpPost on resource: houngrymonkey"}',

我的访问策略是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:eu-central-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "[heroku static ip]"
        }
      }
    }
  ]
}

谁能告诉我我的问题是什么?谢谢!

我遇到了ES和Lambda的同样问题,这不是您的情况,但也许会有所帮助。

1)在lambda(Node.js v6.10)中,我添加了以下代码:

var creds = new AWS.EnvironmentCredentials('AWS');
....
// inside "post to ES"-method
var signer = new AWS.Signers.V4(req, 'es');
signer.addAuthorization(creds, new Date());
....
// post request to ES goes here

用这些行,我的例外从 "User: anonymous...""User: arn:aws:sts::xxxx:assumed-role/yyyy/zzzzz"

就是这种情况。

2)我已经以以下方式更新了ES策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::xxxx:assumed-role/yyyy/zzzzz" (which was in exception)
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:[region]:[account-id]:domain/[es-domain]/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:[region]:[account-id]:domain/[es-domain]/*"
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "1.2.3.4/32",
            ....
          ]
        }
      }
    }
  ]
}

希望会有所帮助。

标题中提到的错误的更多解决方案在这里描述:

如果您使用的是不支持请求签名的客户端(例如浏览器),请考虑以下内容:

  1. 使用基于IP的访问策略。基于IP的策略允许对Amazon ES域的未签名请求。
  2. 确保在访问策略中指定的IP地址使用CIDR表示法。访问策略使用访问策略检查IP地址时使用CIDR符号。
  3. 验证访问策略中指定的IP地址是否与访问您的Elasticsearch群集相同。您可以在https://checkip.amazonaws.com/。
  4. 上获取本地计算机的公共IP地址。

注意:如果您收到授权错误,请检查您是否正在使用公共或专用IP地址。基于IP的访问策略不能应用于位于虚拟私有云(VPC)中的Amazon ES域。这是因为安全组已经实施了基于IP的访问策略。对于公共访问,基于IP的策略仍然可用。有关更多信息,请参见有关VPC域中的访问策略。

如果您使用的是支持请求签名的客户端,请检查以下内容:

  1. 请确保您的请求已正确签名。AWS使用签名版本4签名过程将身份验证信息添加到AWS请求中。与签名版本4不兼容的客户的请求被A用户拒绝:匿名未经授权。错误。有关向亚马逊ES的正确签名请求的示例,请参阅制作和签署Amazon ES请求。

  2. 验证在访问策略中指定了正确的亚马逊资源名称(ARN)。

如果您的Amazon ES域位于VPC中,请使用或不使用代理服务器配置开放访问策略。然后,使用安全组控制访问。有关更多信息,请参阅有关VPC域中的访问策略。

相关内容

  • 没有找到相关文章