Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Защита Elastic Stack ›Настройка безопасности Elastic Stack

Шифрование коммуникаций в контейнере Elasticsearch Docker

За исключением использования пробной лицензии, функции безопасности Elastic Stack требуют шифрования SSL/TLS для транспортного сетевого уровня.

Этот раздел демонстрирует простой способ начать работу с SSL/TLS для HTTPS и транспорта с использованием образа Elasticsearch Docker. Пример использует Docker Compose для управления контейнерами.

Для получения более подробной информации см. Настройка безопасности и доступные подписки.

Подготовьте среду

Установите Elasticsearch с Docker.

В новой пустой директории создайте следующие четыре файла:

instances.yml:

instances:
  - name: es01
    dns:
      - es01 
      - localhost
    ip:
      - 127.0.0.1

  - name: es02
    dns:
      - es02
      - localhost
    ip:
      - 127.0.0.1

Разрешить использование встроенных имён серверов Docker DNS.

.env:

COMPOSE_PROJECT_NAME=es 
CERTS_DIR=/usr/share/elasticsearch/config/certificates 
ELASTIC_PASSWORD=PleaseChangeMe 

Использовать префикс es_ для всех объёмов и сетей, созданных docker-compose.

Путь внутри образа Docker, где ожидается нахождение сертификатов.

Начальный пароль для пользователя elastic.

create-certs.yml:

version: '2.2'

services:
  create_certs:
    container_name: create_certs
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
    command: >
      bash -c '
        if [[ ! -f /certs/bundle.zip ]]; then
          bin/elasticsearch-certutil cert --silent --pem --in config/certificates/instances.yml -out /certs/bundle.zip;
          unzip /certs/bundle.zip -d /certs; 
        fi;
        chown -R 1000:0 /certs
      '
    user: "0"
    working_dir: /usr/share/elasticsearch
    volumes: ['certs:/certs', '.:/usr/share/elasticsearch/config/certificates']

volumes: {"certs"}

Новые сертификаты узла и сертификат+ключ CA размещаются в docker объеме es_certs.

docker-compose.yml:

version: '2.2'

services:
  es01:
    container_name: es01
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
    environment:
      - node.name=es01
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02
      - ELASTIC_PASSWORD=$ELASTIC_PASSWORD 
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.license.self_generated.type=trial 
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=$CERTS_DIR/es01/es01.key
      - xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.security.http.ssl.certificate=$CERTS_DIR/es01/es01.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate 
      - xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.security.transport.ssl.certificate=$CERTS_DIR/es01/es01.crt
      - xpack.security.transport.ssl.key=$CERTS_DIR/es01/es01.key
    volumes: ['data01:/usr/share/elasticsearch/data', 'certs:$CERTS_DIR']
    ports:
      - 9200:9200
    healthcheck:
      test: curl --cacert $CERTS_DIR/ca/ca.crt -s https://localhost:9200 >/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi
      interval: 30s
      timeout: 10s
      retries: 5

  es02:
    container_name: es02
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02
      - ELASTIC_PASSWORD=$ELASTIC_PASSWORD
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.license.self_generated.type=trial
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=$CERTS_DIR/es02/es02.key
      - xpack.security.http.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.security.http.ssl.certificate=$CERTS_DIR/es02/es02.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate 
      - xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt
      - xpack.security.transport.ssl.certificate=$CERTS_DIR/es02/es02.crt
      - xpack.security.transport.ssl.key=$CERTS_DIR/es02/es02.key
    volumes: ['data02:/usr/share/elasticsearch/data', 'certs:$CERTS_DIR']

  wait_until_ready:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
    command: /usr/bin/true
    depends_on: {"es01": {"condition": "service_healthy"}}

volumes: {"data01", "data02", "certs"}

Запустить начальный elastic с паролем, определённым в .env. См. Пароль Elastic для первоначальной настройки.

Автоматически сгенерировать и применить пробную подписку для активации функций безопасности.

Отключить проверку подлинности для межузловой коммуникации. Разрешает создание самоподписанных сертификатов без необходимости привязки конкретных внутренних IP-адресов.

Запустите пример

  1. Сгенерируйте сертификаты (необходимо только один раз):

    docker-compose -f create-certs.yml run --rm create_certs
  2. Запустите два узла Elasticsearch, настроенные для SSL/TLS:

    docker-compose up -d
  3. Доступ к API Elasticsearch по SSL/TLS с использованием пароля первоначальной настройки:

    docker run --rm -v es_certs:/certs --network=es_default docker.elastic.co/elasticsearch/elasticsearch:7.17.28 curl --cacert /certs/ca/ca.crt -u elastic:PleaseChangeMe https://es01:9200
  4. Инструмент elasticsearch-setup-passwords также может использоваться для генерации случайных паролей для всех пользователей:

    Пользователям Windows, не использующим PowerShell, необходимо удалить \ и объединить строки в приведённом ниже фрагменте.

    docker exec es01 /bin/bash -c "bin/elasticsearch-setup-passwords \
    auto --batch \
    --url https://localhost:9200"

Удалить всё

Для удаления всех Docker ресурсов, созданных примером, используйте:

docker-compose down -v

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/configuring-tls-docker.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API