Configuration Properties

This page lists all configuration properties for each In-App Protection component. Properties shared across components are listed first, followed by component-specific sections.

Shared Properties

The following properties are available in every component, with the exception of the Redis properties which are not available in the Insight API. Replace <COMPONENT> with the environment variable prefix of the component, i.e. CONSOLEAPI, DEVICEAPI, INTEGRATIONAPI or INSIGHTAPI, e.g. IAP_DEVICEAPI_R2DBC_URL.

Environment Variable Default Value Description
IAP_<COMPONENT>_R2DBC_URL   R2DBC connection URL to PostgreSQL, e.g. r2dbc:postgresql://host.docker.internal:5432/iap
IAP_<COMPONENT>_R2DBC_USERNAME   PostgreSQL database username
IAP_<COMPONENT>_R2DBC_PASSWORD   PostgreSQL database password
IAP_<COMPONENT>_REDIS_HOST localhost Redis host name, e.g. host.docker.internal
IAP_<COMPONENT>_REDIS_PORT 6379 Redis port

Redis Topologies

In-App Protection components connect to Redis through Lettuce and support both a single Redis instance (standalone) and a Redis OSS cluster. Redis is configured through component-specific IAP_<COMPONENT>_REDIS_* environment variables, which map onto the underlying Spring Data Redis (spring.data.redis.*) properties.

[!IMPORTANT] Do not configure Redis with a connection URL (SPRING_DATA_REDIS_URL). Use the discrete host/port (or cluster nodes) properties instead. A Redis URL forces standalone mode and silently overrides IAP_<COMPONENT>_REDIS_CLUSTER_NODES, breaking OSS cluster deployments. It also embeds the access key in a single string, which the components deliberately avoid in favour of a separate IAP_<COMPONENT>_REDIS_PASSWORD.

The Lettuce client is forced to use the RESP2 protocol. This is required for managed Redis services (such as Azure Managed Redis with the OSS cluster policy) whose nodes reject the unauthenticated HELLO handshake that the default RESP3 protocol performs before authentication.

Authentication and TLS

The following properties apply to both topologies. Leave them unset for an unauthenticated local Redis; set them for managed Redis services (such as Azure Managed Redis).

Environment Variable Default Value Description
IAP_<COMPONENT>_REDIS_USERNAME   Redis username. Leave unset for access-key (password-only) authentication
IAP_<COMPONENT>_REDIS_PASSWORD   Redis password / access key
IAP_<COMPONENT>_REDIS_SSL_ENABLED false Set to true for TLS-secured managed Redis endpoints

Standalone

A standalone instance is the default. Point the components at it with IAP_<COMPONENT>_REDIS_HOST / IAP_<COMPONENT>_REDIS_PORT as listed in the shared properties above. This is also the correct topology for managed Redis using the Enterprise cluster policy, where a proxy hides cluster routing behind a single endpoint.

OSS Cluster

To run against a Redis OSS cluster (for example Azure Managed Redis with the OSS cluster policy), activate the redis-cluster Spring profile and provide the cluster nodes:

SPRING_PROFILES_ACTIVE=redis-cluster
IAP_<COMPONENT>_REDIS_CLUSTER_NODES=node1:6380,node2:6380

The cluster properties live in a profile-specific resource (application-redis-cluster.properties) that is loaded only when the redis-cluster profile is active. While the profile is inactive (the default), the cluster configuration is absent and the component runs standalone — so the same image serves both topologies. Activating the profile switches the components to cluster mode; IAP_<COMPONENT>_REDIS_HOST / IAP_<COMPONENT>_REDIS_PORT are then ignored. The authentication and TLS variables above apply to both topologies.

[!NOTE] Activating the redis-cluster profile without setting IAP_<COMPONENT>_REDIS_CLUSTER_NODES fails fast at startup. Set both together, or neither.

[!TIP] IAP_<COMPONENT>_REDIS_CLUSTER_NODES only needs seed nodes, not the full cluster. Lettuce performs cluster topology discovery from any reachable seed and then keeps the topology current through adaptive and periodic refresh (see the variables below). For managed Redis with the OSS cluster policy (such as Azure Managed Redis), the service exposes a single stable endpoint — point IAP_<COMPONENT>_REDIS_CLUSTER_NODES at that one endpoint and the remaining nodes are discovered automatically.

The following variables are honoured only when the redis-cluster profile is active:

Environment Variable Default Value Description
IAP_<COMPONENT>_REDIS_CLUSTER_NODES   Comma-separated list of seed node host:port pairs, e.g. node1:6380,node2:6380. A single endpoint is sufficient; the rest of the cluster is discovered automatically
IAP_<COMPONENT>_REDIS_CLUSTER_MAX_REDIRECTS 5 Maximum number of MOVED / ASK redirects to follow. Recommended for OSS cluster
IAP_<COMPONENT>_REDIS_LETTUCE_CLUSTER_REFRESH_ADAPTIVE true Enable adaptive topology refresh so MOVED / ASK trigger a cluster topology refresh
IAP_<COMPONENT>_REDIS_LETTUCE_CLUSTER_REFRESH_PERIOD 30s Periodic cluster topology refresh interval

Asynchronous APK Processing

