Hashicorp Vault

Поддерживается только производитель

Компонент hashicorp-vault, который интегрирует Hashicorp Vault (opens in a new tab) .

URI Format

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-hashicorp-vault</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Configuring Options

Компоненты Camel настраиваются на двух отдельных уровнях:

  • уровень компонентов

  • уровень конечной точки

Configuring Component Options

На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.

Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.

У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.

Вы можете настроить компоненты, используя:

  • Компонент DSL (opens in a new tab) .

  • в файле конфигурации ( application.propertiesфайлы *.yaml, и т.д.).

  • непосредственно в коде Java.

Configuring Endpoint Options

Настройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.

Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.

Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .

Заполнители свойств обеспечивают несколько преимуществ:

  • Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Они позволяют вынести конфигурацию за пределы кода.

  • Они помогают коду стать более гибким и пригодным для повторного использования.

В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.

Component Options

Компонент Hashicorp Vault поддерживает 2 параметра, которые перечислены ниже.

lazyStartProducer (producer)

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

autowiredEnabled (advanced)

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: boolean

Endpoint Options

Конечная точка Hashicorp Vault настраивается с использованием синтаксиса URI:

hashicorp-vault:secretsEngine

Со следующими параметрами пути и запроса :

Path Parameters (1 parameters)

secretsEngine (producer)

  • Имя хранилища, которое будет использоваться.

  • По умолчанию:

  • Тип: String

Query Parameters (10 parameters)

cloud (producer)

  • Определите, развернуто ли хранилище Hashicorp в облаке Hashicorp или нет.

  • По умолчанию: false

  • Тип: boolean

host (producer)

  • Будет использоваться хост экземпляра Hashicorp Vault.

  • По умолчанию:

  • Тип: String

namespace (producer)

  • Если экземпляр Hashicorp Vault развернут в Hashicorp Cloud, это поле определит пространство имен.

  • По умолчанию:

  • Тип: String

operation (producer)

  • Тип: Операция, которую предстоит выполнить.

    Значения перечисления:

    • createSecret

    • getSecret

    • deleteSecret

    • listSecrets

  • По умолчанию:

  • Тип: HashicorpVaultOperation

port (producer)

  • Порт экземпляра Hashicorp Vault, который будет использоваться.

  • По умолчанию: 8200

  • Тип: String

scheme (producer)

  • Будет использоваться схема экземпляра хранилища Hashicorp.

  • По умолчанию: https

  • Тип: String

secretPath (producer)

  • Секретный путь к экземпляру хранилища Hashicorp, который будет использоваться.

  • По умолчанию:

  • Тип: String

vaultTemplate (producer)

  • Автоматически подключенный экземпляр шаблона Vault.

  • По умолчанию:

  • Тип: VaultTemplate

lazyStartProducer (producer (advanced))

  • Тип: Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

token (security)

  • Токен для использования.

  • По умолчанию:

  • Тип: String

Message Headers

Компонент Hashicorp Vault поддерживает 3 заголовка сообщений, которые перечислены ниже:

CamelHashicorpVaultProducerOperation (producer)

Constant: OPERATION (opens in a new tab)

  • Переопределяет желаемую операцию, которая будет использоваться в производителе.

  • По умолчанию:

  • Тип: String

CamelHashicorpVaultSecretPath (producer)

Constant: SECRET_PATH (opens in a new tab)

  • Тип: Установите желаемый секретный путь в качестве заголовка.

  • По умолчанию:

  • Тип: String

CamelHashicorpVaultSecretVersion (producer)

Constant: SECRET_VERSION (opens in a new tab)

  • Установите нужную секретную версию в качестве заголовка.

  • По умолчанию:

  • Тип: String

Authentication and Hashicorp vault on-premise vs Hashicorp Cloud

Компонент поддерживает операции на уровне производителя. В частности, он предоставляет следующие функции:

  • createSecret

  • getSecret

  • deleteSecret

  • listSecrets

Компонент может взаимодействовать с HashiCorp Vault, который может быть развернут либо как локальный экземпляр, либо как экземпляр HashiCorp Vault Cloud (версия Enterprise).

Configuration for HashiCorp Vault Cloud

При использовании экземпляра HashiCorp Vault Cloud, помимо стандартных параметров, таких как host, port, scheme, и token, необходимо настроить следующие дополнительные параметры:

  • cloud:: Логический флаг, который необходимо явно установить, trueчтобы указать, что экземпляр HashiCorp Vault размещен в облаке.

  • namespace:: Пространство имен вашего движка секретов.

Examples

Чтобы использовать эту функцию, вам необходимо предоставить учетные данные для хранилища Hashicorp в качестве переменных среды:

