ВозможностиДокументацияЦеныPlaygroundFAQ

Хранилище секретов

Хранилище секретов с шифрованием AES-256-GCM

Обзор

Secrets stores sensitive data (API keys, passwords, tokens) encrypted at rest. Uses AES-256-GCM encryption with rotation support. Requires FLOWLINK_SECRETS_KEY environment variable.

Детали шифрования

  • Algorithm: AES-256-GCM (Galois/Counter Mode)
  • Key derivation: PBKDF2 with 100k iterations
  • Key rotation: Каждые 30 дней (настраивается)
  • Tags: Организуйте секреты по сервисам/командам

Переменная окружения

bash
# Required for Secrets API
export FLOWLINK_SECRETS_KEY="your-32-byte-base64-key-here"

# Generate a strong key
openssl rand -base64 32

API эндпоинты

bash
# Create secret
POST /api/v1/secrets
Body: {
  "name": "stripe-api-key",
  "value": "sk_live_...",
  "tags": ["payment", "stripe"]
}

# List secrets (with partial values)
GET /api/v1/secrets

# Get secret (requires authentication)
GET /api/v1/secrets/{id}

# Update secret
PATCH /api/v1/secrets/{id}

# Rotate secret (generates new encrypted value)
POST /api/v1/secrets/{id}/rotate

# Delete secret
DELETE /api/v1/secrets/{id}

Модель секрета

bash
{
  "id": "sec_abc123",
  "name": "stripe-api-key",
  "value_encrypted": "AEsDBBQABgAIAAAAI...",
  "tags": ["payment", "stripe"],
  "created_at": "2026-04-21T20:00:00Z",
  "last_rotated_at": "2026-04-21T20:00:00Z",
  "rotation_days_remaining": 25,
  "version": 1
}

Примеры запросов

bash
# Create secret
curl -X POST https://flowlink.flow-masters.ru/api/v1/secrets \
  -H "Authorization: Bearer flk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "telegram-bot-token",
    "value": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
    "tags": ["bot", "telegram"]
  }'

# List secrets (partial values)
curl https://flowlink.flow-masters.ru/api/v1/secrets

# Get specific secret
curl https://flowlink.flow-masters.ru/api/v1/secrets/sec_abc123

# Rotate secret (creates new version)
curl -X POST https://flowlink.flow-masters.ru/api/v1/secrets/sec_abc123/rotate

# Delete secret
curl -X DELETE https://flowlink.flow-masters.ru/api/v1/secrets/sec_abc123

Tags

Используйте теги для организации секретов:

paymentdatabaseapibotthird-partyinternal

Инъекция секретов (Secret Injection)

Secret Injection автоматически подставляет секреты из хранилища в команды AI-агентов в виде переменных окружения — без раскрытия plaintext-значений LLM. Агент знает только имена переменных, но никогда не видит их содержимое.

Как это работает

1. Вы создаёте Secret Mapping: связываете секрет из хранилища с именем env-переменной и (опционально) метками агента.

2. AI-агент вызывает команду через MCP.

3. Relay перехватывает вызов и запускает inject_for_exec().

4. Relay определяет подходящие маппинги по меткам агента и команды.

5. Совпадающие секреты расшифровываются и внедряются как env-переменные в payload команды.

6. LLM никогда не получает plaintext — только имена env-переменных.

Тарифные ограничения

ФункцияStarterProBusiness
Env-переменные
Монтирование файлов
HashiCorp Vault

API маппингов

bash
# Create mapping
POST /api/secrets/mappings
Body: {
  "secret_id": "sec_abc123",
  "env_var_name": "STRIPE_API_KEY",
  "agent_labels": ["billing"],
  "mount_path": null,
  "enabled": true
}

# List mappings
GET /api/secrets/mappings

# Update mapping
PATCH /api/secrets/mappings/{id}

# Delete mapping
DELETE /api/secrets/mappings/{id}

Примеры запросов

