Представьте себе такую ситуацию. Вы создаете приложение, и вам нужен API-ключ для подключения к сервису, пароль от базы данных или ключ учетной записи хранения. Вы добавляете его прямо в код, например, в файл конфигурации или переменную окружения. Все работает отлично, пока вы не отправляете этот код на GitHub или не делитесь ноутбуком с коллегой. И в этот момент ваш секрет перестает быть секретом. Если этот код попадет в чужие руки, вся ваша система окажется под угрозой. Azure Key Vault — это инструмент, который решает данную проблему. Он предоставляет безопасное место для хранения секретов, чтобы они никогда не попадали в ваш код. Но вот в чем большинство людей ошибается. Простое наличие Key Vault не делает вас защищенными автоматически. То, как вы его настраиваете, контролируете доступ и назначаете права, имеет такое же важное значение. К концу этого выпуска вы узнаете, что такое Key Vault, что в нем можно хранить, как работает доступ и в чем главная ошибка, из-за которой ваши секреты могут оказаться открыты. Все простыми словами, без жаргона, только самая суть. Итак, что же такое Azure Key Vault? Что такое Azure Key Vault? Вот самое простое определение. Azure Key Vault — это облачный цифровой сейф для ваших секретов. Это управляемый сервис от Microsoft для хранения API-ключей, паролей BD, строк подключения, ключей шифрования и сертификатов в одном централизованном месте. Вам не нужно беспокоиться об инфраструктуре, потому что Azure берет на себя исправление, время бесперебойной работы и безопасность. Вы просто им пользуетесь. Представьте себе офисные здания. У вас есть рабочие места, переговорные и шкафы для документов, но где-то в подвале есть защищенное хранилище, где лежат важные вещи. Мастер-ключи, наличные, юридические документы. Никто не войдет туда без разрешения и аутентификации. И каждый раз, когда кто-то открывает дверь, это фиксируется в журнале. Это и есть Key Vault — защищенная комната в подвале вашей архитектуры Azure. А теперь сравните это со старым методом. 20 лет назад, если вам нужен был пароль от базы данных, вы жестко прописывали его в конфиг-файле, переменное окружение или, что еще хуже, оставляли в открытом виде в исходном коде. Если кто-то получал доступ к серверу, у него было все. И если вам нужно было сменить пароль, приходилось обновлять его повсюду. В каждом файле конфигурации, каждой среде, каждом развертывании. Это был настоящий кошмар. Key Vault меняет все это. Вместо того, чтобы разбрасывать секреты по коду и конфигам, вы храните их в одном центральном месте. Ваши приложения запрашивают их во время выполнения, только когда они им действительно нужны. А поскольку все централизовано, вы можете обновить секрет в одном месте, и каждое приложение, которое его использует, автоматически получит новое значение без изменения кода или повторного развертывания. Но вот в чем дело. Key Vault — это не просто менеджер паролей для ваших приложений. Это ключевая служба безопасности. Любая служба Azure может интегрироваться с ней. App Service, функции, AKS, Data Factory, Synapse, Logic Apps, конвейеры DevOps — все они умеют взаимодействовать с Key Vault. Это становится основой вашей безопасной облачной архитектуры. И как только вы правильно все настроите, вы полностью перестанете думать об управлении учетными данными. Что можно хранить? Теперь, когда вы знаете, что такое Key Vault, давайте поговорим о том, что именно можно в него поместить. Есть три основные категории — секреты, ключи и сертификаты. Каждая из них выполняет свою задачу, и понимание разницы поможет вам правильно использовать Key Vault. Начнем с секретов. Это то, что люди хранят чаще всего. Секреты — это строки подключения, ключи API, пароли баз данных, ключи учетных записей хранения, в общем, все повседневные учетные данные, необходимые вашим приложением для связи с другими службами. Вместо того, чтобы вставлять их в свой код или файл конфигурации, вы помещаете их в Key Vault. Ваше приложение получает их во время выполнения, и никто никогда не видит их в открытом виде. Представьте это как запертый ящик в вашем цифровом картотечном шкафу. Далее идут ключи. Это ключи шифрования для неактивных данных. Если вы используете ключи, управляемые клиентом, для хранилищ Azure, баз данных SQL или шифрования дисков виртуальных машин, эти ключи могут храниться в Key Vault. Это дает вам полный контроль над тем, кто и когда может их использовать. А если для соответствия требованиям вам нужны ключи на аппаратном уровне, тарифный план Premium обеспечит защиту с помощью HSM. Затем у нас есть сертификаты. TLS и SSL — сертификаты для ваших веб-приложений, API и внутренних служб. Key Vault может хранить их, управлять их жизненным циклом и даже автоматически продлевать их, когда срок действия подходит к концу. Это спасение для любого, у кого хоть раз истекал срок действия сертификата в 3 часа ночи в воскресенье. Вот реальный пример. Представьте, что у вас есть веб-приложение, которому нужна строка подключения к базе данных и ключ API для стороннего сервиса. По старинке вы бы поместили это и другое в JSON-файл настроек приложения. Скорее всего, если этот файл попадет в ваш репозиторий, любой, у кого есть доступ к коду, сможет увидеть учетные данные вашей базы данных. С Key Vault вы храните оба значения как секреты. Ваше приложение получает их при запуске, и они никогда не появляются в исходном коде. Нужно сменить пароль базы данных. Обновите его в Key Vault. Приложение автоматически получит новое значение при следующем перезапуске. Никаких изменений кода или повторных развертываний, что часто застает людей врасплох, так это встроенное управление версиями. При обновлении секрета Key Vault не перезаписывает старое значение. Он создает новую версию. Старые версии сохраняются, поэтому вы можете откатиться, если что-то пойдет не так. Это невероятно удобно во время инцидентов. Вы можете быстро вернуться к предыдущему секрету, не вспоминая, каким было старое значение. Вы можете хранить все три типа данных – секреты, ключи и сертификаты – в одном хранилище. Но лучшая практика – разделять их по средам. Имейте одно хранилище для разработки, одно для тестирования и одно для производства. Это предотвращает случайное использование производственного секрета в среде разработки и ограничивает масштаб ущерба при компрометации хранилища. Но хранение секретов – это лишь часть дела. Главный вопрос в том, кто получает к ним доступ. Как работает управление доступом? А теперь давайте поговорим о том, кто получает доступ. В Key Vault есть два способа контроля доступа, и ваш выбор имеет большое значение. Первая модель – это устаревшие политики доступа. Это старый подход. Вы создаете политики непосредственно в хранилище и назначаете разрешение конкретным пользователям или группам для определенных типов данных, секретов, ключей или сертификатов. Проблема в том, что эти политики привязаны непосредственно к хранилищу. Если у вас несколько хранилищ, вам придется управлять политиками в каждом из них отдельно. Это плохо масштабируется. Microsoft теперь не рекомендует их использовать, так как они имеют известные проблемы с безопасностью. Они не поддерживают управление привилегированными удостоверениями и могут создавать пути для неожиданного повышения привилегий. Вторая модель – это Azure RBAC – управление доступом на основе ролей. Это современный подход. Он использует удостоверение IntraID и соответствует тому, как вы управляете разрешениями везде в Azure. Если вы уже знаете, как предоставить доступ к учетной записи хранения или виртуальной машине, вы уже знаете, как предоставить доступ к Keywall. Та же система, те же шаблоны. Вот золотое правило – принцип наименьших привилегий. Предоставляйте только тот минимум доступа, который нужен, и ничего больше. Если кому-то нужно только читать секреты, не давайте ему право на их создание или удаление. Если кому-то нужно только управлять сертификатами, не давайте ему доступ к ключам. Позвольте мне рассказать об основных ролях. У вас есть роль – читатель Keywall. Она позволяет просматривать список секретов, но не читать их значения. Роль – пользователь секретов Keywall. Она позволяет пользователю считывать значения секретов. И роль – администратор секретов Keywall. Она позволяет создавать, обновлять и удалять секреты. Заметьте закономерность. Каждая роль относится к данным внутри хранилища, а не к самому хранилищу. Теперь сравните это с общими ролями – владелец, участник, читатель. Они применяются к хранилищу как к ресурсу, а не к данным внутри него. Владелец может удалить хранилище целиком. Участник может изменять настройки хранилища. Однако, ни одна из этих ролей сама по себе не дает доступа к секретам внутри. Это отдельный уровень разрешений, и это ключевой момент. Контроль доступа – это многоуровневая структура. Вам нужен доступ к самому хранилищу – это первый уровень, и доступ к данным внутри него – это второй уровень. Оба должны предоставляться отдельно. Большинство новичков думают только о первом уровне и забывают о втором. С этого и начинаются проблемы. Главная ошибка в вопросах безопасности. Вот в чем дело. Многие смотрят на роль участник Key Vault и считают ее безопасной. Они видят слово «участник» и предполагают, что могут управлять настройками хранилища, но не трогать секреты внутри. В документации Microsoft изначально было сказано именно это. Эта роль не дает доступа к секретам, ключам или сертификатам. Но это не совсем так. Пользователь с ролью «участник Key Vault» может изменять политики доступа к хранилищу. И если в хранилище все еще используются устаревшие политики доступа, что встречается часто, они могут просто предоставить себе полный доступ на чтение ко всем секретам, ключам и сертификатам. Никаких специальных эксплойтов или уязвимости для исправления. Так работают эти разрешения. Исследователи безопасности из Datadoc доказали, это в 2024 году. Они показали, что участник может получить полный доступ к данным в любом хранилище с устаревшими политиками. Реакция Microsoft была интересной. Они заявили, что это неуязвимость, так как участники предназначены для управления политиками, но обновили документацию, явно предупредив, что эта роль позволяет дать себе доступ к плоскости данных. Таким образом, это не ошибка в самом Key Vault, а конфигурационная ловушка. И на нее попадаются даже опытные команды, потому что название роли звучит безобидно. Участник не звучит, как кто-то. Кто может прочитать пароли от вашей базы данных? Но на практике это возможно. Подумайте о рисках. Если злоумышленник скомпрометирует учетную запись с ролью «участник» в вашем Key Vault, ему не нужно взламывать само хранилище. Ему не нужно взламывать шифрование. Он просто меняет политику доступа, предоставляет себе права на чтение и незаметно крадет все ваши секреты, строки подключения, API-ключи, сертификаты, все целиком. И поскольку изменение политики доступа является обычной административной задачей, это может не вызвать никаких оповещений. Так как же это исправить? Во-первых, используйте Azure RBAC для доступа к плоскости данных вместо устаревших политик. RBAC разделяет управление хранилищем и данные, находящиеся внутри него. Во-вторых, никогда не давайте роль участника Key Vault тем, кому она не требуется. В-третьих, если у вас уже есть пользователи с такой ролью, проверьте их сегодня же. Замените роль участника на более специфичные, например, пользователь секретов или сотрудник по работе с секретами. Существует вторая ошибка, усугубляющая первую – хранение всех секретов в одном хранилище. Если у вас одно хранилище для всего разработки, тестов, стайджинга, продакшена и всех приложений, то при его взломе под угрозой окажется все. Это единая точка отказа. Мы еще поговорим о стратегии с несколькими хранилищами, но принцип прост. Не кладите все яйца в одну корзину, особенно когда в этой корзине хранятся ключи от всей вашей инфраструктуры. Управляемое удостоверение – золотой стандарт. Итак, как сделать это правильно? Давайте обсудим лучший способ доступа к Key Vault. Здесь есть фундаментальная проблема. Чтобы получить учетные данные из Key Vault, приложению нужно аутентифицироваться, а для аутентификации нужны учетные данные. Где хранить учетные данные, которые приложение использует для получения других учетных данных? Это классическая проблема – курица и яйца. Старым решением был сервисный субъект с секретом клиента, но этот секрет должен где-то храниться в файле конфигурации, в переменных окружениях или в конвейере развертывания. И теперь вы вернулись к той же самой проблеме. Вы просто переместили секрет в другое место. Управляемое удостоверение полностью решает эту задачу. Вот как это работает. Когда вы включаете управляемое удостоверение для ресурса Azure, например, веб-приложение, функции или виртуальной машины, Azure автоматически создает удостоверение в IntraID. Это удостоверение полностью управляется самим Azure. Не нужно создавать учетные данные, обновлять секреты или что-то хранить. У ресурса просто появляется удостоверение, о котором знает Azure. Существует два типа. Управляемое удостоверение, назначаемое системой, привязано к конкретному ресурсу. Если вы удалите ресурс, удостоверение также исчезнет. У них общий жизненный цикл, что упрощает администрирование. Управляемое удостоверение, назначаемое пользователем, это самостоятельное удостоверение, которое можно назначить нескольким ресурсом. У него нет общего жизненного цикла с ними, поэтому оно удобно, когда одно удостоверение нужно для нескольких сервисов. Вот как это выглядит на практике. У вас есть веб-приложение, которому нужно прочитать строку подключения к базе данных из KeyVault. Вы включаете системное управляемое удостоверение для этого веб-приложения. Затем вы предоставляете этому удостоверению роль пользователь секретов KeyVault для вашего хранилища. Вот и все. Никаких строк подключения в коде, никаких секретов клиента в файлах конфигурации. Веб-приложение удостоверения, а Азур берет на себя все управление учетными данными. Это максимально близкий к беспарольной аутентификации вариант в Азур. Это настоящий прорыв в безопасности, так как устраняется самый частый вектор атаки – кражи учетных данных. Если красть нечего, то злоумышленнику нечего и взламывать. Позвольте привести пример из реальной практики. Представьте конвейер данных в синапс, которому нужен доступ к учетной записи хранения. Раньше вы сохраняли ключ доступа к хранилищу прямо в настройках конвейера. Если кто-то получал доступ к этому конвейеру, он получал и ключ. С управляемым удостоверением у рабочей области синапс есть свое собственное удостоверение. Этому удостоверению предоставляется доступ к Key Vault, где хранится ключ учетной записи хранения. Конвейер получает ключ во время выполнения, использует его и нигде не сохраняет. Никаких ключей в коде, никаких секретов в настройках конвейера. Сочетая управляемое удостоверение с RBC и принципом наименьших привилегий, вы создаете безопасную основу для любой рабочей нагрузки в Азур. Ваше приложение проходит проверку подлинности без использования паролей. Они получают доступ только к тому, что нужно, а каждое действие логируется и подлежит проверке. Это стандарт, который Microsoft рекомендует практически для любого сценария. Начав использовать этот подход, вы удивитесь, почему делали это иначе раньше. Стоимость и стратегия использования нескольких хранилищ. Итак, давайте поговорим о стоимости. Здесь большинство людей ждет сюрприз. Сколько на самом деле стоит Азур Key Vault? Модель ценообразования проста. Нет платы за хранение каждого отдельного секрета. Вы не платите за каждый пароль или API-ключ, который храните. Вместо этого вы платите за операцию. Для стандартного уровня это около 3 центов за каждые 10 тысяч операций. Запрос на получение секрета считается за одну операцию. То же самое касается создания секрета или просмотра содержимого хранилища. Для обычного малого или среднего приложения это выливается в сущие копейки в месяц. Буквально копейки. Сравните это с AWS Secretus Manager. Они взимают 40 центов за секрет в месяц только за хранение. Плюс дополнительная плата за вызовы API. Если у вас 100 секретов, это 40 долларов в месяц еще до того, как вы прочитаете хотя бы один из них. С Азур Key Vault 100 секретов при умеренном использовании могут обойтись вам в 15 центов. При масштабировании разница растет очень быстро. Существует также премиум уровень. Он добавляет ключи на базе HSM для нагрузок, требующих высочайшего уровня криптографической защиты. Например, финансовые транзакции, медицинские данные, государственные системы. Стоимость за операцию там выше около 15 центов за 10 тысяч операций для продвинутых типов ключей. Плюс ежемесячная плата за каждый HSM-ключ. Но для большинства приложений стандартного уровня более чем достаточно. А вот и ценовой сюрприз, который застает многих врасплох. Для типичного веб-приложения с парой секретов и несколькими тысячами операций в месяц Key Vault стоит меньше доллара. Вы потратите больше на кофе, пока будете его настраивать. Но есть стратегия, которая важнее стоимости. Сколько хранилищ вы используете? Разумный подход – это стратегия с несколькими хранилищами. Используйте отдельные хранилища для разработки, тестирования, промежуточный и рабочий сред. Это предотвращает самую частую ошибку. Кто-то запускает тестовый скрипт, который случайно считывает рабочую базу данных, потому что строка подключения была в том же хранилище. Когда среды разделены, такая ошибка становится невозможной. Вам также следует разделять их по бизнес-подразделениям или областям соответствия требованиям. Если вы работаете с данными платежных карт, поместите эти секреты в отдельное хранилище. Общие бизнес-задачи – в другое, данные здравоохранения – в третье. Это не усложнение работы, а ограничение радиуса поражения. Если одно хранилище будет скомпрометировано, будут раскрыты только секреты в немецком. Остальная часть вашей инфраструктуры останется в безопасности. И есть две встроенные защитные функции, которые всегда стоит включать. Мягкое удаление означает, что если кто-то удалит секрет, он не исчезнет навсегда. Он переходит в восстанавливаемое состояние на выбранный вами период хранения до 90 дней. Защита от очистки делает еще один шаг вперед. Никто не может окончательно удалить хранилище или его содержимое, пока не истечет период хранения. Вместе они предотвращают случайную потерю данных, из-за которой команды безопасности не спят по ночам. Как все это связано? Давайте объединим все это и посмотрим, как эти части сочетаются. Key Vault – это неизолированный элемент. Это центральная нервная система для секретов в вашей архитектуре Azure. Когда вы понимаете, как функционирует вся система, все встает на свои места. Вот что происходит, когда приложению нужен секрет. Приложение запрашивает его, используя свое управляемое удостоверение. Это удостоверение уже зарегистрировано в IntraID. Azure создала его автоматически, когда вы включили управляемое удостоверение для ресурса. IntraID проверяет подлинность удостоверения, а затем передает запрос в Key Vault. Key Vault проверяет назначенные вами разрешения RBC. Если у удостоверения есть нужная роль, например, пользователь секретов Key Vault, секрет возвращается. Все это происходит за миллисекунды. Приложение никогда не видит учетные данные. Оно никогда не хранит пароль. Оно просто получает нужное значение. Теперь подумайте о том, сколько сервисов Azure могут подключиться к этому. App Service, Functions, AKS, Data Factory, Synapse, Logic Apps, Defops, Pipelines – все они умеют работать с Key Vault. Вы можете настроить веб-приложение так, чтобы оно ссылалось на секрет прямо в параметрах приложения. Вы можете настроить конвейер Data Factory на получение ключа учетной записи хранения из Key Vault во время выполнения. Вы можете настроить кластер Kubernetes для получения секретов с помощью драйвера Key Vault CSI. Каждый сервис интегрируется одинаково, используя ту же систему идентификации, те же роли RBAC и те же журналы аудита. Шаблон CI, CD особенно эффективен. Ваши конвейеры получают секреты из Key Vault во время развертывания. Они никогда не хранят их в переменных конвейера или секретах репозитория. Если вам нужно сменить пароль базы данных, вы обновляете его в Key Vault. При следующем запуске конвейер автоматически подхватывает новое значение. Никаких изменений в конвейере, никакого изменения кода, никаких повторных развертываний. Вот что заставляет все это работать как единое целое. Как только вы настроите Key Vault с управляемым удостоверением и RBAC, вы полностью перестанете думать об управлении учетными данными. Ваши приложения просто работают. Секреты обновляются незаметно для всех. Сертификаты продлеваются без ночных авралов. Система выполняет все это в фоновом режиме. Это тот подход к безопасности, который действительно важен. Периметром является идентификация, а не сеть. Неважно, находится ли кто-то внутри вашей виртуальной сети или снаружи. Важно лишь то, есть ли у них действительное удостоверение с соответствующими правами доступа. Key Vault обеспечивает это по своей архитектуре. Каждый запрос на доступ проходит аутентификацию интро-ID и авторизацию RBAC, независимо от того, откуда он исходит. И все это логируется. Каждое чтение секрета, каждая операция с ключом, каждое получение сертификата. Вы можете видеть, кто, что и когда запрашивал. Если что-то выглядит подозрительно, у вас есть данные для расследования. Это критически важно для соответствия требованиям, реагирования на инциденты и понимания того, что происходит в вашей среде. В этом-то вся и прелесть. Key Vault, интро-ID, RBAC и управляемые удостоверения работают вместе как единая система безопасности. Каждый компонент усиливает остальные. И когда все настроено правильно, вы получаете систему управления учетными данными, которые одновременно безопаснее и проще в эксплуатации, чем любая самописная разработка. Практические выводы. Итак, что вам стоит сделать прямо сейчас? Давайте превратим эти знания в действия. Вот задачи, которыми можно заняться на этой неделе. Начните с вашей модели разрешений. Откройте Key Vault на портале, перейдите в конфигурацию доступа и проверьте, что там указано. Если вы видите политику доступа к хранилищу, в All Access Policy это устаревший способ. Вам следует перейти на управление доступом на основе ролей Azure, Azure RBC. Миграция выполняется просто. Переключите модель разрешений и назначьте роли RBC тем же пользователям, у которых уже были политики доступа. Сделайте это сегодня. Microsoft рекомендует это, и исследование, о котором мы говорили, показало почему. Затем проверьте все учетные записи, обладающие ролью участника, контрибутор Key Vault. Откройте вкладку IAM в вашем хранилище и посмотрите, у кого есть доступ уровня участник. У каждого, у кого есть эта роль, должны быть веские причины для этого. В большинстве случаев нет. Замените роль участника на что-то более специфическое. Если кому-то нужно только читать секреты, назначьте роль пользователя секретов Key Vault. Если нужно управлять секретами, используйте роль администратора секретов Key Vault. Цель состоит в том, чтобы полностью закрыть этот путь повышения привилегий. Затем воспользуйтесь управляемыми удостоверениями. Любая служба Azure, которой нужен доступ к Key Vault, должна их использовать. Если у вас есть веб-приложение, функция, фабрика данных или виртуальная машина, использующая субъект службу с секретом клиента, перейдите на управляемое удостоверение. Это проще, безопаснее и решает проблему «курица и яйца», которую мы обсуждали. Azure берет на себя управление учетными данными в фоновом режиме. И еще кое-что. Включите мягкое удаление и защиту от очистки для каждого хранилища. Мягкое удаление включено по умолчанию для новых хранилищ, а защиты от очистки нет. Никому навсегда удалить хранилище или его содержимое в течение периода удержания. Это не раз спасало команды от катастрофических ошибок. Вот ваш призыв к действию. Взгляните на свой текущий подход к управлению секретами. Найдите один секрет, который все еще лежит в файле конфигурации, переменной окружения или жестко закодирован в коде. Перенесите его в Key Vault на этой неделе. Всего один. Когда вы увидите, как это просто, вы захотите перенести остальные. Безопасность — это не разовая настройка. Это практика. Key Vault упрощает эту практику, но только если вы используете его правильно. Инструменты есть. Шаблоны проверены. Теперь все зависит от того, внедрите ли вы их. Такова система. Key Vault — это ваш цифровой сейф, но он безопасен лишь настолько, насколько безопасны средства контроля доступа к нему. Начните с аудита, который я только что описал. Проверьте свою модель разрешений. Проверьте назначенные роли участников и перенесите хотя бы один секрет в хранилище на этой неделе. Подписывайтесь, чтобы получать больше полезных советов по облачной безопасности простым языком. И поделитесь этим с тем, кто все еще хранит секреты в конфигурационных файлах.