-
-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat: Added local es-node-docker for developing
- Loading branch information
Showing
4 changed files
with
238 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,6 @@ | |
.pytest_cache/ | ||
cov.xml | ||
dist/ | ||
docs/_build | ||
docs/_build | ||
.env | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# DevTools Readme | ||
|
||
For now you can find a docker compose environment to start your own | ||
local Elasticsearch Node which can be used by the backend pytests | ||
to check the code against a real ES Instance. | ||
|
||
## Foreword | ||
|
||
1. Don't use this ES Node for production data! | ||
* It isn't very hardened, using simple passwords, etc. | ||
2. It depends a installed docker and the docker compose plugin | ||
* I guess you'll make it! | ||
|
||
## Startup | ||
|
||
Just open a new terminal and run `docker compose up` or `docker compose up -d` (detached). | ||
|
||
```bash | ||
cd devtools | ||
mv dot_env .env | ||
docker compose up -d | ||
cd .. | ||
``` | ||
|
||
## Run tests against this node | ||
|
||
```bash | ||
$ pytest tests/test_backend_elasticsearch_*_connect.py | ||
|
||
================================================ test session starts ================================================ | ||
platform linux -- Python 3.10.12, pytest-7.4.4, pluggy-1.5.0 -- /home/dev/.local/share/virtualenvs/pysigma-backend-elasticsearch-qlQ8rDO_-py3.10/bin/python | ||
cachedir: .pytest_cache | ||
rootdir: /home/dev/pySigma-backend-elasticsearch | ||
configfile: pyproject.toml | ||
plugins: cov-4.1.0 | ||
collected 35 items | ||
|
||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_and_expression PASSED [ 2%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_and_expression_empty_string PASSED [ 5%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_or_expression PASSED [ 8%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_and_or_expression PASSED [ 11%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_or_and_expression PASSED [ 14%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_in_expression PASSED [ 17%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_in_expression_empty_string PASSED [ 20%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_regex_query PASSED [ 22%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_cidr_query PASSED [ 25%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_ip_query PASSED [ 28%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_field_name_with_whitespace PASSED [ 31%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_dot_value PASSED [ 34%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_space_value_text PASSED [ 37%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_space_value_keyword PASSED [ 40%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_angle_brackets PASSED [ 42%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_angle_brackets_single PASSED [ 45%] | ||
tests/test_backend_elasticsearch_eql_connect.py::TestConnectElasticsearch::test_connect_eql_windash_double PASSED [ 48%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_and_expression PASSED [ 51%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_and_expression_empty_string PASSED [ 54%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_or_expression PASSED [ 57%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_and_or_expression PASSED [ 60%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_or_and_expression PASSED [ 62%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_in_expression PASSED [ 65%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_in_expression_empty_string PASSED [ 68%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_regex_query PASSED [ 71%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_cidr_v4_query PASSED [ 74%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_cidr_v6_query PASSED [ 77%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_ip_query PASSED [ 80%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_field_name_with_whitespace PASSED [ 82%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_dot_value PASSED [ 85%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_space_value_text PASSED [ 88%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_space_value_keyword PASSED [ 91%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_angle_brackets PASSED [ 94%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_angle_brackets_single PASSED [ 97%] | ||
tests/test_backend_elasticsearch_lucene_connect.py::TestConnectElasticsearch::test_connect_lucene_windash_double PASSED [100%] | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
version: "3.8" | ||
|
||
volumes: | ||
certs: | ||
driver: local | ||
esdata01: | ||
driver: local | ||
kibanadata: | ||
driver: local | ||
metricbeatdata01: | ||
driver: local | ||
filebeatdata01: | ||
driver: local | ||
logstashdata01: | ||
driver: local | ||
|
||
networks: | ||
default: | ||
name: elastic | ||
external: false | ||
|
||
services: | ||
setup: | ||
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} | ||
volumes: | ||
- certs:/usr/share/elasticsearch/config/certs | ||
user: "0" | ||
command: > | ||
bash -c ' | ||
if [ x${ELASTIC_PASSWORD} == x ]; then | ||
echo "Set the ELASTIC_PASSWORD environment variable in the .env file"; | ||
exit 1; | ||
elif [ x${KIBANA_PASSWORD} == x ]; then | ||
echo "Set the KIBANA_PASSWORD environment variable in the .env file"; | ||
exit 1; | ||
fi; | ||
if [ ! -f config/certs/ca.zip ]; then | ||
echo "Creating CA"; | ||
bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; | ||
unzip config/certs/ca.zip -d config/certs; | ||
fi; | ||
if [ ! -f config/certs/certs.zip ]; then | ||
echo "Creating certs"; | ||
echo -ne \ | ||
"instances:\n"\ | ||
" - name: es01\n"\ | ||
" dns:\n"\ | ||
" - es01\n"\ | ||
" - localhost\n"\ | ||
" ip:\n"\ | ||
" - 127.0.0.1\n"\ | ||
" - name: kibana\n"\ | ||
" dns:\n"\ | ||
" - kibana\n"\ | ||
" - localhost\n"\ | ||
" ip:\n"\ | ||
" - 127.0.0.1\n"\ | ||
> config/certs/instances.yml; | ||
bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; | ||
unzip config/certs/certs.zip -d config/certs; | ||
fi; | ||
echo "Setting file permissions" | ||
chown -R root:root config/certs; | ||
find . -type d -exec chmod 750 \{\} \;; | ||
find . -type f -exec chmod 640 \{\} \;; | ||
echo "Waiting for Elasticsearch availability"; | ||
until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done; | ||
echo "Setting kibana_system password"; | ||
until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done; | ||
curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/sigmahq -d "{\"password\" : \"sigmahq\", \"roles\" : [ \"superuser\" ], \"full_name\" : \"SigmaHQ\", \"email\" : \"[email protected]\"}" | ||
echo "All done!"; | ||
' | ||
healthcheck: | ||
test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] | ||
interval: 1s | ||
timeout: 5s | ||
retries: 120 | ||
es01: | ||
depends_on: | ||
setup: | ||
condition: service_healthy | ||
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} | ||
labels: | ||
co.elastic.logs/module: elasticsearch | ||
volumes: | ||
- certs:/usr/share/elasticsearch/config/certs | ||
- esdata01:/usr/share/elasticsearch/data | ||
ports: | ||
- ${ES_PORT}:9200 | ||
environment: | ||
- node.name=es01 | ||
- cluster.name=${CLUSTER_NAME} | ||
- discovery.type=single-node | ||
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD} | ||
- bootstrap.memory_lock=true | ||
- xpack.security.enabled=true | ||
- xpack.security.http.ssl.enabled=true | ||
- xpack.security.http.ssl.key=certs/es01/es01.key | ||
- xpack.security.http.ssl.certificate=certs/es01/es01.crt | ||
- xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt | ||
- xpack.security.transport.ssl.enabled=true | ||
- xpack.security.transport.ssl.key=certs/es01/es01.key | ||
- xpack.security.transport.ssl.certificate=certs/es01/es01.crt | ||
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt | ||
- xpack.security.transport.ssl.verification_mode=certificate | ||
- xpack.license.self_generated.type=${LICENSE} | ||
mem_limit: ${ES_MEM_LIMIT} | ||
ulimits: | ||
memlock: | ||
soft: -1 | ||
hard: -1 | ||
healthcheck: | ||
test: | ||
[ | ||
"CMD-SHELL", | ||
"curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", | ||
] | ||
interval: 10s | ||
timeout: 10s | ||
retries: 120 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# Project namespace (defaults to the current folder name if not set) | ||
#COMPOSE_PROJECT_NAME=myproject | ||
|
||
|
||
# Password for the 'elastic' user (at least 6 characters) | ||
ELASTIC_PASSWORD=changeme | ||
|
||
|
||
# Password for the 'kibana_system' user (at least 6 characters) | ||
KIBANA_PASSWORD=changeme | ||
|
||
|
||
# Version of Elastic products | ||
STACK_VERSION=8.7.1 | ||
|
||
|
||
# Set the cluster name | ||
CLUSTER_NAME=docker-cluster | ||
|
||
|
||
# Set to 'basic' or 'trial' to automatically start the 30-day trial | ||
LICENSE=basic | ||
#LICENSE=trial | ||
|
||
|
||
# Port to expose Elasticsearch HTTP API to the host | ||
ES_PORT=9200 | ||
|
||
|
||
# Port to expose Kibana to the host | ||
KIBANA_PORT=5601 | ||
|
||
|
||
# Increase or decrease based on the available host memory (in bytes) | ||
ES_MEM_LIMIT=1073741824 | ||
KB_MEM_LIMIT=1073741824 | ||
LS_MEM_LIMIT=1073741824 | ||
|
||
|
||
# SAMPLE Predefined Key only to be used in POC environments | ||
ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2 | ||
|