APK processing work is distributed to background workers through per-provider Redis Streams. Each configured provider gets its own work stream, consumer group and dead-letter stream.

The pipeline spans two components:

  • The Device API is the producer. It publishes processing commands (through an outbox) to the streams.
  • The Integration API is the consumer. It hosts the provider connectors that process the commands.

The role switches (enable the infrastructure, run the consumers, run the scheduled jobs) are configured per component, see Device API and Integration API, so both can be deployed in the same servlet container with different roles. The tables below describe the shared topology and tuning, which uses IAP_CORE_* variables.

Global Switches

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_REDIS_ENABLED per component, see Device API and Integration API Enables the asynchronous processing stream infrastructure (publishers, scheduled jobs); If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_ENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_ENABLED
IAP_CORE_ASYNCPROCESSING_REDIS_CONSUMERSENABLED per component, see Device API and Integration API Enables the provider stream consumers; requires processing handlers, which only the Integration API provides; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_CONSUMERSENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_CONSUMERSENABLED

Provider Streams

Each provider stream is configured through variables of the form IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERS_<NAME>_<PROPERTY>, where <NAME> is one of: INTERNALSCORING, VIRUSTOTAL, KOODOUS, ALIENVAULT, INTEZER, POLYSWARM, GOOGLEPLAY, HUAWEI.

Defaults shared by all provider streams are set through the IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_* variables below; the corresponding per-provider variable (..._PROVIDERS_<NAME>_<PROPERTY>) overrides the default for that provider only.

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERS_<NAME>_STREAMKEY iap-async-processing-queue-<name> Redis key of the provider’s work stream (per provider only)
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERS_<NAME>_STREAMGROUPNAME <stream-key>-group Consumer group name (per provider only)
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERS_<NAME>_STREAMCONSUMERNAMEPREFIX <stream-key>-consumer- Prefix for consumer names; a random UUID suffix is appended at runtime (per provider only)
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_MESSAGEIDLETIME 3m Time after which a pending entry becomes eligible for re-claim
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_CHECKIDLEINTERVAL 5s Interval of the long-pending entry re-claim job
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_RETRYIDLELIMIT 10 Maximum number of idle entries re-claimed per job run
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_MAXDELIVERYCOUNT 4 Number of deliveries after which an entry is dead-lettered
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_CONSUMERIDLETIME 30m Time after which an idle consumer is removed from the group
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_CHECKIDLECONSUMERSINTERVAL 60m Interval of the idle-consumer cleanup job
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_MAXINFLIGHT 8 Maximum number of entries processed concurrently per consumer
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_DEADLETTER_MODE STREAM Poison-message handling: DROP (silent drop), STREAM (Redis dead-letter stream), or DB_TABLE (iap_dead_letter table)
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERS_<NAME>_DEADLETTER_STREAMKEY <stream-key>-dlq Redis key of the dead-letter stream (per provider only, used when mode is STREAM)
IAP_CORE_ASYNCPROCESSING_REDIS_PROVIDERDEFAULTS_MAXSTREAMLENGTH   Optional approximate XADD MAXLEN bound; unset leaves the stream unbounded

Publish Path

The following variables are shared by the outbox-based publish path that feeds all provider streams.

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_REPUBLISHATTEMPTS 3 Number of internal Redis retries within a single publish cycle
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_REPUBLISHBACKOFF 2s Delay between consecutive republish retry attempts
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_MAXREPUBLISHCYCLES 3 Maximum number of failed publish cycles before a message is parked as dead
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_IDEMPOTENCYGUARDTTL 180s Expiry of the publish idempotency guard key
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_REPUBLISHINTERVAL 5s Interval between scheduled republish job runs
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_REPUBLISHLIMIT 100 Maximum number of messages to republish per scheduled job run
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_DEFERREDREDRIVEINTERVAL 30s Interval of the scheduled job re-publishing runnable quota-deferred state rows
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_DEFERREDREDRIVELIMIT 100 Maximum number of deferred rows re-published per job run
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_OUTBOXRETRYJOBENABLED per component, see Device API and Integration API Enables the scheduled outbox retry job; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_OUTBOXRETRYJOBENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_OUTBOXRETRYJOBENABLED
IAP_CORE_ASYNCPROCESSING_REDIS_GLOBAL_DEFERREDREDRIVEJOBENABLED per component, see Device API and Integration API Enables the scheduled deferred-redrive job; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_DEFERREDREDRIVEJOBENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_DEFERREDREDRIVEJOBENABLED

Processing Handler

