3

我在查找如何连接到node.js中的AWS ES实例的示例,然后使用简单的请求点击ES集群。从node.js创建对AWS ES实例的有效签名请求

我正在尝试使用elasticsearch node package以及一个名为http-aws-es的开源插件来执行此操作。

我已经配置我的AWS ES访问策略如下所示:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::<account-id>:root" 
     }, 
     "Action": "es:*", 
     "Resource": "example-domain.us-east-1.es.amazonaws.com:<account-id>:domain/*" 
    }, 
    { 
     "Sid": "", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "es:*", 
     "Resource": "example-domain.us-east-1.es.amazonaws.com:<account-id>:domain/*", 
     "Condition": { 
     "IpAddress": { 
      "aws:SourceIp": "<my-ip>" 
     } 
     } 
    } 
    ] 
} 

所以,我想能够发出PUT和从任何一个IP地址,或从坐上ES实例请求IAM用户链接到我的aws帐户。

我有下面的代码,试图在这Node.js的:

var aws_access_key = 'example'; 
var aws_secret_key = 'key'; 

var es = require('elasticsearch').Client({ 
    hosts: 'example-domain.us-east-1.es.amazonaws.com', 
    connectionClass: require('http-aws-es'), 
    amazonES: { 
     region: 'us-east-1', 
     accessKey: aws_access_key, 
     secretKey: aws_secret_key 
    } 
}); 

es.ping({ 
    // ping usually has a 3000ms timeout 
    requestTimeout: Infinity, 

    // undocumented params are appended to the query string 
    hello: "elasticsearch!" 
}, function (error) { 
    if (error) { 
     console.log(error); 
     console.trace('elasticsearch cluster is down!'); 
    } else { 
     console.log('All is well'); 
    } 
}); 

目前返回授权错误:

{ [Error: Authorization Exception] 
    status: 403, 
    displayName: 'AuthorizationException', 
    message: 'Authorization Exception' } 

我还没有看到使用的工作示例通过在node.js中使用已签署的策略来实现ES实例。任何人都有见解?

回答

1

事实证明,我已经在我的问题中完成了几乎所有的事情,除了一步之外。

与上述代码中的aws_access_keyaws_secret_key相关联的IAM用户必须具有与弹性搜索实例交互的特定权限。因此,我登录到AWS控制台并将以下策略添加到需要与elasticsearch实例交互的IAM用户:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1480915344000", 
      "Effect": "Allow", 
      "Action": [ 
       "es:*" 
      ], 
      "Resource": [ 
       "arn:aws:es:us-east-1:<account-id>:domain/*" 
      ] 
     } 
    ] 
} 
相关问题