YAML format specification
This document describes the YAML configuration format for Airlock IAM. Using examples, it explains the syntax and the meaning of all supported configuration concepts for IAM configuration and snippet files.
General information
- YAML version
The IAM YAML config format is based on YAML version 1.2. - YAML comments
Config files with YAML comments are valid and can be read by IAM components. However, YAML comments are not preserved when configuration files are written by IAM components. Use the comment attributes within the IAM YAML format instead (see below). - Lenient parsing vs. strict writing
Parsing YAML files is to some degree lenient: unquoted strings, arbitrary order of properties or plugins, or missing plugin IDs are ok in some situations.
However, when IAM components - like the Config Editor or command-line tools - write YAML documents they apply strict rules regarding the ordering of properties, plugins, and other elements. Moreover, missing plugin IDs are generated and strings are quoted where necessary.
Basic YAML document structure
The basic structure of Airlock IAM YAML config files is as follows:
schemaVersion: iam.airlock.com/v1 # version of IAM YAML the format type: IamConfig # type of the configuration "IamConfig" or "IamSnippet" metadata: # metadata block with information about the configuration iamVersion: '8.4' # IAM product version the configuration is valid for history: # Configuration history - datetime: 2025-02-05T12:34:56.123Z author: alice comment: Added passwordless flow spec: # The spec part contains the actual configuration - type: SomePluginType # See separate examples for more information about this part. id: somePluginId properties: prop1: value1 prop2: value2
The spec
part contains the actual configuration that defines Airlock IAM's behavior.
The spec
is a list of plugin trees in the following defined order:
- Top-level IAM modules (like
loginapp
,adminapp
, etc.). - Plugin trees that are not directly connected to the top-level IAM modules (so-called unconnected plugins/plugin trees) and plugins that are only reachable via parent links (inheritance).
This example shows an excerpt of an IAM configuration containing main settings (globalConfiguration), the loginapp and the adminapp, and two unconnected plugins.
schemaVersion: iam.airlock.com/v1 type: IamConfig metadata: iamVersion: '8.4' spec: # top-level IAM modules come first - type: GlobalConfiguration ... - type: Loginapp ... - type: Adminapp ... # "unconnected" plugins come after the IAM modules - type: ApplicationIdConfig ... - type: TaskSchedule ...
Each block starts with the type attribute and is configured as an IAM plugin. The inner structure of a plugin configuration is omitted in the above example and described in the next section.
Short vs. long plugin type identifiers
Note that the above example contains short plugin types.
In Airlock IAM 8.4, fully-qualified class names are required as type identifiers (like com.airlock.iam.servicecontainer.app.application.configuration.TaskSchedule
).
Short plugin type identifiers are supported as of IAM 8.5.
YAML structure for an IAM plugin
The basic configuration unit in Airlock IAM is a plugin. A plugin configuration consists of some fixed YAML attributes (type, id, displayName, properties) and the property configuration itself which depends on the plugin's type.
Consider the following plugin configuration example (configuring a password letter Word template):
type: com.airlock.iam.core.misc.renderer.LanguageSpecificTemplate id: passwordLetterTemplateEn displayName: English Password Letter Template comment: Letter template texts must be approved by marketing. properties: language: en template: instances/common/report-templates/password-letter-en.docx
Attribute | Description |
---|---|
| Defines the type of the plugin. This may be a fully-qualified class name or a short name for it. Short names are supported as of IAM 8.5. |
| A technical identifier that is used to refer to the plugin configuration. The Valid examples: References to the plugin may be within the configuration or also from configuration automation scripts or alike. Therefore, well-chosen IDs improve the readability of such scripts. As long as a plugin is not referred to, the |
| The Display names must be unique within a configuration and they are optional. Note: IAM top-level plugins have a fixed display name that must not be changed. At the time this manual was written, the following top-level module display names existed: |
| Optional comment. Favor this type of comment over YAML comments (starting with #): YAML comments are not displayed in the Config Editor and they are not preserved when IAM components write the configuration. The comment does not affect the behavior of the plugin. |
| Used to refer to the parent plugin, if inheritance is used (see below). The parent plugin is referenced using its |
| The The names and types of the properties are defined by the plugin type and vary from plugin to plugin. Note that property values may themselves be plugins (also plugin lists or maps). See below for more information on this. If a plugin configuration has no properties, the |
Property values
Airlock IAM plugins have properties of different types. For example, there are booleans, integer numbers, and strings, but also properties referring to other plugins.
The different types of IAM plugin properties are specified in the YAML config format as in the following examples.
Simple properties
In general, simple properties are written as a string in YAML.
properties: # unquoted string value language: de resourceKey: mtan.payment.message # alternative representation of the same unquoted string value resourceKey: - value: mtan.payment.message # quoted string values secretKey: '0x0000000000000000000000000000000000000000' pattern: '{digits:6}' # multiline string value languages: |- de fr en # numbers cacheTimeout: '5' maxRelative: '-6574' # boolean required: 'true' optional: 'false' # a list of simple values (e.g. strings or regex patterns) languages: - valueList: - de - en - fr - it # alternative representation of the same list as above languages: - valueList: ['de', 'en', 'fr', 'it']
Note that strings can be provided without quotes but only as long as they can be interpreted as a string in a uniquely defined way. For example, the strings abc
, true
, and 2.4
can be specified without quotes. However, the strings '2e4'
or 'TRUE'
must be quoted, because they are ambiguous if unquoted. If in doubt, use quotes around strings.
Leading and trailing whitespace is removed (trimmed) from property values. Empty strings are treated as NULL
values (no value). See below for NULL
value representations.
Properties with plugin values
Property types with plugins as values are represented as follows. How to make multiple references to a plugin is described further below and not part of this example.
properties: # plugin property with name "authenticationSettings" authenticationSettings: type: com.airlock.iam.SomePluginType # rest of the plugin configuration # alternative representation of the above plugin property authenticationSettings: - plugin: type: com.airlock.iam.SomePluginType # rest of the plugin configuration # plugin list property with name "steps" steps: - pluginList: - type: com.airlock.iam.SomePluginType # rest of the plugin configuration - type: com.airlock.iam.SomePluginType # rest of the plugin configuration # plugin map property with name "valueProviders" valueProviders: - pluginMap: mapKey1: type: com.airlock.iam.SomePluginType # rest of the plugin configuration mapKey2: type: com.airlock.iam.SomePluginType # rest of the plugin configuration
NULL values
To explicitly define NULL values (specifying the absence of a property value), the following syntax is used.
properties: # simple property with explicit NULL value propertyName1: null # empty list (of simple properties) propertyName2: - valueList: [] # plugin property with explicit NULL value propertyName3: - plugin: null # plugin list property with empty list propertyName4: - pluginList: [] # plugin map property with empty map propertyName5: - pluginMap: {}
Plugin trees and multiple references to plugins
The YAML document represents a tree (a hierarchical structure). Where the IAM configuration can be represented as a tree of plugins, it is represented in YAML accordingly. Consider the following example.
# a simple plugin tree example type: com.airlock.iam.SomePluginType id: topLevelNode properties: child1: type: com.airlock.iam.SomePluginType id: childNode1 child2: type: com.airlock.iam.SomePluginType id: childNode2 properties: child21: type: com.airlock.iam.SomePluginType id: childNode21 child22: type: com.airlock.iam.SomePluginType id: childNode22
However, in general, the Airlock IAM configuration is not a tree but a DAG (directed acyclic graph) because a plugin configuration may be referenced multiple times.
For example, the database connection settings are typically only defined once but referred to in several places in the configuration. To reflect this, the ref
attribute is used:
The ref
attribute allows referring to plugin configurations by their id
.
# use "ref" attribute to refer to plugin configurations type: com.airlock.iam.SomePluginType id: topLevelNode properties: child1: type: com.airlock.iam.SomePluginType id: childNode1 child2: type: com.airlock.iam.SomePluginType id: childNode2 properties: child21: ref: childNode1 child22: ref: childNode1
A plugin with a given id
is defined once in the configuration and may be referred to multiple times using the ref
attribute. This also works when referring to plugins in plugin lists or maps.
The id
does not necessarily have to be defined before the ref
. Forward references, i.e., referring to an ID defined later in the file is allowed. However, whenever an IAM component writes the configuration, it writes a plugin (with its id
) first and refers to it in all subsequent occurrences of the plugin. A plugin may therefore “jump” up in the file when the configuration is written by IAM.
Inheritance (parents)
The concept of inheritance allows for reducing redundancy in the configuration by inheriting property values from a parent plugin and then overwriting specific values.
This concept is represented in YAML using the parentRef
attribute as shown in the following example.
type: com.airlock.iam.SomePluginType id: idOfTheParentPlugin properties: propA: parentValueA propB: parentValueB # use a parent plugin, inherit all its properties and overwrite one of them type: com.airlock.iam.SomePluginType id: idOfTheChildPlugin parentRef: idOfTheParentPlugin properties: propB: childValueB
Note that it is possible, using NULL
values, to undefine a property value in a child even if the parent specifies a value.
Configuration contexts, environments, and variables
In IAM each property value may be associated with a configuration context, a configuration environment, a configuration variable, or a combination of them. The examples below show how these concepts are represented in YAML.
For an explanation of the concepts themselves, please refer to separate sections of this documentation.
Configuration contexts, environments, and variables for simple properties.
# a simple property with a combination of values depending on context, environment, and variables properties: sessionIdleTimeout: # property value with a sensitive variable (no context, no environment) - value: 13m var: name: SESS_TIMEOUT sensitive: true # property value for context ctxA - value: 17m context: ctxA # property value for environment prod - value: 19m env: prod # property value for environment prod and context ctxA and a variable - value: 23m env: prod context: ctxA var: name: SESSIONTIMEOUT
Configuration contexts, environments, and variables for a property with a simple value list.
# list of simple values with a combination of values depending on context, environment, and variables properties: validLanguages: # property value with a sensitive variable (no context, no environment) - valueList: - de - en var: name: LANGDEF sensitive: true # property value for context ctxA - valueList: - de - fr context: ctxA # property value for environment prod - valueList: - de - en - fr env: prod # property value for environment prod and context ctxA and a variable - valueList: - de - it env: prod context: ctxA var: name: LANGSPEC
Configuration contexts, environments, and variables for a property with a plugin as value:
# a plugin property with a combination of values depending on context, environment, and variables properties: sqlDataSource: # property value with a sensitive variable (no context, no environment) - plugin: ref: defaultDbConnection var: name: DBCONDEF sensitive: true # property value for context ctxA - plugin: ref: dbConnectionForContextA context: ctxA # property value for environment prod - plugin: ref: dbConnectionForEnvProd env: prod # property value for environment prod and context ctxA and a variable - plugin: ref: dbConnectionForEncProdAndContextA env: prod context: ctxA var: name: DBCONSPEC
Configuration contexts, environments, and variables for a property with a plugin list as value:
# a plugin list property with a combination of values depending on context, environment, and variables properties: steps: # property value with a sensitive variable (no context, no environment) - pluginList: - ref: firstStepPluginId - ref: secondStepPluginId var: name: FLOWSTEPSDEV sensitive: true # property value for context ctxA - pluginList: - ref: firstStepPluginId - ref: secondStepForContextA context: ctxA # property value for environment prod - pluginList: - ref: firstStepPluginId - ref: secondStepForEnvProd env: prod # property value for environment prod and context ctxA and a variable - pluginList: - ref: firstStepPluginId - ref: secondStepForEnvProdAndContextA env: prod context: ctxA var: name: FLOWSTEPSSPEC
Configuration contexts, environments, and variables for a property with a plugin map as value:
# a plugin map property with a combination of values depending on context, environment, and variables properties: valueProviders: # property value with a sensitive variable (no context, no environment) - pluginMap: new_email: ref: emailValueProviderDefault var: name: VALUEPROVIDERSDEF sensitive: true # property value for context ctxA - pluginMap: new_email: ref: emailValueProviderForContextA context: ctxA # property value for environment prod - pluginMap: new_email: ref: emailValueProviderForEnvProd env: prod # property value for environment prod and context ctxA and a variable - pluginMap: new_email: ref: emailValueProviderForEnvProdAndContextA env: prod context: ctxA var: name: VALUEPROVIDERSSPEC
Sensitive values and externally stored secrets
Sensitive values are represented in YAML as shown in the following example:
# different ways to represent sensitive values in YAML properties: # a plain secret password1: thisIsMyNotSoSecretPassword # an obfuscated (not encrypted) secret password2: '[OBFUSCATED]3/rzKUNND/4LElZhvcm8sNFaMXrBjLQtoNevU5BJVnk=' # a reference to an externally stored secret password3: - value: storageId: idInExternallyStoredSecret # same as above but in combination with a configuration context password4: - value: storageId: idInExternallyStoredSecret context: ctxA