The following properties tune the shared dispatching handler that routes each provider stream’s commands to the registered per-ProcessingType connector (e.g. VirusTotal) and drives the iap_apk_processing state row around its work. The claim lease/retry budgets are resolved per ProcessingType: IAP_CORE_ASYNCPROCESSING_PROCESSING_DEFAULTS_* sets the template applied to every processing type, and the corresponding IAP_CORE_ASYNCPROCESSING_PROCESSING_TYPES_<NAME>_* variable (where <NAME> is the provider name, e.g. virustotal) overrides any of the three knobs for that processing type only; an unset knob, or a type with no entry at all, falls back to the default.

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_PROCESSING_DEFAULTS_CLAIMLEASE 5m How long a claimed state row’s lease lasts before it becomes reclaimable by another consumer
IAP_CORE_ASYNCPROCESSING_PROCESSING_DEFAULTS_MAXATTEMPTS 3 Number of retryable failures a state row may accumulate before it is marked DEAD
IAP_CORE_ASYNCPROCESSING_PROCESSING_DEFAULTS_MAXDEFERRALS 5 Number of provider-quota deferrals a state row may accumulate before it is marked DEAD
IAP_CORE_ASYNCPROCESSING_PROCESSING_TYPES_<NAME>_CLAIMLEASE   Per-ProcessingType override of ..._DEFAULTS_CLAIMLEASE; unset inherits the default
IAP_CORE_ASYNCPROCESSING_PROCESSING_TYPES_<NAME>_MAXATTEMPTS   Per-ProcessingType override of ..._DEFAULTS_MAXATTEMPTS; unset inherits the default
IAP_CORE_ASYNCPROCESSING_PROCESSING_TYPES_<NAME>_MAXDEFERRALS   Per-ProcessingType override of ..._DEFAULTS_MAXDEFERRALS; unset inherits the default

Asynchronous APK Package-Lookup Processing

Package-lookup work (checking whether an APK is still present in an app store, for example Google Play or Huawei AppGallery) is distributed to background workers through its own store-isolated Redis Streams, mirroring Asynchronous APK Processing field-for-field but bound under a separate prefix and consumer group. The feature is disabled by default and, like provider processing, its role switches are configured per component (see the package-lookup switches in the Device API and Integration API sections). Claim lease/retry/deferral budgets for the underlying iap_apk_processing state rows are shared with provider processing and configured through the IAP_CORE_ASYNCPROCESSING_PROCESSING_* variables above (<NAME> being GOOGLEPLAY or HUAWEI).

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_ENABLED per component, see Device API and Integration API Enables the package-lookup stream infrastructure (publishers, scheduled jobs); If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_ENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_ENABLED
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_CONSUMERSENABLED per component, see Device API and Integration API Enables the store stream consumers. Keep disabled until package-lookup handlers are installed; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_CONSUMERSENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_CONSUMERSENABLED

Store Streams

Each store stream is configured through variables of the form IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERS_<NAME>_<PROPERTY>, where <NAME> is one of: GOOGLEPLAY, HUAWEI.

Defaults shared by all store streams are set through the IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_* variables below; the corresponding per-store variable (..._PROVIDERS_<NAME>_<PROPERTY>) overrides the default for that store only. These share the same defaults as the Provider Streams above, including the STREAMKEYPREFIX (iap-async-processing-queue-) — override it if store and provider stream keys must not collide.

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERS_<NAME>_STREAMKEY iap-async-processing-queue-<name> Redis key of the store’s work stream (per store only)
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERS_<NAME>_STREAMGROUPNAME <stream-key>-group Consumer group name (per store only)
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERS_<NAME>_STREAMCONSUMERNAMEPREFIX <stream-key>-consumer- Prefix for consumer names; a random UUID suffix is appended at runtime (per store only)
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_MESSAGEIDLETIME 3m Time after which a pending entry becomes eligible for re-claim
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_CHECKIDLEINTERVAL 5s Interval of the long-pending entry re-claim job
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_RETRYIDLELIMIT 10 Maximum number of idle entries re-claimed per job run
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_MAXDELIVERYCOUNT 4 Number of deliveries after which an entry is dead-lettered
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_CONSUMERIDLETIME 30m Time after which an idle consumer is removed from the group
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_CHECKIDLECONSUMERSINTERVAL 60m Interval of the idle-consumer cleanup job
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_MAXINFLIGHT 8 Maximum number of entries processed concurrently per consumer
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_DEADLETTER_MODE STREAM Poison-message handling: DROP (silent drop), STREAM (Redis dead-letter stream), or DB_TABLE (iap_dead_letter table)
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERS_<NAME>_DEADLETTER_STREAMKEY <stream-key>-dlq Redis key of the dead-letter stream (per store only, used when mode is STREAM)
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_PROVIDERDEFAULTS_MAXSTREAMLENGTH   Optional approximate XADD MAXLEN bound; unset leaves the stream unbounded

Publish Path

The following variables are shared by the outbox-based publish path that feeds all store streams, including the job that re-drives DEFERRED state rows (for example after a provider quota resets) once their deferred_until timestamp elapses.

Environment Variable Default Value Description
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_REPUBLISHATTEMPTS 3 Number of internal Redis retries within a single publish cycle
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_REPUBLISHBACKOFF 2s Delay between consecutive republish retry attempts
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_MAXREPUBLISHCYCLES 3 Maximum number of failed publish cycles before a message is parked as dead
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_IDEMPOTENCYGUARDTTL 180s Expiry of the publish idempotency guard key
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_REPUBLISHINTERVAL 5s Interval between scheduled republish job runs
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_REPUBLISHLIMIT 100 Maximum number of messages to republish per scheduled job run
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_DEFERREDREDRIVEINTERVAL 30s Interval of the scheduled job re-publishing runnable DEFERRED state rows, per store
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_DEFERREDREDRIVELIMIT 100 Maximum number of deferred rows re-published per job run, per store
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_OUTBOXRETRYJOBENABLED per component, see Device API and Integration API Enables the scheduled outbox retry job; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_OUTBOXRETRYJOBENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_OUTBOXRETRYJOBENABLED
IAP_CORE_ASYNCPROCESSING_PACKAGELOOKUP_REDIS_GLOBAL_DEFERREDREDRIVEJOBENABLED per component, see Device API and Integration API Enables the scheduled deferred-redrive job; If set, overrides IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_DEFERREDREDRIVEJOBENABLED, resp. IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_DEFERREDREDRIVEJOBENABLED

