Как настроить «эластичный» пароль пользователя по умолчанию при запуске официального образа докера Elasticsearch?

Я хочу использовать официальный образ докера Elasticsearch через < strong>docker-compose.yml, как следует из официальной документации:

Мой упрощенный docker-compose.yml выглядит следующим образом:

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - 9200:9200

По умолчанию после запуска docker-compose up у меня создается пользователь elastic с паролем по умолчанию changeme. Согласно документации, я могу изменить пароль пользователя по телефону:

curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type: application/json" -d '{
  "password" : "elasticpassword"
}'

Но для этого потребуется дополнительный шаг при запуске образа Docker.

Есть ли способ настроить пароль пользователя elastic по умолчанию во время выполнения команды docker-compose up? Может через переменные среды как-то или через elasticsearch.yml конфигурационный файл?

Я мог бы создать свой собственный образ в качестве оболочки поверх изображения docker.elastic.co/elasticsearch/elasticsearch:5.5.2 и команды RUN curl ... как часть связанного файла Docker, но мне кажется, что создание моей собственной версии образа Elasticsearch только для настройки пароля пользователя elastic кажется накладным.


person Oleksii Trekhleb    schedule 21.08.2017    source источник
comment
Если вы просто используете изображение: docker.elastic.co/elasticsearch/elasticsearch:5.5.2, защита имени пользователя/пароля не будет работать. Вам понадобится образ докера с X-pack/Shield, установленным в качестве плагина, который можно сделать с помощью файла докера. Однако обратите внимание, что если вы не добавите лицензионный ключ в плагин X-Pack, он не запустится. Если вы используете какой-либо веб-сервер, такой как nginx или Traefik, их можно расширить для использования базовой аутентификации. Может ли это быть лучшим вариантом?   -  person Abhishek Galoda    schedule 21.08.2017


Ответы (1)


Решение, которое сработало для меня, состояло в том, чтобы поместить прокси-контейнер nginx с базовой аутентификацией перед контейнером elasticsearch. Конфигурация Nginx может выглядеть примерно так:

upstream elasticsearch {
    server elasticsearch:9200;
}

server {
    listen 80;
    server_name server.name.com;

    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

    location / {
        proxy_pass http://elasticsearch;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
    }
}

Где .htpasswd содержит имя пользователя и зашифрованный пароль пользователя (вы можете использовать даже онлайн-сервисы для его создания, например http://www.htaccesstools.com/htpasswd-generator/).

Помимо этого, вы можете просто купить лицензию для X-pack/Shield и используйте его вместо этого, если хотите.

person Oleksii Trekhleb    schedule 05.10.2017