LogstashからElastic cloudに接続時に407エラー発生

LogstashからElastic cloudに対してファイル転送を実施しようとしたところ、407エラーが発生しています。

【エラーメッセージ】
Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"https://elastic:xxxxxx@XXXXX.ap-northeast-1.aws.found.io:9243/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '407' contacting Elasticsearch at URL 'https://XXXXX.ap-northeast-1.aws.found.io:9243/'"}

【パイプラインファイル内容】
input {
file{
path => "/tmp/test.log"
start_position => "beginning"
}
}
output{
elasticsearch{
hosts => [ "https://XXXXX.ap-northeast-1.aws.found.io:9243" ]
user => "elastic"
password => "XXXXX"
index => "cloud_test"
proxy => "http://XXXXX@XXXXX.com:8080"
}
}

proxyを設定しているのにも関わらず、407エラーになる原因が分からずにおります。
curlコマンドにて、対象のURLにはアクセス出来ることは確認できております。

原因について考えられることをご教示頂けないでしょうか

1つ確認したいのですが、curlで疎通確認できているのは、proxyを経由(--proxyオプションあたりを指定)してですよね?

407はプロキシサーバを使うのに権限がないということだと思うので、プロキシを指定している部分の設定があっているかどうかを確認いただくのが良いのではないかと思います。

可能であれば、プロキシを経由せずにElastic Cloudに直接リクエストを投げられる環境で、proxyの設定を外して動作確認いただくと、どこに問題があるのか切り分けができるのではないでしょうか。

ご回答ありがとうございます。curlでの確認時は、/etc/profieに環境変数HTTP_PROXY、HTTPS_PROXYを指定して疎通確認しています。環境変数に指定した値と、パイプラインのproxyに設定している値は同一のものとしております

こちらで試した限りですと、認証つきのプロキシ経由でもElastic Cloudあてにデータを送信できました。

環境情報は以下の通りです。

  • Elastic Cloud (7.4.0)
  • Logstash 7.4.0
  • Squid 3.5.27

LogstashのOutputの中身は以下のようになっています。(一部マスクしてます)

output {
    stdout {}
    elasticsearch{
        hosts => ["https://******.eastus2.azure.elastic-cloud.com:9243"]
        index => "cloud_test"
        user => "elastic"
        password => "fukuzatsunapassword"
        
        proxy => "http://forum1021:forum1021@localhost:3333"
     }
}

forum1021というユーザを作成し、パスワードもforum1021として指定しています。

このときのSquid側のアクセスログは以下のようになっています。

1571633668.168      0 127.0.0.1 TCP_DENIED/407 4355 POST http://*****.eastasia.cloudapp.azure.com:9200/_bulk - HIER_NONE/- text/html
1571633668.275    103 127.0.0.1 TCP_MISS/200 632 POST http://*****.eastasia.cloudapp.azure.com:9200/_bulk forum1021 HIER_DIRECT/xxx.xxx.xxx.xxx application/json

まずユーザ、パスワードなしでアクセスしようとして、TCP_DENIED(HTTP STATUS 407)となり、そのあとに指定したユーザ(forum1021)でPOSTして、200番が返されていることが分かります。

これらのことから、logstashのoutput/elasticsearchで、認証つきプロキシの指定はできるのではないかと思います。

proxy のところで指定されている文字列が正しいかどうか、今一度確認いただくのはどうでしょうか?

http://<ユーザ名>:<パスワード>@<ホスト名>:<ポート番号>

また、あわせてプロキシ側のログを見ることができれば、そちらもあわせて確認するのも良いと思います。

ご参考になれば幸いです。

ご回答ありがとうございます。

proxy のところで指定されている文字列なのですが、proxyのユーザ名に@を含む環境となっております。普通に「@」で記載するとパイプラインのフォーマットエラーとなってしまうため、%40と記載してエスケープしているのですが、この「@」の部分がうまく認識されてないのではと考えております。
ユーザ名で「@」を使用したい場合、どのように記載すれば良いのでしょうか?

設定内容(一部マスクしております):
proxy => "http://XXXXX%40jp.XXX.com:XXXXXX@XXXXX.com:8080"

試しにユーザ名を test@abc.com としてproxyに指定した場合、プロキシサーバ側のログには以下のようにでました。

1571639179.557      0 127.0.0.1 TCP_DENIED/407 450 HEAD http://*****.eastasia.cloudapp.azure.com:9200/ test%2540abc.com HIER_NONE/- text/html

@を%40でエスケープした後の、%記号をさらにエスケープしようとして %2540 となっているように見えますね。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.