Device API

The Device API collects security telemetry from mobile applications and triggers configurable callback.

Callbacks

Callbacks enables integration with external systems by delivering security events to configured endpoints. For each monitored application, one or more callback URLs can be registered to receive notifications about security events. When such an event is generated, it is first written to a Redis Stream for asynchronous delivery by the Integration API.

Redis Publisher Configuration

The following properties control the Redis Stream used to queue and redeliver outgoing callback messages.

Environment Variable Default Value Description
IAP_DEVICEAPI_CALLBACK_REDIS_STREAMKEY iap-callback-queue Redis stream key name
IAP_DEVICEAPI_CALLBACK_REDIS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_DEVICEAPI_CALLBACK_REDIS_REPUBLISHATTEMPTS 3 Number of internal Redis retries within a single publish cycle
IAP_DEVICEAPI_CALLBACK_REDIS_REPUBLISHBACKOFF 2s Delay between consecutive republish retry attempts
IAP_DEVICEAPI_CALLBACK_REDIS_REPUBLISHINTERVAL 5s Interval between scheduled republish job runs
IAP_DEVICEAPI_CALLBACK_REDIS_REPUBLISHLIMIT 100 Maximum number of messages to republish per scheduled job run
IAP_DEVICEAPI_CALLBACK_REDIS_MAXREPUBLISHCYCLES 5 Maximum number of failed publish cycles before a message is parked as dead

Device event callback configuration

The following properties configure device event callbacks.

Environment Variable Default Value Description
IAP_DEVICEAPI_CALLBACK_DEVICEEVENT_ELIGIBLETYPES HOOKING_FRAMEWORK_DETECTED Comma-separated list of uppercase device event type names for which callbacks shall be triggered

Malware callback configuration

The following properties configure malware callbacks.

Environment Variable Default Value Description
IAP_DEVICEAPI_CALLBACK_MALWARE_ELIGIBLETYPES BANKER Comma separated list of malware types (upper case) for which callbacks shall be triggered

Device API Asynchronous Processing Switches

The Device API and the Integration API are configured independently, even when deployed in the same servlet container. See Asynchronous APK Processing for the shared topology and tuning.

Environment Variable Default Value Description
IAP_DEVICEAPI_ASYNCPROCESSING_ENABLED true Enables the asynchronous processing stream infrastructure (publishers, scheduled jobs)
IAP_DEVICEAPI_ASYNCPROCESSING_CONSUMERSENABLED false Enables the provider stream consumers. Do not enable in the Device API, it has no processing handlers and the application would fail to start
IAP_DEVICEAPI_ASYNCPROCESSING_OUTBOXRETRYJOBENABLED true Runs the scheduled outbox retry job, which republishes commands that were not published
IAP_DEVICEAPI_ASYNCPROCESSING_DEFERREDREDRIVEJOBENABLED false Runs the scheduled job that re-publishes quota-deferred work; owned by the Integration API, which records the deferrals
IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_ENABLED false Enables the package-lookup stream infrastructure (publishers, scheduled jobs)
IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_CONSUMERSENABLED false Enables the store stream consumers. Do not enable in the Device API, it has no package-lookup processors and the application would fail to start
IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_OUTBOXRETRYJOBENABLED true Runs the scheduled package-lookup outbox retry job
IAP_DEVICEAPI_ASYNCPROCESSING_PACKAGELOOKUP_DEFERREDREDRIVEJOBENABLED false Runs the scheduled job that re-publishes quota-deferred package lookups; owned by the Integration API

Threat Level Suggestion

The following properties configure the rules by which the Device API assigns suggested threat level to APKs.

Environment Variable Default Value Description
IAP_DEVICEAPI_THREATSUGGESTION_HIDDAD_SCORETHRESHOLD 20 APKs whose (non-null) SDK score is greater than this value are skipped by the Hiddad threat level suggestion processing. A null score always passes the gate.

Probe Handling

The following property configures retry behavior for probe request handling, which retries the whole request on a fresh transaction if concurrent probes race on a duplicate-key or optimistic-locking conflict.

Environment Variable Default Value Description
IAP_DEVICEAPI_PROBE_MAXRETRYATTEMPTS 2 Maximum number of retry attempts for probe request handling. 0 disables retries (single attempt only).

Integration API

The Integration API consumes callback events from the Redis Stream and dispatches them as HTTP requests to external URLs registered per application. It also consumes email events from the Redis Stream and delivers them via the Gmail API.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_CONSOLEURL   Public URL of the Console Web frontend

Callbacks

Redis Consumer Configuration

