惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
O
OpenAI News
B
Blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
博客园 - 司徒正美
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
D
Docker
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hackread – Cybersecurity News, Data Breaches, AI and More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
博客园 - Franky
宝玉的分享
宝玉的分享
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Simon Willison's Weblog
Simon Willison's Weblog
Recorded Future
Recorded Future
T
The Blog of Author Tim Ferriss
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 热门话题
SecWiki News
SecWiki News
I
InfoQ
T
The Exploit Database - CXSecurity.com
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Privacy & Cybersecurity Law Blog
T
Troy Hunt's Blog
Latest news
Latest news
MongoDB | Blog
MongoDB | Blog
T
Tenable Blog
博客园 - 叶小钗
Attack and Defense Labs
Attack and Defense Labs

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как упорядочить работу с секретами в Kubernetes с помощью хранилища секретов
Даниил Рахновский · 2026-06-24 · via Все публикации подряд на Хабре

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

Меня зовут Даниил Рахновский, я ведущий архитектор в Orion soft. В этой статье мы поговорим о том, почему опасно доверять секреты контейнерам, рассмотрим, как упорядочить работу с секретами в Kubernetes с помощью системы управления секретами и какие встроенные инструменты в этом помогают.

Проблемы с безопасностью из-за неосторожного обращения с секретами знакомы многим. Например, можно вспомнить инцидент Uber: в 2016 году злоумышленники получили доступ к приватному репозиторию, нашли access key и использовали его для доступа к данным миллионов пользователей и водителей. У Tesla в 2018 году исследователи обнаружили небезопасно сконфигурированную Kubernetes-консоль. Через нее злоумышленники получили доступ к облачным учетным данным и использовали ресурсы для криптомайнинга, что привело к масштабному криптоджекингу кластера.

Чтобы избежать подобных ситуаций, мы в Orion soft используем StarVault — инструмент для управления секретами на уровне всей контейнерной платформы Nova. Подробнее о том, как устроены эти решения, можно почитать здесь и здесь.

StarVault разворачивается не внутри Kubernetes, а как набор системных сервисов на виртуальных машинах управляющего контура Nova Container Platform. За счет этого хранилище секретов не работает как пользовательская нагрузка Kubernetes и не зависит от состояния Pod, пространств имен и пользовательской плоскости кластера. Для отказоустойчивости StarVault разворачивается в HA-схеме, а его жизненный цикл управляется средствами платформы. Встроенный PKI выдает сертификаты, а секреты компонентов Nova Container Platform хранятся непосредственно в StarVault.

Чтобы аутентификация проходила единообразно, StarVault подключается к корпоративному IdP и выступает OIDC-провайдером/брокером для сервисов платформы. Это позволяет централизованно нормализовать identity-информацию, claims, scopes и группы. При этом сами сервисы всё равно настраиваются как OIDC-клиенты StarVault и используют полученные данные для принятия решений об авторизации.

В выбранной схеме секреты не создаются как Kubernetes Secret и не попадают в etcd: приложение получает их напрямую из StarVault через CSI-том или инжектор. Это снижает поверхность атаки, но не отменяет защиту самого StarVault, токенов ServiceAccount, узлов Kubernetes и приложения после чтения секрета.

Инжекторы

Внутри контейнерной платформы мы используем два вида инжекторов:

  • Vault CSI

  • Banzai Webhook

Vault CSI монтирует секреты как tmpfs-том. Этот метод выбирают, когда приложение умеет читать секреты из файлов, а передавать их через переменные окружения не требуется.

Плюсы:

  • Источником секрета остается StarVault: секрет не создается как Kubernetes Secret и не сохраняется в etcd. В приложение он попадает через смонтированный tmpfs-том.

  • При включенной ротации драйвер CSI обновляет содержимое смонтированного тома. Приложение должно уметь перечитывать файл; иначе потребуется перезапуск или перевыкатка.

  • Для Vault CSI в типовой схеме используются методы аутентификации Kubernetes/JWT через токен ServiceAccount, связанный с Pod.

Минусы:

  • В базовой схеме CSI отдает секреты как файлы. Переменные окружения возможны только через дополнительную синхронизацию в Kubernetes Secret, что возвращает секрет в etcd и требует перезапуска Pod для обновления переменных окружения.

  • Меньше гибкости при передаче секретов в приложение по сравнению с Banzai/Bank-Vaults webhook.

  • CSI-подход не стоит использовать для крупных объектов или большого числа часто обновляемых секретов.

