easy way to make an elasticsearch server read-only

前端 未结 7 2035
日久生厌
日久生厌 2021-02-02 13:03

It\'s really easy to just upload a bunch of json data to an elasticsearch server to have a basic query api, with lots of options

I\'d just like to know if there\'s and e

相关标签:
7条回答
  • 2021-02-02 13:33

    If you want to expose the Elasticsearch API as read-only, I think the best way is to put Nginx in front of it, and deny all requests except GET. An example configuration looks like this:

    # Run me with:
    #
    #     $ nginx -c path/to/this/file
    #
    # All requests except GET are denied.
    
    worker_processes  1;
    pid               nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
    
      server {
    
        listen       8080;
        server_name  search.example.com;
    
        error_log   elasticsearch-errors.log;
        access_log  elasticsearch.log;
    
        location / {
          if ($request_method !~ "GET") {
            return 403;
            break;
          }
    
          proxy_pass http://localhost:9200;
          proxy_redirect off;
    
          proxy_set_header  X-Real-IP  $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header  Host $http_host;
        }
    
      }
    
    }
    

    Then:

    curl -i -X GET http://localhost:8080/_search -d '{"query":{"match_all":{}}}'
    HTTP/1.1 200 OK
    
    curl -i -X POST http://localhost:8080/test/test/1 -d '{"foo":"bar"}'
    HTTP/1.1 403 Forbidden
    
    curl -i -X DELETE http://localhost:8080/test/
    HTTP/1.1 403 Forbidden
    

    Note, that a malicious user could still mess up your server, for instance sending incorrect script payloads, which would make Elasticsearch get stuck, but for most purposes, this approach would be fine.

    If you would need more control about the proxying, you can either use more complex Nginx configuration, or write a dedicated proxy eg. in Ruby or Node.js.

    See this example for a more complex Ruby-based proxy.

    0 讨论(0)
提交回复
热议问题