bash
# Create mapping
TOKEN="flk_live_..."

# Link a vault secret to an env var for the "billing" agent
curl -X POST https://flowlink.flow-masters.ru/api/secrets/mappings \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "secret_id": "sec_abc123",
    "env_var_name": "STRIPE_API_KEY",
    "agent_labels": ["billing"],
    "enabled": true
  }'

# List all mappings
curl https://flowlink.flow-masters.ru/api/secrets/mappings \
  -H "Authorization: Bearer $TOKEN"

# Update a mapping (e.g. disable it)
curl -X PATCH https://flowlink.flow-masters.ru/api/secrets/mappings/mp_xyz \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": false }'

# Delete a mapping
curl -X DELETE https://flowlink.flow-masters.ru/api/secrets/mappings/mp_xyz \
  -H "Authorization: Bearer $TOKEN"

Безопасность

  • Аудит без значений: логи содержат имя маппинга и env-переменной, но не plaintext-значение секрета.
  • Изоляция агентов: маппинги фильтруются по меткам — агент получает только свои секреты.
  • Ограничение по организации: маппинги доступны только в рамках организации (org-scoped).
  • LLM никогда не видит plaintext — инъекция происходит на уровне relay, после формирования ответа LLM.

Управлять маппингами можно через Dashboard → Secrets → вкладка «Mappings».

Политика ротации

Автоматическая ротация каждые 30 дней:

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

Zero-Trust Architecture

Секреты защищены даже при полной компрометации relay-сервера. Relay не имеет ключей расшифровки и не может прочитать секреты ни при каких обстоятельствах.

УгрозаЗащита
Root на relay-сервереНет ключей расшифровки — relay видит только ciphertext
Доступ к VaultResponse wrapping + limited AppRole с минимальным TTL
Перехват agent ↔ relayE2EE: per-org X25519 ключи, relay не знает private key
Перехват relay ↔ VaultmTLS + response wrapping (одноразовый token)
Скомпрометирован агентAgent-scoped keys + audit trail + approval workflow
Insider (relay admin)Zero knowledge — relay никогда не видит plaintext

Per-org ключи шифрования

1. Каждая организация генерирует свой X25519 keypair.

2. Публичный ключ загружается в relay (OrgSecretConfig).

3. Приватный ключ НИКОГДА не покидает машину админа/агента.

4. Все секреты шифруются публичным ключом org.

5. Расшифровка возможна только с приватным ключом (у агента).

Подключение внешнего Vault организации

Организация может подключить свой собственный HashiCorp Vault. FlowLink не хранит и не видит секреты — только перенаправляет зашифрованные запросы.

Поддерживаемые методы аутентификации

  • AppRoleрекомендуется для M2M
  • JWT/OIDCагент аутентифицируется через IdP
  • Kubernetesдля агентов в K8s (service account)
  • TLS Certificatesвзаимная аутентификация

🛡️ Дополнительная защита

  • mTLSклиентский сертификат зашифрован org key
  • Response Wrappingодноразовый token, TTL 5 мин
  • Scoped AppRoleминимальные права, auto-rotate TTL
  • CA Pinningверификация сертификата Vault

Flow подключения внешнего Vault

1. Админ генерирует org keypair: flowlink keygen --org

org_public_key (загружается в relay)

org_private_key (остаётся у админа, НИКОГДА не на relay)

2. Админ настраивает Vault с auth, mTLS, response wrapping

3. Agent получает org_private_key через:

Secure channel (админ вручную)

KMS (AWS KMS, GCP KMS)

Sealed Secrets (Kubernetes)

4. Готово — relay видит только ciphertext

🔒 Гарантия Zero-Trust

Даже если злоумышленник получит root-доступ к relay-серверу и доступ к базе данных — он не сможет расшифровать секреты организаций. Приватные ключи находятся только у агентов/админов, а AppRole токены зашифрованы org-ключом.

API: настройка