The following properties control the Redis Stream consumer used to dispatch callback messages.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_CALLBACK_REDIS_STREAMKEY iap-callback-queue Redis stream key name
IAP_INTEGRATIONAPI_CALLBACK_REDIS_STREAMGROUPNAME iap-callback-queue-group Consumer group name
IAP_INTEGRATIONAPI_CALLBACK_REDIS_STREAMCONSUMERNAMEPREFIX iap-callback-queue-consumer- Prefix for consumer names; a random UUID suffix is appended at runtime
IAP_INTEGRATIONAPI_CALLBACK_REDIS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_INTEGRATIONAPI_CALLBACK_REDIS_MESSAGEIDLETIME 3m Minimum time a message must be idle before it is reprocessed by another consumer
IAP_INTEGRATIONAPI_CALLBACK_REDIS_CHECKIDLEINTERVAL 5s How often the scheduler checks for idle messages to reprocess
IAP_INTEGRATIONAPI_CALLBACK_REDIS_RETRYIDELIMIT 10 Maximum number of idle messages to retry per scheduler run
IAP_INTEGRATIONAPI_CALLBACK_REDIS_CHECKIDLECONSUMERSINTERVAL 60m How often the scheduler removes idle consumers from the consumer group
IAP_INTEGRATIONAPI_CALLBACK_REDIS_CONSUMERIDLETIME 30m Minimum idle duration before a consumer is considered inactive and eligible for removal
IAP_INTEGRATIONAPI_CALLBACK_REDIS_MAXDELIVERYCOUNT 4 Number of deliveries after which a message is treated as poison and dead-lettered
IAP_INTEGRATIONAPI_CALLBACK_REDIS_DEADLETTERMODE STREAM Poison-message handling: DROP (silent drop), STREAM (Redis dead-letter stream), or DB_TABLE (iap_dead_letter table)
IAP_INTEGRATIONAPI_CALLBACK_REDIS_DEADLETTERSTREAMKEY iap-callback-queue-dlq Redis key of the dead-letter stream (used when DEADLETTERMODE=STREAM)

Web Client Configuration

The following properties control the HTTP client used to deliver callback requests, including timeouts and the circuit breaker that prevents repeated calls to unresponsive endpoints.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_CONNECTIONTIMEOUT 5s Timeout for establishing a connection to the callback URL
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_RESPONSETIMEOUT 60s Timeout for receiving a response from the callback URL
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_REFRESHCACHEAFTER 5m Interval after which cached web clients are refreshed
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_CIRCUITBREAKER_FAILURETHRESHOLD 100 Number of failures within the opening interval that causes the circuit breaker to open
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_CIRCUITBREAKER_OPENINGINTERVAL 2m Time window over which failures are counted when deciding whether to open the circuit breaker
IAP_INTEGRATIONAPI_CALLBACK_WEBCLIENT_CIRCUITBREAKER_CLOSINGINTERVAL 5m How long the circuit breaker stays open before attempting to close

Event Queue

Write Configuration

The following properties control the bounded local retry applied when persisting an event into the queue.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EVENTQUEUE_WRITE_RETRYATTEMPTS 3 Number of retry attempts for a transient failure before giving up
IAP_INTEGRATIONAPI_EVENTQUEUE_WRITE_RETRYBACKOFF 50ms Base delay for the exponential backoff applied between retry attempts

Retention Configuration

The following properties control the scheduled job that purges event queue entries older than the retention window.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EVENTQUEUE_RETENTION_MAXAGE 4d Maximum age of an event queue entry before it becomes eligible for deletion
IAP_INTEGRATIONAPI_EVENTQUEUE_RETENTION_PURGEJOBINTERVAL 1h Interval between scheduled purge job runs
IAP_INTEGRATIONAPI_EVENTQUEUE_RETENTION_PURGEBATCHSIZE 1000 Maximum number of rows deleted in a single batch, to bound transaction size

Truncate Configuration

The following properties control the on-demand event queue truncation triggered via the Integration API.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EVENTQUEUE_TRUNCATE_BATCHSIZE 1000 Maximum number of rows deleted in a single batch, to bound transaction size

Emails

The Integration API consumes email events from the Redis Stream and delivers them via the Gmail API. Email delivery is enabled by default and requires Gmail API credentials to be configured. To disable it, set IAP_INTEGRATIONAPI_EMAIL_ENABLED=false.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EMAIL_ENABLED true Enables email delivery

Email Client Configuration

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EMAIL_SENDEREMAIL   Email address used as the sender
IAP_INTEGRATIONAPI_EMAIL_SENDERNAME   Display name associated with the sender address
IAP_INTEGRATIONAPI_EMAIL_REPLYTOEMAIL   Email address set as the reply-to address
IAP_INTEGRATIONAPI_EMAIL_REPLYTONAME   Display name associated with the reply-to address
IAP_INTEGRATIONAPI_EMAIL_MAXRETRYATTEMPTS 3 Maximum number of send retry attempts
IAP_INTEGRATIONAPI_EMAIL_RETRYBACKOFF 2s Backoff delay between send retry attempts

Google Mail Client

OAuth 2.0 credentials for the Google Mail API. These are required when email sending is enabled. The OAuth credential must be authorized with at least the gmail.send scope.