Banzai webhook — второй тип инжектора, который используется в случаях, если вам не подходит Vault CSI. Bank-Vaults mutating webhook изменяет PodSpec и добавляет механизм запуска через vault-env: приложение стартует через обертку vault-env, который во время запуска получает значения из StarVault и подставляет их в окружение процесса. Это не sidecar-паттерн в классическом смысле: секреты не рендерятся постоянным Vault Agent sidecar’ом, а подставляются на старте процесса.

Плюсы:

  • Универсальность. Можно интегрировать любое приложение, потому что инжектор не меняет структуры кода;

  • Поддерживаются методы аутентификации Kubernetes и JWT.

  • Простая интеграция с помощью аннотаций. 

Нюансы:

  • При массовых развертываниях увеличивается задержка на этапе admission

  • Изменение PodSpec происходит на этапе admission при создании или изменении Pod: webhook изменяет PodSpec и настраивает запуск контейнера через vault-env. Если в этот момент webhook недоступен, результат зависит от failurePolicy и timeout. Получение самих значений из StarVault происходит уже при старте контейнера через vault-env, поэтому недоступность StarVault на этом этапе может привести к ошибке запуска приложения. Изменение секрета в хранилище само по себе не обновляет переменные окружения внутри уже запущенного процесса; для этого нужен перезапуск, reloader или другой механизм обновления.

Центральный PKI

Третий компонент системы работы с секретами — это PKI. Мы специально не делали для этого отдельное решение. Просто взяли StarVault и развернули в нем контур PKI. 

Базовая рекомендуемая схема — offline Root CA и online Intermediate CA в StarVault.
Размещение общекорпоративного Root CA внутри StarVault допустимо только как осознанное исключение и требует отдельного описания защиты ключей, unseal-процедур, аудита, резервного копирования, DR и регламента доступа.

Такая схема интеграции PKI дает сразу несколько преимуществ: 

  • cert-manager отвечает за декларативное управление жизненным циклом сертификатов в Kubernetes: создает запросы на выпуск, следит за сроками действия сертификатов и обновляет их в кластере. StarVault при этом остается центром выдачи сертификатов: в нем хранятся роли, политики выпуска, параметры TTL, настройки CRL/OCSP и аудит операций PKI.

  • Меньше отдельных компонентов для эксплуатации: PKI работает через тот же API и тот же операционный контур.

Минусы:

  • При большом числе выданных/отозванных сертификатов растут метаданные PKI и CRL. Для таких сценариев нужно заранее проектировать TTL, CRL/OCSP, бэкенд хранения, резервное копирование и политику ротации;

  • Ресурсная нагрузка: при росте количества запросов на выдачу или отзыв сертификатов Vault будет потреблять больше CPU, поэтому эти ресурсы нужно закладывать заранее.

  • Узкая функциональность UI. В StarVault в основном все делается через API. Это же касается и сертификатов: UI позволяет посмотреть информацию о сертификате и отозвать его, если это необходимо. Все остальное делается через API.

  • Секреты и PKI оказываются в одном операционном контуре и частично в одной точке отказа. Поэтому HA, резервное копирование и восстановление, аудит, unseal-процедуры и DR нужно проектировать заранее.

Как жить в динамической инфраструктуре?

На уровне одного кластера схема выглядит достаточно просто: есть StarVault, есть рабочие нагрузки, есть механизмы доставки секретов через CSI или инжектор, есть PKI и OIDC-интеграции. Но в реальной инфраструктуре редко все заканчивается одним кластером.

Когда команд, сервисов и окружений становится больше, инфраструктура начинает жить динамически. Пользователи запрашивают новые среды, платформенная команда готовит типовые шаблоны, а кластеры Nova Container Platform или автономные Kubernetes-кластеры могут создаваться и сопровождаться через единый управляющий контур. Это уже не задача «как выдать секрет в один Pod», а задача управления секретами, доступами и политиками на уровне множества кластеров и окружений.

Для таких сценариев мы используем HyperDrive — GitOps-платформу для управления жизненным циклом инфраструктуры. HyperDrive не заменяет Nova Container Platform, Kubernetes, StarVault, GitLab или платформу виртуализации. Его задача — связать эти компоненты в единый управляемый процесс: от выбора шаблона и создания кластера до доставки конфигураций, секретов и платформенных компонентов.

