Защита секретов в Azure Pipelines

В этой статье приведены рекомендации по защите секретов в Azure Pipelines. Секрет — это то, к чему необходимо строго контролировать доступ, например ключи API, пароли или криптографические ключи.

Azure Pipelines не создает значения секретов. Однако может потребоваться добавить секрет в конвейер для хранения конфиденциальных данных, таких как ключ API. Дополнительные сведения об определении переменных секретов см. здесь.

Не используйте секреты, если доступен другой метод

Лучший способ защиты секрета — не иметь секрет в первую очередь. Проверьте, может ли конвейер использовать другой метод, отличный от использования секрета для выполнения задачи.

Использование секретных переменных

Конфиденциальные значения никогда не должны храниться в виде обычного текста в файле .yml Azure Pipelines.

Секретные переменные можно использовать для частных данных, таких как пароли, идентификаторы и другие идентифицировать данные, которые не нужны в конвейере. Рекомендуется задать секретные переменные в Azure Key Vault. Вы также можете задать секретные переменные в пользовательском интерфейсе или в группе переменных. Использование команды ведения журнала для задания секретной переменной не рекомендуется. При установке секрета с помощью команды ведения журнала любой пользователь, который может получить доступ к конвейеру, сможет также увидеть секрет.

Секретные переменные шифруются и могут использоваться в конвейерах без предоставления их значений. Хотя их значения не предоставляются, никогда не повторяйте секреты в качестве выходных данных и не передают секреты в командной строке. Вместо этого мы рекомендуем сопоставить секреты с переменными среды.

При создании секрета следуйте рекомендациям по именованию переменных и убедитесь, что имя секрета не раскрывает конфиденциальную информацию.

Ограничение доступа к секретным переменным

Чтобы ограничить доступ к секретам в Azure DevOps, можно:

  • Храните секреты в Azure Key Vault. С помощью Azure Key Vault можно использовать модель управления доступом на основе ролей Azure, чтобы ограничить доступ к секрету или группе секретов.
  • Задайте секретные переменные в пользовательском интерфейсе для конвейера. Секретные переменные, заданные в пользовательском интерфейсе параметров конвейера, область конвейеру, в котором они заданы. Таким образом, вы можете иметь секреты, видимые только пользователям с доступом к такому конвейеру.
  • Задайте секреты в группе переменных. Группы переменных соответствуют модели безопасности библиотеки. Вы можете контролировать, кто может определять новые элементы в библиотеке и использовать существующий элемент.

Не записывайте секреты в журналы

Azure Pipelines пытается скрутировать секреты из журналов, где это возможно. Эта фильтрация выполняется на основе лучших усилий и не может перехватывать все способы утечки секретов. Избегайте повторения секретов в консоли, используя их в параметрах командной строки или регистрируя их в файлах. Например, некоторые команды Azure CLI позволяют защитить выходные данные. Если вы вызываете Azure CLI из конвейера, используйте формат выходных данных None и, если вам нужно получить секрет из вызова Azure CLI, используйте ни один выходной формат и получите сведения о безопасности в секретную переменную.

Не используйте структурированные данные в качестве секретов

Структурированные данные могут привести к сбою скрытия секрета в журналах, так как скрытие в значительной степени зависит от поиска точного соответствия для конкретного значения секрета. Например, не используйте большой двоичный объект JSON, XML или YAML (или аналогичный) для инкапсулации секретного значения, включая символы управления, такие как возврат каретки (\r) и веб-канал строки (\n), так как это значительно снижает вероятность правильной редактации секретов. Вместо этого создайте отдельные секреты для каждого конфиденциального значения.

Выполняйте аудит обработки секретов

Выполните аудит использования секретов, чтобы убедиться, что они обрабатываются должным образом. Это можно сделать, просмотрив исходный код репозитория, на котором размещен конвейер, и проверка любые задачи, используемые в конвейере. Например, убедитесь, что они не отправляются на непредусмотренные узлы или непосредственно не печатаются для вывода журнала.

Просмотрите журналы выполнения для конвейера после тестирования допустимых или недопустимых входных данных и проверка, что секреты правильно редактируются или не отображаются. Это не всегда очевидно, как команда или инструмент, который вызывается, приведет к ошибкам, и секреты могут позже оказаться в журналах ошибок. Azure Pipelines пытается скрутировать секреты из журналов, где это возможно. Эта фильтрация выполняется на основе лучших усилий и не может перехватывать все способы утечки секретов. В результате рекомендуется вручную просмотреть журналы конвейера после тестирования допустимых и недопустимых входных данных.

Аудит и смена секретов

Периодически просматривайте зарегистрированные секреты, используемые конвейерами, чтобы убедиться, что они все еще необходимы, и удалите те, которые больше не нужны.

Периодически поворачивайте секреты, чтобы сократить время, в течение которого скомпрометированный секрет действителен.

Типы секретов, используемых конвейерами, могут включать:

Следующие шаги