To obtain these credentials, create OAuth 2.0 credentials in the Google Cloud Console and request the refresh token.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EMAIL_GOOGLE_API_APPNAME   Application name registered in Google API
IAP_INTEGRATIONAPI_EMAIL_GOOGLE_API_CLIENTID   OAuth 2.0 Client ID registered in the Google Cloud project
IAP_INTEGRATIONAPI_EMAIL_GOOGLE_API_CLIENTSECRET   Client secret of the OAuth 2.0 Client
IAP_INTEGRATIONAPI_EMAIL_GOOGLE_API_REFRESHTOKEN   OAuth 2.0 refresh token

Redis Consumer Configuration

The following properties control the Redis Stream consumer used to dispatch email messages.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EMAIL_REDIS_STREAMKEY iap-email-queue Redis stream key name
IAP_INTEGRATIONAPI_EMAIL_REDIS_STREAMGROUPNAME iap-email-queue-group Consumer group name
IAP_INTEGRATIONAPI_EMAIL_REDIS_STREAMCONSUMERNAMEPREFIX iap-email-queue-consumer- Prefix for consumer names; a random UUID suffix is appended at runtime
IAP_INTEGRATIONAPI_EMAIL_REDIS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_INTEGRATIONAPI_EMAIL_REDIS_MESSAGEIDLETIME 3m Minimum time a message must be idle before it is reprocessed by another consumer
IAP_INTEGRATIONAPI_EMAIL_REDIS_CHECKIDLEINTERVAL 5s How often the scheduler checks for idle messages to reprocess
IAP_INTEGRATIONAPI_EMAIL_REDIS_RETRYIDELIMIT 10 Maximum number of idle messages to retry per scheduler run
IAP_INTEGRATIONAPI_EMAIL_REDIS_CHECKIDLECONSUMERSINTERVAL 60m How often the scheduler removes idle consumers from the consumer group
IAP_INTEGRATIONAPI_EMAIL_REDIS_CONSUMERIDLETIME 30m Minimum idle duration before a consumer is considered inactive and eligible for removal
IAP_INTEGRATIONAPI_EMAIL_REDIS_MAXDELIVERYCOUNT 4 Number of deliveries after which a message is treated as poison and dead-lettered
IAP_INTEGRATIONAPI_EMAIL_REDIS_DEADLETTERMODE STREAM Poison-message handling: DROP (silent drop), STREAM (Redis dead-letter stream), or DB_TABLE (iap_dead_letter table)
IAP_INTEGRATIONAPI_EMAIL_REDIS_DEADLETTERSTREAMKEY iap-email-queue-dlq Redis key of the dead-letter stream (used when DEADLETTERMODE=STREAM)

Password Reset Email Content

You can customize both the subject line and the HTML body of the password reset email. These settings are optional, if not provided, the system will fall back to the default values.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_EMAIL_PASSWORDRESET_SUBJECT In-App Protection Console Password Reset Defines the email subject.
IAP_INTEGRATIONAPI_EMAIL_PASSWORDRESET_BODYTEMPLATEPATH   Specifies the resource path to a custom HTML body template, e.g. file:/config/email/password-reset.html

If you provide a custom HTML template, it must include the ${PASSWORD_RESET_URL} placeholder to display the reset link to the user. Available placeholders are:

Placeholder Value
${PASSWORD_RESET_URL} Full password reset link
${WEB_CONSOLE_URL} Base URL of the Web Console

Integration API Asynchronous Processing Switches

The Device API and the Integration API are configured independently, even when deployed in the same servlet container. See Asynchronous APK Processing for the shared topology and tuning.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_ASYNCPROCESSING_ENABLED true Enables the asynchronous processing stream infrastructure (publishers, scheduled jobs)
IAP_INTEGRATIONAPI_ASYNCPROCESSING_CONSUMERSENABLED false Enables the provider stream consumers. Set to true to process the commands published by the Device API
IAP_INTEGRATIONAPI_ASYNCPROCESSING_OUTBOXRETRYJOBENABLED true Runs the scheduled outbox retry job, which republishes commands that were not published
IAP_INTEGRATIONAPI_ASYNCPROCESSING_DEFERREDREDRIVEJOBENABLED true Runs the scheduled job that re-publishes quota-deferred work
IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_ENABLED false Enables the package-lookup stream infrastructure (publishers, scheduled jobs)
IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_CONSUMERSENABLED false Enables the store stream consumers. Requires package-lookup processors to be installed, otherwise the application fails to start
IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_OUTBOXRETRYJOBENABLED true Runs the scheduled package-lookup outbox retry job
IAP_INTEGRATIONAPI_ASYNCPROCESSING_PACKAGELOOKUP_DEFERREDREDRIVEJOBENABLED true Runs the scheduled job that re-publishes quota-deferred package lookups

External APK Processing Connectors

The Integration API looks up APK signatures on external threat-intelligence providers as asynchronous APK processing sub-processings (see Asynchronous APK Processing). Each provider has its own connector and configuration section below.

VirusTotal

