This is an automated email from the ASF dual-hosted git repository.
kumaab pushed a commit to branch ranger-2.10
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/ranger-2.10 by this push:
new 3053a67b2 RANGER-5680: Restructure audit services in docker compose
and use OpenSearch as the default Index Store (#1167)
3053a67b2 is described below
commit 3053a67b2e0c2bf594eff5d8381a467ed211e262
Author: Abhishek Kumar <[email protected]>
AuthorDate: Thu Aug 20 21:18:32 2026 -0700
RANGER-5680: Restructure audit services in docker compose and use
OpenSearch as the default Index Store (#1167)
(cherry picked from commit d4a0759a4017daee93e91f05983e386448efa14b)
---
dev-support/ranger-docker/README.md | 154 +++------------------
.../ranger-docker/docker-compose.ranger-solr.yml | 66 ---------
.../ranger-docker/docker-compose.ranger.yml | 1 +
.../admin/ranger-admin-install-mysql.properties | 28 ++--
.../admin/ranger-admin-install-oracle.properties | 28 ++--
5 files changed, 41 insertions(+), 236 deletions(-)
diff --git a/dev-support/ranger-docker/README.md
b/dev-support/ranger-docker/README.md
index 76c9968a3..a1ff6ce4f 100644
--- a/dev-support/ranger-docker/README.md
+++ b/dev-support/ranger-docker/README.md
@@ -34,7 +34,7 @@ Use Dockerfiles in this directory to create docker images and
run them to build
~~~
chmod +x download-archives.sh
# use a subset of the below to download specific services
- ./download-archives.sh hadoop hive hbase kafka knox ozone opensearch
+ ./download-archives.sh hadoop hive hbase kafka knox ozone
~~~
- Execute following commands to set environment variables to build Apache
Ranger docker containers:
@@ -74,169 +74,59 @@ cd dev-support/ranger-docker
### Run Ranger Services in Containers
-#### Bring up ranger-core services: ranger, usersync, tagsync, pdp and kms in
containers
+#### Bring up ranger-core services: ranger, usersync, tagsync, pdp, kms and
audit in containers
~~~
# To enable file based sync source for usersync do:
-# export ENABLE_FILE_SYNC_SOURCE=true
+export ENABLE_FILE_SYNC_SOURCE=true
# valid values for RANGER_DB_TYPE: mysql/postgres/oracle
+export RANGER_DB_TYPE=postgres
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f
docker-compose.ranger-pdp.yml -f docker-compose.ranger-kms.yml up -d
+# valid values for AUDIT_INDEX_STORE: opensearch (default) | solr
+# Ranger Admin audit_store (via ranger.sh); set matching profile for compose:
+export AUDIT_INDEX_STORE=opensearch
+export AUDIT_DESTINATIONS=audit-store-${AUDIT_INDEX_STORE}
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-usersync.yml
-f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-pdp.yml -f
docker-compose.ranger-kms.yml up -d
# Ranger Admin can be accessed at http://localhost:6080 (admin/rangerR0cks!)
~~~
#### Bring up hive container
~~~
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hive.yml up -d
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-hadoop.yml -f
docker-compose.ranger-hive.yml up -d
~~~
#### Bring up hbase container
~~~
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml up -d
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-hadoop.yml -f
docker-compose.ranger-hbase.yml up -d
~~~
#### Bring up ozone containers
-
-##### Ozone action-matcher feature flag
-
-The flag is controlled at runtime by
-`ranger.servicedef.ozone.enableActionMatcherInPoliciesCondition` in
-`ranger-admin-site.xml`. Docker maps it from
-`FF_ENABLE_OZONE_ACTION_MATCHES_CONDITION` in
-`scripts/admin/ranger-admin-install-*.properties` during Admin setup.
-
-**Prerequisite:** the admin distribution must include an uncommented property
-entry in `conf.dist/ranger-admin-site.xml`. Rebuild dist before building the
-Admin image:
-
-~~~
-docker compose -f docker-compose.ranger-build.yml build
-docker compose -f docker-compose.ranger-build.yml up
-~~~
-
-**First-time setup:** set `FF_ENABLE_OZONE_ACTION_MATCHES_CONDITION=true` in
-`scripts/admin/ranger-admin-install-<db>.properties`, then bring up services.
-
-**Changing the flag later** (choose one):
-
-1. Edit `FF_ENABLE_OZONE_ACTION_MATCHES_CONDITION` in
- `scripts/admin/ranger-admin-install-<db>.properties` and recreate Admin so
- setup runs again:
- ~~~
- docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-solr.yml -f docker-compose.ranger-ozone.yml \
- up -d --build --force-recreate ranger
- ~~~
- Works even if the DB already exists; setup re-runs on a fresh container.
-
-2. Edit the live value in the container's
- `ranger-admin-site.xml` and restart Admin.
-
-`install.properties` is not re-read on restart alone — only when setup runs.
-`RangerServiceDefService` applies the site.xml value when serving the ozone
-service-def.
-
~~~
./scripts/ozone/ozone-plugin-docker-setup.sh
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-ozone.yml up -d
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-ozone.yml up -d
~~~
-Verify (after login):
-
-~~~
-curl -s -u admin:rangerR0cks!
http://localhost:6080/service/plugins/definitions/name/ozone \
- | python3 -c "import json,sys; d=json.load(sys.stdin); print('options',
d.get('options')); print('conditions', [c['name'] for c in
d.get('policyConditions',[])])"
-~~~
#### Bring up trino container (requires docker build with jdk 11):
~~~
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-trino.yml
up -d
-~~~
-#### Bring up solr container:
-~~~
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
up -d
-~~~
-#### Bring up opensearch container:
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-trino.yml up -d
~~~
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-opensearch.yml up -d
-~~~
-
-#### OpenSearch audit flow (replace Solr for access audits)
-
-OpenSearch can replace Solr for **audit storage and UI queries**. Ranger Admin
reads audits via
-`audit_store=opensearch` using a native low-level REST client (compatible with
any OpenSearch version).
-
-**Write path:** access audits flow through audit-server ingestor, Kafka, and
the Java
-`ranger-audit-dispatcher-opensearch` service into the OpenSearch
`ranger_audits` index.
-Ranger Admin policy/admin transaction audits remain DB-backed; this is the
same boundary
-used by the Solr audit path.
-
-##### Setup
-
-With the default `RANGER_DB_TYPE=postgres`, OpenSearch auditing is
preconfigured and runs
-out of the box — the commands below need no `install.properties` changes.
-
-~~~
-# Prerequisites: build Ranger artifacts (admin, audit ingestor/dispatcher,
...) and download archives
-mvn clean package -DskipTests -pl distro -am
-cp target/ranger-* dev-support/ranger-docker/dist/
-cd dev-support/ranger-docker
-./download-archives.sh kafka opensearch hadoop
-
-export RANGER_DB_TYPE=postgres
-# 1. Start OpenSearch first (Ranger Admin's bootstrapper needs it on startup)
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-opensearch.yml \
- -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hadoop.yml \
- -f docker-compose.ranger-audit-ingestor.yml \
- -f docker-compose.ranger-audit-dispatcher-opensearch.yml up -d
ranger-opensearch
-
-# 2. Start core stack (Ranger Admin, Kafka, Hadoop)
-# Kafka auto-creates the ranger_audits topic on startup.
-# Ranger Admin auto-creates the OpenSearch index via
OpenSearchIndexBootStrapper.
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-opensearch.yml \
- -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hadoop.yml \
- -f docker-compose.ranger-audit-ingestor.yml \
- -f docker-compose.ranger-audit-dispatcher-opensearch.yml up -d ranger
ranger-kafka ranger-hadoop
-
-# 3. Start audit ingestor and OpenSearch dispatcher
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-opensearch.yml \
- -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hadoop.yml \
- -f docker-compose.ranger-audit-ingestor.yml \
- -f docker-compose.ranger-audit-dispatcher-opensearch.yml up -d
ranger-audit-ingestor ranger-audit-dispatcher-opensearch
-~~~
-
-To use OpenSearch with **mysql or oracle** instead, enable the OpenSearch
block in the matching
-`scripts/admin/ranger-admin-install-${RANGER_DB_TYPE}.properties` (uncomment
the `audit_store=opensearch`
-and `audit_opensearch_*` lines and comment out the Solr block) before running
the setup commands.
-
-For **existing Solr-based installs**, switch stores by setting
`audit_store=opensearch` (and the
-`audit_opensearch_*` properties) in install.properties and restarting Ranger
Admin.
-Similarly, check the `depends` section of the
`docker-compose.ranger-service.yaml` file and add docker-compose files for
these services when trying to bring up the `service` container.
#### Bring up all containers
~~~
./scripts/ozone/ozone-plugin-docker-setup.sh
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f
docker-compose.ranger-pdp.yml -f docker-compose.ranger-kms.yml -f
docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f
docker-compose.ranger-kafka.yml -f docker-compose.ranger-hive.yml -f
docker-compose.ranger-knox.yml -f docker-compose.ranger-ozone.yml up -d
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-usersync.yml
-f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-pdp.yml -f
docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f
docker-compose.ranger-hbase.yml -f docker-compose.ranger-hive.yml -f
docker-compose.ranger-knox.yml -f docker-compose.ranger-ozone.yml up -d
~~~
#### To rebuild specific images and start containers with the new image:
~~~
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f
docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f
docker-compose.ranger-hbase.yml -f docker-compose.ranger-kafka.yml -f
docker-compose.ranger-hive.yml -f docker-compose.ranger-trino.yml -f
docker-compose.ranger-knox.yml up -d --no-deps --force-recreate --build
<service-1> <service-2>
+docker compose --profile ${AUDIT_DESTINATIONS} -f docker-compose.ranger.yml -f
docker-compose.ranger-audit-service.yml -f docker-compose.ranger-usersync.yml
-f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-kms.yml -f
docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f
docker-compose.ranger-hive.yml -f docker-compose.ranger-trino.yml -f
docker-compose.ranger-knox.yml up -d --no-deps --force-recreate --build
<service-1> <service-2>
~~~
-#### To bring up audit server ingestor + dispatchers. Make sure kafka, solr,
and hdfs containers are running before bringing up audit server services.
-~~~
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-hadoop.yml -f docker-compose.ranger-kafka.yml -f
docker-compose.ranger-audit-server.yml up -d
+##### Also send audits to HDFS
+Audits fan out to `AUDIT_INDEX_STORE` **and** HDFS when the `audit-store-hdfs`
profile is enabled:
~~~
-
-#### To bring up audit server services individually:
-~~~
-# Audit ingestor
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-kafka.yml
-f docker-compose.ranger-audit-ingestor.yml up -d
-
-# Solr dispatcher (requires the ranger-solr container; see "Bring up solr
container" above)
-docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-solr.yml
-f docker-compose.ranger-kafka.yml -f
docker-compose.ranger-audit-dispatcher-solr.yml up -d
-
-# OpenSearch dispatcher (requires the ranger-opensearch container; see
"OpenSearch audit flow" above)
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-opensearch.yml -f docker-compose.ranger-kafka.yml -f
docker-compose.ranger-audit-dispatcher-opensearch.yml up -d
-
-# HDFS dispatcher
-docker compose -f docker-compose.ranger.yml -f
docker-compose.ranger-hadoop.yml -f docker-compose.ranger-kafka.yml -f
docker-compose.ranger-audit-dispatcher-hdfs.yml up -d
+export AUDIT_DESTINATIONS=audit-store-${AUDIT_INDEX_STORE}
+docker compose --profile ${AUDIT_DESTINATIONS} --profile audit-store-hdfs \
+ -f docker-compose.ranger.yml \
+ -f docker-compose.ranger-audit-service.yml \
+ -f docker-compose.ranger-audit-destination-hdfs.yml up -d
~~~
diff --git a/dev-support/ranger-docker/docker-compose.ranger-solr.yml
b/dev-support/ranger-docker/docker-compose.ranger-solr.yml
deleted file mode 100644
index bc3b7e18b..000000000
--- a/dev-support/ranger-docker/docker-compose.ranger-solr.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-services:
- ranger-solr:
- build:
- context: .
- dockerfile: Dockerfile.ranger-solr
- args:
- - RANGER_BASE_IMAGE=${RANGER_BASE_IMAGE}
- - RANGER_BASE_VERSION=${RANGER_BASE_VERSION}
- - SOLR_VERSION=${SOLR_VERSION}
- - SOLR_PLUGIN_VERSION=${SOLR_PLUGIN_VERSION}
- - KERBEROS_ENABLED=${KERBEROS_ENABLED}
- image: ranger-solr
- container_name: ranger-solr
- hostname: ranger-solr.rangernw
- volumes:
- - ./dist/keytabs/ranger-solr:/etc/keytabs
- -
./scripts/solr/solr-ranger_audits:/opt/solr/server/solr/configsets/ranger_audits/conf
- # Core conf is copied once by solr-precreate; mount so Solr 9 cache
updates apply without recreating the core
- - ./scripts/solr/solr-ranger_audits:/var/solr/data/ranger_audits/conf
- -
./scripts/solr/ranger_audits/core.properties:/var/solr/data/ranger_audits/core.properties
- -
./scripts/solr/ranger-solr-plugin-install.properties:/opt/ranger/ranger-solr-plugin/install.properties
- # Keep enable templates in sync with repo (image tarball may be stale)
- -
../../plugin-solr/conf/ranger-solr-security-changes.cfg:/opt/ranger/ranger-solr-plugin/install/conf.templates/enable/ranger-solr-security-changes.cfg:ro
- - ./scripts/solr/core-site.xml:/opt/solr/server/resources/core-site.xml
- - ./scripts/solr/solr-jaas.conf:/var/solr/data/jaas.conf
- - ./scripts/solr/solr-security.json:/var/solr/data/security.json
- - ./scripts/solr/ranger-solr.sh:/opt/ranger/ranger-solr.sh
- - ./scripts/kdc/krb5.conf:/etc/krb5.conf
- networks:
- - ranger
- ports:
- - "8983:8983"
- depends_on:
- ranger-kdc:
- condition: service_started
- ranger-zk:
- condition: service_started
- environment:
- - KERBEROS_ENABLED
- - KRB5_CONFIG=/etc/krb5.conf
- # Solr 9 enables Java SecurityManager by default; Ranger keytab login
and policy cache need broader access
- - SOLR_SECURITY_MANAGER_ENABLED=false
- command:
- - solr-precreate
- - ranger_audits
- - /opt/solr/server/solr/configsets/ranger_audits/
-
-networks:
- ranger:
- name: rangernw
diff --git a/dev-support/ranger-docker/docker-compose.ranger.yml
b/dev-support/ranger-docker/docker-compose.ranger.yml
index c737fab86..5d9ebe6e0 100644
--- a/dev-support/ranger-docker/docker-compose.ranger.yml
+++ b/dev-support/ranger-docker/docker-compose.ranger.yml
@@ -34,6 +34,7 @@ services:
environment:
- RANGER_VERSION
- RANGER_DB_TYPE
+ - AUDIT_INDEX_STORE
- KERBEROS_ENABLED
- DEBUG_ADMIN=${DEBUG_ADMIN:-false}
- JAVA_OPTS
diff --git
a/dev-support/ranger-docker/scripts/admin/ranger-admin-install-mysql.properties
b/dev-support/ranger-docker/scripts/admin/ranger-admin-install-mysql.properties
index 2ba46c336..67a1fd4ce 100644
---
a/dev-support/ranger-docker/scripts/admin/ranger-admin-install-mysql.properties
+++
b/dev-support/ranger-docker/scripts/admin/ranger-admin-install-mysql.properties
@@ -42,29 +42,19 @@ rangerTagsync_password=rangerR0cks!
rangerUsersync_password=rangerR0cks!
keyadmin_password=rangerR0cks!
+audit_store=opensearch
+
+audit_opensearch_urls=ranger-opensearch
+audit_opensearch_port=9200
+audit_opensearch_protocol=http
+audit_opensearch_user=admin
+audit_opensearch_password=admin
+audit_opensearch_index=ranger_audits
+audit_opensearch_bootstrap_enabled=true
-audit_store=solr
audit_solr_urls=http://ranger-solr:8983/solr/ranger_audits
audit_solr_collection_name=ranger_audits
-# audit_store=elasticsearch
-audit_elasticsearch_urls=
-audit_elasticsearch_port=9200
-audit_elasticsearch_protocol=http
-audit_elasticsearch_user=elastic
-audit_elasticsearch_password=elasticsearch
-audit_elasticsearch_index=ranger_audits
-audit_elasticsearch_bootstrap_enabled=true
-
-# audit_store=opensearch
-# audit_opensearch_urls=ranger-opensearch
-# audit_opensearch_port=9200
-# audit_opensearch_protocol=http
-# audit_opensearch_user=admin
-# audit_opensearch_password=admin
-# audit_opensearch_index=ranger_audits
-# audit_opensearch_bootstrap_enabled=true
-
policymgr_external_url=http://ranger-admin:6080
policymgr_http_enabled=true
diff --git
a/dev-support/ranger-docker/scripts/admin/ranger-admin-install-oracle.properties
b/dev-support/ranger-docker/scripts/admin/ranger-admin-install-oracle.properties
index f83688c80..77adc3787 100644
---
a/dev-support/ranger-docker/scripts/admin/ranger-admin-install-oracle.properties
+++
b/dev-support/ranger-docker/scripts/admin/ranger-admin-install-oracle.properties
@@ -44,29 +44,19 @@ rangerTagsync_password=rangerR0cks!
rangerUsersync_password=rangerR0cks!
keyadmin_password=rangerR0cks!
+audit_store=opensearch
+
+audit_opensearch_urls=ranger-opensearch
+audit_opensearch_port=9200
+audit_opensearch_protocol=http
+audit_opensearch_user=admin
+audit_opensearch_password=admin
+audit_opensearch_index=ranger_audits
+audit_opensearch_bootstrap_enabled=true
-audit_store=solr
audit_solr_urls=http://ranger-solr:8983/solr/ranger_audits
audit_solr_collection_name=ranger_audits
-# audit_store=elasticsearch
-audit_elasticsearch_urls=
-audit_elasticsearch_port=9200
-audit_elasticsearch_protocol=http
-audit_elasticsearch_user=elastic
-audit_elasticsearch_password=elasticsearch
-audit_elasticsearch_index=ranger_audits
-audit_elasticsearch_bootstrap_enabled=true
-
-# audit_store=opensearch
-# audit_opensearch_urls=ranger-opensearch
-# audit_opensearch_port=9200
-# audit_opensearch_protocol=http
-# audit_opensearch_user=admin
-# audit_opensearch_password=admin
-# audit_opensearch_index=ranger_audits
-# audit_opensearch_bootstrap_enabled=true
-
policymgr_external_url=http://ranger-admin:6080
policymgr_http_enabled=true