amazon-web-services - 認証 - elasticsearch アクセスポリシー




Amazon Elastic Search Clusterの適切なアクセスポリシー (4)

AWSのドキュメントによると、あなた(と私)がテストしたばかりのように、AWS ESドメインへのアクセスをrole / account / user / ...に制限することはできません。

curlなどの標準クライアントは、IDベースのアクセスポリシーに必要な要求署名を実行できません。 このステップの手順を正常に実行するには、匿名アクセスを許可するIPアドレスベースのアクセスポリシーを使用する必要があります。 ( http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html

したがって、基本的に2つのソリューションがあります。

アクセスポリシーをそのまま維持する場合(IPに制限するよりも柔軟性が高い場合)は、おそらくリクエストに署名することが最善のソリューションですが、もう少し複雑に思えます。 私は今まで試したことがないので、役立つドキュメントが見つかりません。

最近、新しいAmazon Elasticsearch Serviceの使用を開始しましたが、特定のIAMロールが割り当てられたEC2インスタンスからのみサービスにアクセスできるように、必要なアクセスポリシーがわからないようです。

ESドメインに現在割り当てているアクセスポリシーの例を次に示します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::[ACCOUNT_ID]:role/my_es_role",
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*"
    }
  ]
}

しかし私が言ったように、これは機能しません。 EC2インスタンス( my_es_role ロールがアタッチされている)にログインし、「https://*.es.amazonaws.com」エンドポイントで簡単なcurl呼び出しを実行しようとすると、次のエラーが表示されます。

{「メッセージ」:「ユーザー:匿名は実行する権限がありません:リソースのes:ESHttpGet:arn:aws:es:us-east-1:[ACCOUNT_ID]:domain / [ES_DOMAIN] /“}

これが機能するために、アクセスポリシーで何を変更する必要があるか、誰にもわかりますか?


IAMのみにアクセスをロックダウンできますが、ブラウザでKibanaをどのように表示しますか? プロキシを設定する か( Gist および/または NPMモジュールを 参照)、結果を表示するためにIAMとIPベースの両方のアクセスを有効にすることができ ます

次のアクセスポリシーを使用して、両方のIAMアクセスIP制限付きアクセスを取得できました。 順序が重要であることに注意してください。IAMステートメントの前にIPベースのステートメントで動作させることができませんでした。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.168.1.0",
            "192.168.1.1"
          ]
        }
      }
    }
  ]
}

私のEC2インスタンスには、 arn:aws:iam::aws:policy/AmazonESFullAccess ポリシーを持つインスタンスプロファイルがあります。 Logstashは、 logstash-output-amazon-es出力プラグイン を使用してリクエストに署名する必要があり ます 。 EC2インスタンスで実行されているLogstashには、次のような出力セクションが含まれています。

output {
    amazon_es {
        hosts => ["ELASTICSEARCH_HOST"]
        region => "AWS_REGION"
    }
    # If you need to do some testing & debugging, uncomment this line:
    # stdout { codec => rubydebug }
}

アクセスポリシーの2つのIP(192.168.1.0および192.168.1.1)からKibanaにアクセスできます。



私もこれをやろうとしていますが、EC2インスタンスのElastic IPで Allow access to the domain from specific IP(s) オプションを使用して動作させました(インスタンスのプライベートIPを使用しても動作しますが、私はわからない)





amazon-elasticsearch