The Integration API can look up an APK’s SHA-256 signature on VirusTotal (API v3, lookup-only) as one of the asynchronous APK processing sub-processings. It is disabled by default and requires a VirusTotal API key to be configured.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_VIRUSTOTAL_ENABLED false Enables the VirusTotal connector
IAP_INTEGRATIONAPI_VIRUSTOTAL_APIKEY   VirusTotal API key, sent as the x-apikey header
IAP_INTEGRATIONAPI_VIRUSTOTAL_BASEURL https://www.virustotal.com Base URL of the VirusTotal API
IAP_INTEGRATIONAPI_VIRUSTOTAL_DAILYQUOTA 1000 Maximum number of VirusTotal API requests allowed per rolling 24-hour window
IAP_INTEGRATIONAPI_VIRUSTOTAL_REQUESTTIMEOUT 10s Timeout applied to a single VirusTotal API call
IAP_INTEGRATIONAPI_VIRUSTOTAL_THREATCATEGORYSELECTION_FLOOR 3 Minimum number of engines that must agree on a threat category to link the malware type
IAP_INTEGRATIONAPI_VIRUSTOTAL_THREATCATEGORYSELECTION_RATIO 0.5 Minimum share (0, 1] of the highest category engine count a threat category must reach
IAP_INTEGRATIONAPI_VIRUSTOTAL_THREATNAMESELECTION_FLOOR 3 Minimum number of engines that must agree on a threat name to link the malware family
IAP_INTEGRATIONAPI_VIRUSTOTAL_THREATNAMESELECTION_RATIO 0.5 Minimum share (0, 1] of the highest name engine count a threat name must reach
IAP_INTEGRATIONAPI_VIRUSTOTAL_MALWARETHRESHOLD_MALICIOUSCOUNT 5 Minimum number of malicious engines to rate the APK MALWARE
IAP_INTEGRATIONAPI_VIRUSTOTAL_MALWARETHRESHOLD_MALICIOUSRATIO 0.15 Minimum share (0, 1] of malicious engines to rate the APK MALWARE

Malware types and families are linked to an APK only when VirusTotal knows the file and either the VirusTotal verdict or the APK’s current suggested threat level is POTENTIALLY_UNWANTED_APP or worse. When no threat category or name resolves to a malware type or family, the existing VirusTotal relations are kept. Malware types come from the VirusTotal threat categories (mapping table iap_malware_type_vt_category), malware families from threat names matching a family name ignoring case and non-alphanumeric characters. An entry is selected when its engine count is at least max(floor, ceil(topCount * ratio)), where topCount is the highest engine count in the list; nothing is selected when topCount < floor.

The VirusTotal processor rates an APK MALWARE when at least MALICIOUSCOUNT engines, or at least the MALICIOUSRATIO share of all engines, report it as malicious.

Koodous

The Integration API can look up an APK’s SHA-256 signature on Koodous as one of the asynchronous APK processing sub-processings. It is disabled by default and requires a Koodous API key to be configured.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_KOODOUS_ENABLED false Enables the Koodous connector
IAP_INTEGRATIONAPI_KOODOUS_APIKEY   Koodous API key, sent as the Authorization: Token <apiKey> header
IAP_INTEGRATIONAPI_KOODOUS_BASEURL https://developer.koodous.com Base URL of the Koodous API
IAP_INTEGRATIONAPI_KOODOUS_MINUTEQUOTA 30 Maximum number of Koodous API requests allowed per one-minute window
IAP_INTEGRATIONAPI_KOODOUS_REQUESTTIMEOUT 10s Timeout applied to a single Koodous API call

External APK Package-Lookup Connectors

The Integration API checks whether an APK’s package name is still present in an app store as one of the asynchronous APK package-lookup processings (see Asynchronous APK Package-Lookup Processing). Each store has its own connector and configuration section below.

Google Play

The Integration API can check whether an APK’s package name is currently present on the Google Play Store (public store listing page, unauthenticated) as one of the asynchronous APK package-lookup processings. It is disabled by default and requires no API key. The lookup is a best-effort HTTP-status heuristic — there is no official API for third-party package-existence checks — so an unexpected response from Google (for example an interstitial page) could in principle be misclassified. The listing is served per the region of the server’s IP address, so a package that is unavailable in that region is reported as not found even if it is still in the store elsewhere; “not found” therefore does not necessarily mean “removed from the store”. A redirect to another host (e.g. a consent page) is treated as a communication error and retried.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_GOOGLEPLAY_ENABLED false Enables the Google Play connector
IAP_INTEGRATIONAPI_GOOGLEPLAY_BASEURL https://play.google.com Base URL of the Google Play Store listing page
IAP_INTEGRATIONAPI_GOOGLEPLAY_MINUTEQUOTA 30 Maximum number of Google Play lookup requests allowed per one-minute window
IAP_INTEGRATIONAPI_GOOGLEPLAY_REQUESTTIMEOUT 10s Timeout applied to a single Google Play lookup call

Huawei AppGallery

The Integration API can check whether an APK’s package name is currently present in Huawei AppGallery (public package-detail endpoint, unauthenticated) as one of the asynchronous APK package-lookup processings. It is disabled by default and requires no API key. The lookup is a best-effort heuristic — there is no official API for third-party package-existence checks — the package is considered found when the response contains the configured AppGallery app URL prefix, so a change of the response format could misclassify packages.

