AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

カテゴリー: Amazon Elasticsearch Service

AWS ElasticSearch Service の認証にIAM Roleを使う [aws-auth-proxy編]


下記の記事の続編です。

PHP編とPython編を書いたのですが、いろんな言語で開発していると、言語毎に流儀が違って、つらいです。
なので、AWS の認証情報を付与してくれるだけの簡単なProxyないかと思って調べたらありました。

coreos/aws-auth-proxy: HTTP proxy that signs requests for upstream AWS endpoints

こんな感じで、ローカルホストでProxyを立てておくと、localhost:9200 にアクセスするだけで、AWSのElasticSearchに接続できます。

Kibanaとかを使おうと思うと、どうしてもIPアドレスを開けないといけないと思うのですが、aws-auth-proxyを使えば、IP開けなくても大丈夫です。
まだ2週間くらい前にできたレポジトリのようですが、coreos が開発してるってのがなんとなく安心なのと、go なので 1バイナリを配布すれば使えるので、便利そうです。

似たようなものに、Nginxモジュールの AWS 認証 プロキシもありました。
anomalizer/ngx_aws_auth – C

S3のProxyとして使う例しか書いてなかったので、ElasticSearchでも使えるかは分かりません。


AWS ElasticSearch Service の認証にIAM Roleを使う [Python編]


AWS ElasticSearch Service の認証にIAM Roleを使う [PHP編] の続き、
Python編です。

Python でどうするのか、検索してみたところ、github の elasticsearch-py のライブラリレポジトリにて mathom がAWS の認証機能を追加するパッチつくったよー的な議論があって、最終的にマージされたようです。
なので、普通に elasticsearch-py でちょっと設定すれば使えるようです。

AWS ElasticSearch service · Issue #280 · elastic/elasticsearch-py

elasticsearch-py は、ElasticSearchのOfficial low-level clientとのことです。
今見ると、elasticsearch-py のドキュメントに、こんな感じで使えるよって書いてありました。

Python Elasticsearch Client — Elasticsearch 2.2.0 documentation

変更点も少なくて、ライブラリもそのまま使えていいですね。


AWS ElasticSearch Service の認証にIAM Roleを使う [PHP編]


こんにちは、井上です。

AWS ElasticSearch Serviceを使ってみました。
ElasticSearchはVPC外に置かれるとのことで、アクセス管理はどうするんだろうと思っていたら、AccessPolicyにて何かしら制限しないといけないようです。(VPC内に置いて欲しいなぁ…)

制限方法としては、

  • IPアドレスによる制限
  • アカウントIDによる制限
  • IAM Roleによる制限

などができるようです。

試しに、IAM Roleで制限をかけたEndpointにcurlでアクセスするとエラーがでることは確認できました。

ではどうやって認証を通るようにするかを探していてたどり着いたページ、
Amazon Elasticsearch ServiceのIAM Roleによるアクセス制御 | Developers.IO を見ると、

と、書かれていてメンドクサそうだな、と思ったのですが、下記にライブラリと共存させるやり方が書いてありました。

Signing an Amazon Elasticsearch Service Search Request — AWS SDK for PHP documentation

ElasticsearchのClientBuilderのHandler を定義することで、リクエスト署名を挿入してリクエストを送ることが出来るようです。

これを es_aws_test.php というファイル名で保存します。

inoue_test というインデックスが作られていることが確認できました。
この一連の手続きは結構長いので、この部分は Clientを生成する共通処理として作っておくとよさそうです。

あと、Node.js で Lambdaから ElasticSearch を更新するサンプルが awslabs に上がっていました。

amazon-elasticsearch-lambda-samples/s3_lambda_es.js at master · awslabs/amazon-elasticsearch-lambda-samples

実際に社内でも、Lambda からElasticSearchを更新する処理は稼働中とのことでした。早い!

Lambdaと同様に、ElasticSearch もVPC対応、期待しています。

[2016/01/28 追記]
アイキャッチ画像がクラスメソッドさん作成の画像との指摘を受け変更いたしました。ご迷惑をおかけしました。