Доставка по identity
Сервис аутентифицируется сам — client credentials или одноразовый enrollment-токен. Повторный обмен токена означает утечку, поэтому он не просто отклоняется, а поднимает тревогу.
Ни SCP по серверам, ни переменных в настройках CI, ни копии в чужом менеджере паролей. При старте сервис сам получает значения по доверенной machine identity — а каждое чтение остаётся в журнале.
import { EnvMasterClient } from "@env-master/sdk";
const em = new EnvMasterClient({
baseUrl: process.env.ENVMASTER_URL,
project: "billing-api",
environment: "production",
});
await em.loginMachine({
clientId: process.env.ENVMASTER_CLIENT_ID,
clientSecret: process.env.ENVMASTER_CLIENT_SECRET,
});
const password = await em.get("DB_PASSWORD");DB_PASSWORD••••••••••••PAYMENT_TOKEN••••••••••••LOG_LEVELdebugMACHINE_ONLY_KEYrestrictedПеременные видны сразу, секреты — по явному запросу с записью в аудит, а restricted не показывается человеку вовсе.
Проект, окружения dev/staging/prod и записи в них — переменные видны, секреты скрыты до явного запроса.
Machine identity привязана к окружению и, если нужно, к набору ключей. Секрет показывается один раз — дальше только его хэш.
SDK забирает значения при старте и держит их в памяти процесса. Ротация перестаёт быть событием: сервис читает актуальное значение сам.
Мы защищаем периметр и честно говорим, где он проходит: в покое хранится только шифртекст, но живой процесс сервера видит значения в момент обработки. Слова «zero-knowledge» здесь не будет.
Сервис аутентифицируется сам — client credentials или одноразовый enrollment-токен. Повторный обмен токена означает утечку, поэтому он не просто отклоняется, а поднимает тревогу.
Значение под data key окружения, data key под корневым ключом. Машине ключ выдаётся обёрнутым x25519 под её identity — расшифровка идёт на клиенте.
create → set → test → finish. Новое значение становится текущим только после успешной проверки, до этого лежит под меткой pending и переживает падение.
Два потока — изменения и доступы, связанные хеш-цепочкой. В журнал попадают имена ключей и HMAC значения, но никогда само значение.
Identity ограничивается проектом, окружением и списком ключей: сервису биллинга можно выдать DB_*, а не всё окружение целиком.
Лента аудита, тревоги и подтверждения с телефона: доступ к проду подтверждается там, где вы есть, а не там, где открыт ноутбук.
Регистрация, проект, ключи — и identity для первого сервиса. Бесплатный план не урезан по безопасности: шифрование, ротация и аудит работают с первой минуты.