Airlock поддерживает self-hosted OpenSearch и Elasticsearch через протокол elastic. Требуется mutual TLS с клиентскими сертификатами.

Предварительные требования

  • Self-hosted OpenSearch или Elasticsearch (управляемые облачные сервисы без поддержки клиентских сертификатов не подходят).
  • Хост для Database Service.
  • Доступ к airctl.

Шаг 1. Join-токен и Database Service

airctl tokens add --type=db --format=text > /tmp/token

sudo airlock db configure create \
  --token=/tmp/token \
  --name=my-opensearch \
  --proxy=airlock.example.com:443 \
  --protocol=elastic \
  --uri=opensearch.example.com:9200 \
  --output file:///etc/airlock.yaml

sudo systemctl enable --now airlock

Шаг 2. Пользователь Airlock

airctl users add --roles=access,db alice

Шаг 3. Role mapping в OpenSearch

Сопоставьте пользователя Airlock с ролью OpenSearch:

curl -u admin:password -X POST "https://opensearch.example.com:9200/_plugins/_security/api/rolesmapping/all_access" \
  -H 'Content-Type: application/json' -d '{
  "users": ["alice"]
}'

Для Elasticsearch используйте API _security/role_mapping/ с правилом по полю username.

Пример для Elasticsearch:

curl -u elastic:password -X POST "https://opensearch.example.com:9200/_security/role_mapping/mapping1?pretty" \
  -H 'Content-Type: application/json' -d '{
  "roles": ["user"],
  "enabled": true,
  "rules": {
    "field": { "username": "alice" }
  }
}'

Шаг 4. Mutual TLS

airctl auth sign --format=elasticsearch --host=opensearch.example.com --out=elastic --ttl=2160h

Файлы elastic.cas, elastic.crt, elastic.key — настройте их в конфигурации кластера.

Для OpenSearch в opensearch.yml:

plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: /path/to/elastic.crt
plugins.security.ssl.http.pemkey_filepath: /path/to/elastic.key
plugins.security.ssl.http.pemtrustedcas_filepath: /path/to/elastic.cas
plugins.security.ssl.http.clientauth_mode: REQUIRE

Для Elasticsearch 7.x+ с X-Pack в elasticsearch.yml:

xpack.security.http.ssl:
  certificate_authorities: /path/to/elastic.cas
  certificate: /path/to/elastic.crt
  key: /path/to/elastic.key
  enabled: true
  client_authentication: required
  verification_mode: certificate

xpack.security.authc.realms.pki.pki1:
  order: 1
  enabled: true
  certificate_authorities: /path/to/elastic.cas

Перезапустите кластер.

Шаг 5. Подключение

airsh login --proxy=airlock.example.com --user=alice
airsh db ls
airsh db connect my-opensearch --db-user=alice

Туннель для GUI-клиентов:

airsh proxy db my-opensearch --db-user=alice --tunnel

Подключите клиент (OpenSearch Dashboards, Elasticvue и т.п.) к http://localhost:<порт>.