forked from wazuh/wazuh-docker
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1da1f5083d | ||
|
|
7e9eaac2bc |
@@ -18,6 +18,7 @@
|
||||
|
||||
| Issue | Comment |
|
||||
| - | - |
|
||||
| [#2564](https://github.com/wazuh/wazuh-docker/issues/2564) | Add default AI assistant encryption key in the post installation script |
|
||||
| [#2537](https://github.com/wazuh/wazuh-docker/issues/2537) | Update deployment for Wazuh Indexer 5.0.0 RBAC |
|
||||
| [#2539](https://github.com/wazuh/wazuh-docker/pull/2539) | Add new WF for changelog check |
|
||||
| [#2502](https://github.com/wazuh/wazuh-docker/issues/2502) | Change artifact upload and download |
|
||||
|
||||
@@ -44,6 +44,9 @@ RUN mkdir -p $INSTALL_DIR/data/wazuh/config && chmod -R 775 $INSTALL_DIR/data/wa
|
||||
RUN mkdir -p $INSTALL_DIR/data/wazuh/logs && chmod -R 775 $INSTALL_DIR/data/wazuh/logs
|
||||
RUN setcap 'cap_net_bind_service=-ep' /usr/share/wazuh-dashboard/node/bin/node
|
||||
|
||||
# Delete default keystore
|
||||
RUN if [ -f /etc/wazuh-dashboard/opensearch_dashboards.keystore ]; then rm -f /etc/wazuh-dashboard/opensearch_dashboards.keystore; fi
|
||||
|
||||
################################################################################
|
||||
# Build stage 1 (the current Wazuh dashboard image):
|
||||
# Copy wazuh-dashboard from builder
|
||||
|
||||
@@ -20,9 +20,14 @@ DASHBOARD_PASSWORD="${DASHBOARD_PASSWORD:-kibanaserver}"
|
||||
|
||||
# Create and configure Wazuh dashboard keystore
|
||||
|
||||
yes | $OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore create --allow-root && \
|
||||
echo $DASHBOARD_USERNAME | $OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore add opensearch.username --stdin --allow-root && \
|
||||
echo $DASHBOARD_PASSWORD | $OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore add opensearch.password --stdin --allow-root
|
||||
|
||||
if [ ! -f "$OPENSEARCH_DASHBOARDS_HOME/config/opensearch_dashboards.keystore" ]; then
|
||||
echo "The keystore is not available; creating a new keystore."
|
||||
"$OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore" create --allow-root
|
||||
head -c 32 /dev/urandom | base64 | tr -d '\n' | "$OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore" add wazuh_ai_assistant.encryptionKey --stdin --allow-root
|
||||
fi
|
||||
echo $DASHBOARD_USERNAME | "$OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore" add opensearch.username --stdin --allow-root -f
|
||||
echo $DASHBOARD_PASSWORD | "$OPENSEARCH_DASHBOARDS_HOME/bin/opensearch-dashboards-keystore" add opensearch.password --stdin --allow-root -f
|
||||
|
||||
/wazuh_dashboard_config.sh
|
||||
|
||||
|
||||
@@ -17,6 +17,14 @@
|
||||
* **`opensearch_dashboards.yml`**: The main configuration file for OpenSearch Dashboards. Controls server host/port, OpenSearch connection URL, SSL settings, and Wazuh plugin settings.
|
||||
* **Customization**: Mount a custom `opensearch_dashboards.yml` into the dashboard container at `/usr/share/wazuh-dashboard/config/opensearch_dashboards.yml` and custom `wazuh.yml` into the dashboard container at `/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml` .
|
||||
* **Wazuh Plugin Settings**: The Wazuh plugin for the dashboard has its own configuration, often within `opensearch_dashboards.yml` or managed through environment variables, specifying the Wazuh API URL and credentials.
|
||||
* **`opensearch_dashboards.keystore`**: Secure storage for the dashboard secrets, located at `/usr/share/wazuh-dashboard/config/opensearch_dashboards.keystore`. The image is shipped without a keystore; the container entrypoint creates it on the first start and adds a randomly generated `wazuh_ai_assistant.encryptionKey`, which the AI assistant uses to encrypt its data. The `opensearch.username` and `opensearch.password` entries are set on every start from the `DASHBOARD_USERNAME` and `DASHBOARD_PASSWORD` environment variables.
|
||||
* **Customization**: To set your own key, add it through the keystore tool inside the dashboard container and restart the service:
|
||||
```bash
|
||||
echo "<your-encryption-key>" | docker compose exec -T wazuh.dashboard \
|
||||
/usr/share/wazuh-dashboard/bin/opensearch-dashboards-keystore add wazuh_ai_assistant.encryptionKey --stdin --allow-root -f
|
||||
docker compose restart wazuh.dashboard
|
||||
```
|
||||
* **Important**: The keystore is created only when it does not already exist, so the encryption key stays stable across restarts as long as the `/usr/share/wazuh-dashboard/config` volume is kept. If the keystore is deleted, the entrypoint generates a new key on the next start and any data encrypted with the previous one becomes unreadable.
|
||||
|
||||
## Applying Configuration Changes
|
||||
|
||||
@@ -42,6 +50,12 @@ To persist files or directories in your Wazuh deployment, you can mount them as
|
||||
|
||||
> **Important**: Ensure that files exist on the host before starting the containers. If the file doesn't exist, Docker will create a directory instead, which may cause startup failures.
|
||||
|
||||
### Wazuh Dashboard keystore
|
||||
|
||||
The `docker-compose.yml` files mount the named volume `wazuh-dashboard-config` on `/usr/share/wazuh-dashboard/config`, which is where `opensearch_dashboards.keystore` is stored. Keeping this volume preserves the `wazuh_ai_assistant.encryptionKey` generated on the first start.
|
||||
|
||||
Removing the volume (for example, with `docker compose down -v`) deletes the keystore. The next start creates a new one with a different encryption key, and data encrypted by the AI assistant with the previous key can no longer be decrypted.
|
||||
|
||||
For more information on Docker volumes and bind mounts, refer to the official Docker documentation:
|
||||
- [Use volumes](https://docs.docker.com/storage/volumes/)
|
||||
- [Bind mounts](https://docs.docker.com/storage/bind-mounts/)
|
||||
|
||||
@@ -7,6 +7,7 @@ This section summarizes security recommendations for Wazuh Docker deployments (s
|
||||
- Do not use default credentials. The Compose examples include placeholder values for the Wazuh API, Dashboard, and Indexer access.
|
||||
- Prefer injecting secrets at runtime (for example, via your CI/CD secret store or an external secrets manager) instead of hardcoding them in `docker-compose.yml`.
|
||||
- Rotate credentials regularly and after any suspected exposure.
|
||||
- The Wazuh dashboard keeps its secrets in `opensearch_dashboards.keystore`, persisted in the `wazuh-dashboard-config` volume. It stores the Indexer credentials and the `wazuh_ai_assistant.encryptionKey`, generated at random on the first start and unique per deployment. Restrict access to that volume and to `docker compose exec` on the dashboard container, and do not copy the keystore between deployments.
|
||||
|
||||
## Certificates and TLS
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ Below is a step-by-step example of how to perform this update:
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
> **Important**: Do not add the `-v` flag. It removes the named volumes, including `wazuh-dashboard-config`, which holds the Wazuh dashboard keystore. Losing that keystore regenerates the `wazuh_ai_assistant.encryptionKey` on the next start and makes the data previously encrypted by the AI assistant unreadable.
|
||||
|
||||
2. **Update the image tags**:
|
||||
Edit your `docker-compose.yml` file and update the `image` field for all Wazuh services to the desired version.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user