4

node.js で AWS ES インスタンスに接続し、簡単なリクエストで ES クラスターをヒットする方法の例を見つけようとしています。

これを行うには、 http-aws-esというオープン ソース アドオンと共に、 elasticsearch ノード パッケージを使用しようとしています。

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>"
        }
      }
    }
  ]
} 

そのため、ip アドレスまたは aws アカウントにリンクされた IAM ユーザーから、es インスタンスで put および get リクエストを発行できるようにしたいと考えています。

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 で署名済みポリシーを使用して aws ES インスタンスを使用する実際の例をまだ見ていません。誰にも洞察がありますか?

4

1 に答える 1

2

私の質問では、1 つのステップを除いて、ほとんどすべてのことを正しく行っていたことがわかりました。

aws_access_key上記のコードでおよびに関連付けられている IAM ユーザーにaws_secret_keyは、エラスティック検索インスタンスと対話するための特定のアクセス許可が必要です。そこで、AWS コンソールにログインし、elasticsearch インスタンスと対話する必要がある IAM ユーザーに次のポリシーを追加しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1480915344000",
            "Effect": "Allow",
            "Action": [
                "es:*"
            ],
            "Resource": [
                "arn:aws:es:us-east-1:<account-id>:domain/*"
            ]
        }
    ]
}
于 2016-12-05T05:39:46.223 に答える