Внутри HyperDrive секреты становятся частью общего жизненного цикла  инфраструктуры. Пользователь или внутренний сервис не должен вручную переносить значения между Vault-инстансами, создавать политики в каждом кластере и следить, чтобы секреты не попали в GitOps-манифесты. Этим занимается управляющий контур платформы.

В HyperDrive StarVault работает по модели 1+N. Один основной StarVault находится внутри управляющего контура HyperDrive и используется как центральное хранилище секретов платформы. Для каждого кластера Nova поднимается отдельный локальный StarVault: это может быть как кластер, общий для нескольких команд, так и выделенный кластер, развернутый под конкретную инфраструктурную архитектуру.

Основной StarVault остается источником правды для секретов, которыми управляет HyperDrive. Локальные StarVault-инстансы в кластерах Nova используются для доступа приложений к секретам во время работы и получают только те секреты, политики и настройки доступа, которые нужны конкретному кластеру. Такой подход позволяет не тянуть все обращения приложений в центральный контур HyperDrive и одновременно сохранять централизованное управление секретами.

Важно, что локальный StarVault в кластере Nova — это не полная копия центрального хранилища. В него доставляются только выбранные пути KV v2 и только в рамках заданной политики синхронизации. Это снижает зону влияния возможной ошибки или компрометации: кластер получает доступ к тем секретам, которые нужны его приложениям, а не ко всему хранилищу платформы.

За управление жизненным циклом секретов отвечает управляющий контур HyperDrive. Он хранит метаданные секрета: идентификатор, путь в хранилище, точку монтирования, тип, область применения, владельца, статус и параметры синхронизации. Значение секрета при этом не хранится в базе управляющей системы и не рендерится в GitOps-манифесты. Само значение секрета хранится в StarVault KV v2.

StarVault-wrapper в этой схеме выступает плоскостью выполнения для работы с Vault-инстансами. Он регистрирует кластеры и локальные StarVault-инстансы, настраивает целевые пути синхронизации, копирует выбранные KV v2-секреты из основного StarVault в локальные StarVault-инстансы, а также создает политики доступа и роли аутентификации Kubernetes для приложений.

Жизненный цикл выглядит так. При создании секрета управляющий сервис HyperDrive записывает значение в основной StarVault и сохраняет только его метаданные. Если секрет должен быть доступен в конкретном кластере Nova, для него создается политика синхронизации: целевой кластер или группа StarVault-инстансов, точка монтирования  и путь назначения. После этого StarVault-wrapper выполняет синхронизацию: читает значение из основного StarVault и записывает его в нужный локальный StarVault.

Когда приложение в Kubernetes должно получить доступ к секрету, StarVault-wrapper создает минимально необходимые политики доступа Vault и роли аутентификации Kubernetes. Эти роли привязываются к конкретным пространствам имен и ServiceAccount, поэтому приложение получает доступ только к тем путям, которые ему действительно нужны. В GitOps при этом остаются ссылки, идентификаторы и параметры доступа, но не сами значения секретов.

Такой подход удобен для динамической инфраструктуры: новый кластер можно создать через HyperDrive по заданному шаблону, связать с локальным StarVault, применить нужные политики синхронизации и довести доступы до требуемого состояния автоматически. Командам не нужно вручную переносить секреты, заводить политики доступа в каждом Vault-инстансе и проверять, что значения не утекли в GitOps.

При этом синхронизацию нельзя путать с резервным копированием. StarVault-wrapper синхронизирует только явно выбранные пути KV v2 и не заменяет резервное копирование, восстановление и процедуры аварийного восстановления самого хранилища. Основной StarVault остается источником правды для управляемых секретов, а локальные изменения на синхронизируемых путях ограничиваются политиками доступа. Это позволяет избежать конфликтов записи и предсказуемо восстанавливать локальные StarVault-инстансы до последней успешно зафиксированной версии.

В результате HyperDrive управляет не набором разрозненных Vault-инсталляций, а целой моделью доставки секретов: основной StarVault хранит значения секретов и остается источником правды, локальные StarVault-инстансы обслуживают приложения в кластерах Nova, а StarVault-wrapper связывает эти уровни между собой и приводит доступы к нужному состоянию.

Заключение

Система управления секретами позволяет решить многие задачи в сфере управления секретами и организации безопасного доступа как на небольших, так и на масштабных территориально-распределенных инсталляциях. Если у вас уже есть опыт работы со StarVault или остались вопросы по работе компонентов, ждем в комментариях.