bash
# Generate org keypair (on admin machine)
flowlink keygen --org
# → org_public_key (base64, upload to relay)
# → org_private_key (KEEP LOCALLY, NEVER upload)

# Upload public key to relay
curl -X POST https://flowlink.flow-masters.ru/api/orgs/$ORG_ID/secrets/config/key-setup \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"org_public_key": "BASE64_PUB_KEY"}'

# Configure external Vault
curl -X POST https://flowlink.flow-masters.ru/api/orgs/$ORG_ID/secrets/config/vault-setup \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "address": "https://vault.company.com:8200",
    "auth": {"method": "approle", "role_id": "xxx", "encrypted_secret_id": {...}, "secret_id_ttl": "24h"},
    "mount_path": "flowlink",
    "ca_cert_pem": "-----BEGIN CERTIFICATE-----...",
    "mtls": {"encrypted_client_cert": {...}, "encrypted_client_key": {...}, "server_name": "vault.company.com"},
    "response_wrapping": true
  }'

# Check zero-trust configuration
curl https://flowlink.flow-masters.ru/api/orgs/$ORG_ID/secrets/config \
  -H "Authorization: Bearer $TOKEN"
# → {"zero_trust_verification": {"relay_can_decrypt": false, ...}}

Secret Discovery (Auto)

NEW

Автоматическое обнаружение секретов на серверах — БД, мониторинг, Docker, Kubernetes. Агент сканирует конфиги и env-переменные, шифрует результаты (E2EE) и отправляет на relay. Администратор проверяет и одобряет — секреты автоматически попадают в Vault.

Pipeline

🔍

Scan

Сервисы, конфиги, .env

🔐

Encrypt

E2EE X25519+AES256

👁️

Review

Dashboard без значений

🏦

Store

Vault / encrypted DB

Что обнаруживается

🐘 PostgreSQL

pg_hba.conf, .pgpass, DATABASE_URL

🐬 MySQL/MariaDB

my.cnf, ~/.mylogin.cnf

🔴 Redis

redis.conf, requirepass

🍃 MongoDB

mongod.conf, MONGO_URI

🌴 Cassandra

cassandra.yaml

🪳 CockroachDB

cockroach.conf

⏱️ InfluxDB

influxdb.conf

🔶 ClickHouse

config.xml

🔮 Neo4j

neo4j.conf

🛋️ CouchDB

local.ini

TimescaleDB

postgresql.conf

🏗️ MSSQL

mssql.conf

🔮 Oracle

tnsnames.ora

🐦 Firebird

firebird.conf

🔍 QuestDB

conf/server.conf

🐰 RabbitMQ

rabbitmq.conf

📊 Kafka

server.properties

🦅 NATS

nats-server.conf

🐝 ActiveMQ

activemq.xml

💫 Pulsar

broker.conf

📡 EMQX

emqx.conf

🦟 Mosquitto

mosquitto.conf

📈 Prometheus

prometheus.yml

📉 Grafana

grafana.ini

🔔 Zabbix

zabbix.conf

👁️ Nagios

nagios.cfg

🐕 Datadog

datadog.yaml

🪵 Loki

loki.yml

⏲️ Tempo

tempo.yml

🔫 Jaeger

jaeger.yml

🦅 Sentry

sentry.conf.py

Telegraf

telegraf.conf

🚨 Alertmanager

alertmanager.yml

🏆 VictoriaMetrics

vmagent.yml

🔎 Elasticsearch

elasticsearch.yml

📊 Kibana

kibana.yml

🪵 Logstash

logstash.yml

💧 Fluentd

fluent.conf

📄 Filebeat

filebeat.yml

🟢 Nginx

nginx.conf

🔺 Apache

httpd.conf

🟢 Caddy

Caddyfile

🔄 Traefik

traefik.yml

HAProxy

haproxy.cfg

🛡️ Envoy

envoy.yaml

🐳 Docker

config.json, .env, compose

☸️ Kubernetes

kubeconfig, secrets

📦 Portainer

portainer.json