export CAMEL_VAULT_HASHICORP_TOKEN=token
export CAMEL_VAULT_HASHICORP_HOST=host
export CAMEL_VAULT_HASHICORP_PORT=port
export CAMEL_VAULT_HASHICORP_SCHEME=http/https

Вы также можете настроить учетные данные в application.propertiesфайле, например:

camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme

Если указанный вами работающий экземпляр Hashicorp Vault работает в Hashicorp Cloud, для конфигурации потребуются два дополнительных параметра:

export CAMEL_VAULT_HASHICORP_TOKEN=token
export CAMEL_VAULT_HASHICORP_HOST=host
export CAMEL_VAULT_HASHICORP_PORT=port
export CAMEL_VAULT_HASHICORP_SCHEME=http/https
export CAMEL_HASHICORP_VAULT_CLOUD=true
export CAMEL_HASHICORP_VAULT_NAMESPACE=namespace

Вы также можете установить то же самое в application.propertiesфайле, например:

camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme
camel.vault.hashicorp.cloud = true
camel.vault.hashicorp.namespace = namespace

Это позволит функции «Свойства» работать даже в варианте развертывания Hashicorp Cloud.

* Если приложение запущено на облачной платформе Kubernetes, вы можете инициализировать переменные среды из Secret или Configmap для повышения безопасности. Вы также можете повысить безопасность, установив заглушку для свойства Secret , которая будет инициализирована только во время выполнения приложения.

  • Тип: * camel.vault.hashicorpКонфигурация применяется только к функции свойств хранилища Hashicorp (например, при разрешении свойств). При использовании operationпараметра для создания, получения, перечисления секретов и т. д. необходимо указать параметры host, port, scheme(при необходимости) и token.

На этом этапе вы сможете ссылаться на свойство следующим образом:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route}}"/>
    </route>
</camelContext>

Где route будет именем секрета, хранящегося в экземпляре Hashicorp Vault, в движке «secret».

Вы можете указать значение по умолчанию на случай, если секрет отсутствует в экземпляре Hashicorp Vault:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route:default}}"/>
    </route>
</camelContext>

В этом случае, если секрет отсутствует в «секретном» движке, свойство вернется к значению «по умолчанию».

Кроме того, вы можете получить определенное поле секрета, если у вас есть, например, секретная база данных с именем следующего вида:

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}

Вы можете получить единственное секретное значение в своем маршруте, в «секретном» движке, например:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database#username}}"/>
    </route>
</camelContext>

Или повторно использовать свойство как часть конечной точки.

Вы можете указать значение по умолчанию в случае, если определенное поле секрета отсутствует в экземпляре Hashicorp Vault в движке «secret»:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database#username:admin}}"/>
    </route>
</camelContext>

В этом случае, если секрет не существует или существует (в механизме «secret»), но поле имени пользователя не является частью секрета, свойству будет присвоено значение «admin».

Также существует синтаксис для получения определенной версии секрета для обоих подходов: с указанием поля/значения по умолчанию или только с секретом:

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route@2}}"/>
    </route>
</camelContext>

Этот подход вернет секрет маршрута RAW с версией «2» в «секретном» движке.

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:route:default@2}}"/>
    </route>
</camelContext>

Этот подход вернет значение секрета маршрута с версией «2» или значение по умолчанию в случае, если секрет не существует или версия не существует (в движке «secret»).

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database#username:admin@2}}"/>
    </route>
</camelContext>

При таком подходе будет возвращено поле имени пользователя секрета базы данных с версией «2» или admin в случае, если секрет не существует или версия не существует (в движке «secret»).

Единственное требование -- добавить jar-файл camel-hashicorp-vault в приложение Camel.

Spring Boot Auto-Configuration

При использовании hashicorp-vault с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-hashicorp-vault-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

Компонент поддерживает 3 опции, которые перечислены ниже.

camel.component.hashicorp-vault.autowired-enabled

  • Тип: Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: Boolean

camel.component.hashicorp-vault.enabled

  • Включить ли автоматическую настройку компонента hashicorp-vault. По умолчанию эта функция включена.

  • По умолчанию:

  • Тип: Boolean

camel.component.hashicorp-vault.lazy-start-producer

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: Boolean

Using Hashicorp Vault Property Function in Spring Boot for Early resolving properties

Стартер компонента Spring Boot для Hashicorp Vault предоставляет возможность раннего разрешения свойств, чтобы конечный пользователь мог разрешить свойства непосредственно в application.properties до запуска среды выполнения Spring Boot и контекста Camel.

Это можно сделать следующим образом. Необходимо указать это свойство в файле application.properties:

camel.component.hashicorp-vault.early-resolve-properties=true

Это включит функцию, и вы сможете разрешить свойства в файле application.properties, например:

foo = hashicorp:secret:database/password#string