Environment Variable Default Value Description
IAP_INTEGRATIONAPI_HUAWEIAPPGALLERY_ENABLED false Enables the Huawei AppGallery connector
IAP_INTEGRATIONAPI_HUAWEIAPPGALLERY_BASEURL https://appgallery.cloud.huawei.com Base URL of the AppGallery package-detail endpoint
IAP_INTEGRATIONAPI_HUAWEIAPPGALLERY_APPGALLERYURLPREFIX https://appgallery.huawei.com/app/ URL prefix of an AppGallery app page; a response containing it means the package exists
IAP_INTEGRATIONAPI_HUAWEIAPPGALLERY_MINUTEQUOTA 30 Maximum number of Huawei AppGallery lookup requests allowed per one-minute window
IAP_INTEGRATIONAPI_HUAWEIAPPGALLERY_REQUESTTIMEOUT 10s Timeout applied to a single Huawei AppGallery lookup call

Console API

The Console API provides the backend for the Console Web. It handles authentication, user management, and access to operational data.

Environment Variable Default Value Description
IAP_CONSOLEAPI_CONSOLEURL   Public URL of the Console Web frontend
IAP_CONSOLEAPI_CSRFCOOKIEDOMAIN   Domain for the CSRF cookie
IAP_CONSOLEAPI_ARTIFACTORYURL https://wultra.jfrog.io Base URL of the Artifactory instance
IAP_CONSOLEAPI_PAGEABLE_MAXPAGESIZE 200 Maximum page size accepted by the applications/flag-history/events list endpoints

TOTP (Two-Factor Authentication)

Console users can secure their accounts with a time-based one-time password (TOTP). The following properties configure code generation and QR code rendering for authenticator app setup.

Compatibility Requirement
The authenticator application must support the SHA-256 algorithm. Google Authenticator has been tested and is known to be compatible with the default settings.

Environment Variable Default Value Description
IAP_CONSOLEAPI_TOTP_SECRETKEYBYTES 20 Length in bytes of the TOTP secret key generated per user
IAP_CONSOLEAPI_TOTP_CODELENGTH 6 Number of digits in the generated TOTP code (6–8)
IAP_CONSOLEAPI_TOTP_STEPDURATION 30s Time-step duration for TOTP code validity
IAP_CONSOLEAPI_TOTP_ALLOWEDBACKWARDSTEPS 1 Number of past time-steps accepted during validation to allow clock skew
IAP_CONSOLEAPI_TOTP_QRCODESIZE 350 Size in pixels of the QR code image generated for authenticator setup
IAP_CONSOLEAPI_TOTP_AUTHENTICATORISSUER In-App Protection Issuer name displayed in the TOTP authenticator application

Password Reset

These properties control the self-service password reset flow, including the security token generated and included in the password reset link sent to the user.

Environment Variable Default Value Description
IAP_CONSOLEAPI_PASSWORD_RESET_TOKENLENGTHBYTES 16 Length in bytes of the generated password reset token
IAP_CONSOLEAPI_PASSWORD_RESET_TOKENEXPIRATIONDURATION 15m Period after which the password reset token expires

Email

The Console API publishes email events to a Redis Stream for asynchronous delivery by the Integration API.

Redis Publisher Configuration

The following properties control how the Console API writes outgoing email messages to the Redis Stream, including retry behaviour when publishing fails.

Environment Variable Default Value Description
IAP_CONSOLEAPI_EMAIL_REDIS_STREAMKEY iap-email-queue Redis stream key name
IAP_CONSOLEAPI_EMAIL_REDIS_STREAMENTRYPAYLOADKEY payload Field name that carries the message payload within a stream entry
IAP_CONSOLEAPI_EMAIL_REDIS_REPUBLISHATTEMPTS 3 Number of internal Redis retries within a single publish cycle
IAP_CONSOLEAPI_EMAIL_REDIS_REPUBLISHBACKOFF 2s Delay between consecutive republish retry attempts
IAP_CONSOLEAPI_EMAIL_REDIS_REPUBLISHINTERVAL 5s Interval between scheduled republish job runs
IAP_CONSOLEAPI_EMAIL_REDIS_REPUBLISHLIMIT 100 Maximum number of messages to republish per scheduled job run
IAP_CONSOLEAPI_EMAIL_REDIS_MAXREPUBLISHCYCLES 5 Maximum number of failed publish cycles before a message is parked as dead

Logstash

Logstash polls the PostgreSQL database for new security events and ships them to Elasticsearch. All connection details are provided via environment variables.

Environment Variable Default Value Description
JDBC_URL jdbc:postgresql://postgres:5432/inappprotection PostgreSQL JDBC connection URL
JDBC_USERNAME inappprotection PostgreSQL username
JDBC_PASSWORD   PostgreSQL password
JDBC_DRIVER_PATH /usr/share/logstash/drivers/postgresql.jar Path to the PostgreSQL JDBC driver inside the container
ES_URL   Elasticsearch base URL, e.g. https://my-cluster.es.azure.elastic-cloud.com
ES_USERNAME   Elasticsearch username
ES_PASSWORD   Elasticsearch password
POLL_INTERVAL */30 * * * * * Cron expression controlling how often Logstash queries PostgreSQL for new data
PIPELINE_WORKERS 2 Number of Logstash pipeline worker threads
PIPELINE_BATCH_SIZE 125 Number of events processed per pipeline batch
Last updated on Oct 15, 2026 (18:57) Edit on Github Send Feedback

develop

In-App Protection