🏗️ Nomad

nomad.hcl

🌐 Consul

consul.json

🔑 etcd

etcd.conf.yml

🏦 HashiCorp Vault

vault.hcl

🔧 Jenkins

credentials.xml

🦊 GitLab

gitlab.rb, .gitlab-ci.yml

🍵 Gitea

app.ini

💾 MinIO

config.json

🐙 Ceph

ceph.conf

🔍 Solr

solrconfig.xml

Meilisearch

config.toml

🎯 Typesense

typesense.ini

🔑 Keycloak

keycloak.json

🛡️ Authelia

config.yml

🔐 LDAP

slapd.conf

💾 Memcached

memcached.conf

📊 Metabase

metabase.db

📈 Superset

superset_config.py

✉️ Postal

postal.yml

📮 Postfix

main.cf

🔒 WireGuard

wg0.conf

🌐 Tailscale

tailscaled

🔗 ZeroTier

local.conf

☁️ AWS

credentials, config

☁️ GCP

application_default_credentials.json

☁️ Azure

azureProfile.json

🌐 CoreDNS

Corefile

🌐 Pi-hole

setupVars.conf

🐘 pgAdmin

config.py

🗃️ Adminer

adminer.php

🦍 Kong

kong.yml

KrakenD

krakend.json

API

bash
# Start discovery scan on an agent (org owner/admin only)
curl -X POST https://flowlink.flow-masters.ru/api/orgs/{org_id}/discovery/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "agent-abc123",
    "scope": {
      "directories": ["/etc", "/opt", "/home"],
      "file_types": ["env", "conf", "yml", "json"],
      "service_types": ["postgres", "redis", "docker"],
      "exclude_paths": ["/proc", "/sys"]
    }
  }'

# List discovery results
curl https://flowlink.flow-masters.ru/api/orgs/{org_id}/discovery/results \
  -H "Authorization: Bearer $TOKEN"

# Approve secrets for vault storage
curl -X POST https://flowlink.flow-masters.ru/api/orgs/{org_id}/discovery/{scan_id}/approve \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "secret_ids": ["sec_1", "sec_2"] }'

# Check Vault connectivity
curl https://flowlink.flow-masters.ru/api/orgs/{org_id}/vault/health \
  -H "Authorization: Bearer $TOKEN"

Безопасность

  • <strong className="text-white">Только для владельца/администратора</strong> — только владелец или администратор организации может запускать сканирование и одобрять секреты.
  • <strong className="text-white">Явный opt-in</strong> — агент никогда не сканирует автоматически. Администратор задаёт scope: какие директории и сервисы.
  • <strong className="text-white">E2EE шифрование</strong> — результаты шифруются на агенте (X25519 + AES-256-GCM). Relay видит только ciphertext + метаданные.
  • <strong className="text-white">Approval workflow</strong> — найденные секреты показываются без значений (только key_name + value_hash). Админ выбирает что записать в Vault.
  • <strong className="text-white">Полный audit trail</strong> — каждый запуск, одобрение и запись в Vault логируется с integrity hash chain.
  • <strong className="text-white">AI-агент НЕ может запустить discovery</strong> — это привилегированная операция для DevSecOps/администратора.

Иерархия в Vault

text
secret/data/
  └── {org_id}/
        └── {host}/
              ├── postgres/    → DB_PASSWORD, DATABASE_URL, PG_HOST
              ├── redis/       → REDIS_URL, REDIS_PASSWORD
              ├── docker/      → API_KEY, REGISTRY_TOKEN
              ├── prometheus/  → PROMETHEUS_URL, ALERTMANAGER_KEY
              └── monitoring/  → GRAFANA_API_KEY, ZABBIX_TOKEN

💡 Ручное + автоматическое

Secret Discovery дополняет ручное управление секретами. Секреты, добавленные вручную через Dashboard, и секреты, обнаруженные автоматически через Discovery, хранятся в одном Vault и инжектятся агентам одинаково.