share facebook facebook2 twitter menu hatena pocket slack

2016.09.26 MON

Amazon ES へのアクセスを IAM role と IP アドレスで制御する試行錯誤

川原 洋平

WRITTEN BY 川原 洋平

tl;dr

Amazon Elasticsearch Service で Kibana にアクセスポリシーを設定する方法ってある? - kakakakakku blog
Amazon Elasticsearch Service に含まれてる Kibana に対して IP ベースのアクセスポリシーを設定したいと思って検証していたが,うまくできなかった.うまくできなかったけど,試したことを残しておこうと思う.もしかしたら僕の調査不足なだけかもしれないので,も...
kakakakakku.hatenablog.com

こちらのブログを読ませて頂いて、Amazon ES のアクセスポリシーで IAM Role と IP アドレスの同居ってどうやるんだろうと疑問に思っていたので試行錯誤してみました。
自分の要件としては以下の通り。

  • Amazon ES へのアクセスは EC2 からは IAM role で制御したい
  • Amazon ES の Kibana プラグインへのアクセスは IP アドレスで制御したい(許可された IP からは Elasticsearch への操作も許可されてしまうけど)

尚、上記のブログでは Kibana プラグインへのアクセスを IP アドレスで許可しつつ、Elasicsearch への操作は抑制したいという要件だと思います。確かに、ニーズがありそうだけど、どのように実現するのか悩ましい限り。

memo

イメージ

20160910150229

  • EC2 に付与する EC2 という IAM role にはポリシーには下図の通り何も付与していない

20160910151435

  • Kibana へのアクセスは xxx.xxx.xxx.xxx という IP アドレスからのみアクセスさせる

アクセスポリシー

以下のようなアクセスポリシーを Amazon ES に付与する。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/EC2"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-northeast-1:123456789012:domain/oreno-es/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:ap-northeast-1:123456789012:domain/oreno-es/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "xxx.xxx.xxx.xxx"
        }
      }
    }
  ]
}

動作確認

  • Kibana にアクセスすると…

20160910142419

  • curl で試すと…
$ curl -s https://search-oreno-es-xxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com | jq .
{
  "Message": "User: anonymous is not authorized to perform: es:ESHttpGet on resource: oreno-es"
}

curl だとリクエストに AWS の認証を付与することが出来ないので、上記のように Elasticsearch にはアクセス出来ない。

動作確認(2)

  • リクエストに認証情報を加えて上げる必要があるので python で実装
    これは、以下の記事を参考に…

Amazon ES へのアクセスを IAM role と IP アドレスで制御する試行錯誤 - ようへいの日々精進XP
tl;dr kakakakakku.hatenablog.com こちらのブログを読ませて頂いて、Amazon ES のアクセスポリシーで IAM Role と IP アドレスの同居ってどうやるんだろうと疑問に思っていたので試行錯誤してみました。 自分の要件としては以下の通り。 Amazon ES へのアクセスは E...

kakakakakku.hatenablog.com

  • 確認
$ python test.py | jq .
{
  "cluster_name": "123456789012:oreno-es",
  "tagline": "You Know, for Search",
  "version": {
    "lucene_version": "5.5.0",
    "build_hash": "0944b4bae2d0f7a126e92b6133caf1651ae316cc",
    "number": "2.3.2",
    "build_timestamp": "2016-05-20T07:46:04Z",
    "build_snapshot": false
  },
  "name": "Shotgun"
}

以上

疑問

  • I AM role だけ付与しておけば良い?(AmazonESFullAccess あたりのポリシーは付与しなくても問題無い?)

要望

  • Amazon ES のアクセスポリシーを変更して反映するまでの時間が長い(体感で 10 分〜 15 分)…ので改善して頂きたいです
  • AWS CLI の iam list-role-policies ってマネージドポリシーはリストアップされないのですな

元記事はこちら

Amazon ES へのアクセスを IAM role と IP アドレスで制御する試行錯誤