Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
В Azure Pipelines можно разрешить пользователям настраивать выполнение конвейера, собирая входные данные с переменными и параметрами. Однако принятие входных данных пользователем также может привести к рискам безопасности, если они не обработаны должным образом. В этой статье вы узнаете, как безопасно использовать переменные и параметры в конвейере.
Эта статья является частью серии, которая помогает реализовать меры безопасности для Azure Pipelines. Дополнительные сведения см. в статье "Защита Azure Pipelines".
Предпосылки
| Категория | Требования |
|---|---|
| Azure DevOps | — Реализуйте рекомендации, изложенные в Make your Azure DevOps secure и Secure Azure Pipelines. — Базовые знания о YAML и Azure Pipelines. Дополнительные сведения см. в разделе Создайте ваш первый конвейер. |
| Разрешения | — Изменение разрешений конвейеров: Член группы "Администраторы проектов". — Изменение разрешений организации: член группы администраторов коллекции проектов. |
Переменные
Переменные — это удобный способ предварительного сбора данных пользователей и упрощения передачи данных между шагами конвейера. Однако переменные, определенные в задачах или скриптах YAML, по умолчанию выполняют чтение и запись. Значения, заданные на предыдущих шагах, могут неожиданно изменять последующие значения.
Например, в следующем фрагменте скрипта переменная MyConfig вызывается.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Если на предыдущем шаге задано MyConfig значение Debug & deltree /y c: переменной, выполнение этого скрипта удаляет содержимое агента сборки и может привести к непредвиденным последствиям. В этом примере подчеркивается потенциальная опасность таких параметров.
Системные переменные, такие как Build.SourcesDirectory и выходные переменные задачи, всегда доступны только для чтения. Вы также можете назначить переменную, созданную в скрипте или задаче YAML только для чтения, передав isReadonly=true флаг в команде ведения журнала.
В определении переменной YAML можно указать переменную, доступную только для чтения, с помощью определенного readonly ключа:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Используйте особую осторожность с секретными переменными. Рекомендуемые методы настройки секретных переменных включают использование пользовательского интерфейса, создание группы переменных или использование группы переменных, исходной из Azure Key Vault. Дополнительные сведения см. в разделе Установка секретных переменных.
Переменные времени очереди
При определении переменной в пользовательском интерфейсе Azure Pipelines можно выбрать, следует ли разрешить пользователям переопределить значение во время выполнения конвейера. Переменные, позволяющие пользователям задавать значение во время очереди, называются переменными во время очереди и могут быть определены только в пользовательском интерфейсе переменных Azure Pipelines.
В редакторе классических конвейеров вы определяете переменную времени выполнения в очереди, установив флажок настраиваемая в момент постановки в очередь. В конвейерах YAML их можно назначить, нажав кнопку "Разрешить пользователям переопределить это значение при запуске этого конвейера".
Замечание
В конвейере релиза выберите Settable at release time. См. дополнительные сведения в статье Как изменить переменные во время релиза?
Когда пользователь вручную запускает конвейер, он может выбрать переменные во время очереди и изменить значения.
Пользователи должны иметь разрешение на изменение конфигурации сборки очереди в конвейере, чтобы иметь возможность определять переменные, заданные во время очереди.
Ограничить переменные, которые можно задать во время ожидания
Пользовательский интерфейс Azure Pipelines и REST API, на котором выполняется конвейер, предоставляют пользователям способы добавления новых переменных во время очереди. Эта возможность позволяет пользователям создавать переменные, которые автор конвейера не определил, переопределять системные переменные и задавать значения для существующих переменных во время очереди.
Чтобы избежать проблем, вызванных этими возможностями, можно ограничить переменные, которые можно задать во время очереди. Можно включить настройку Ограничить переменные, которые можно задать во время очереди, чтобы пользователи могли задавать только переменные, которые явно помечены как Устанавливаемые во время очереди или Дать возможность пользователям изменить это значение при выполнении этого конвейера во время очереди.
Этот параметр можно применить на уровнях организации и проекта.
Администраторы коллекции проектов могут применять этот параметр на уровне организации в Параметрах>Конвейеров>на уровне Организации. Если установка включена, можно установить только те переменные, которые явно помечены как устанавливаемые при постановке в очередь для всех конвейеров во всех проектах в организации.
Администраторы проектов могут применять этот параметр на уровне проекта в настройках проекта>параметры потоков>Настройки. Если настройка Вкл., то для всех конвейеров в этом проекте можно задать только те переменные, которые явно помечены как устанавливаемые во время постановки в очередь. Если параметр не включен на уровне организации, его можно включить или отключить для отдельных проектов.
Если параметр уровня организации включен, он применяется ко всем проектам в организации и не может быть отключен на уровне проекта.
В следующем примере показаны переменные для классического конвейера, при этом некоторые из этих переменных помечены как устанавливаемые при постановке в очередь. Переменная BuildPlatform может быть задана во время очереди, но BuildConfiguration нельзя.
При запуске этого конвейера на экране Переменные видны только переменные, помеченные как настраиваемые при постановке в очередь.
Если переменные ограничения, которые можно задать во время очереди , включены на уровне проекта или организации, кнопка "Добавить переменную " не отображается.
Использование API сборок — очереди или запусков — запуск конвейера для постановки выполнения в очередь и попытка задать значение переменной, не помеченной как устанавливаемая при постановке в очередь, завершается ошибкой, аналогичной следующей:
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (BuildConfiguration). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Параметры
Выполняющийся конвейер не может изменять параметры конвейера, в отличие от переменных. Параметры имеют такие типы данных, как number и string, и могут быть ограничены определенными подмножествами значений. Это ограничение полезно, если настраиваемый пользователем аспект конвейера должен принимать только значения из предопределенного списка, гарантируя, что конвейер не принимает произвольные данные.
Включение проверки аргументов задач оболочки
Потоки данных могут ссылаться на задачи, выполняемые внутри потока. Некоторые задачи включают arguments параметр, позволяющий пользователям указывать дополнительные параметры для задачи.
Применение настройки Включить проверку аргументов задач оболочки выполняет валидацию argument параметров для встроенных задач оболочки, чтобы обнаружить входные данные, которые могут внедрять команды в скрипты. Проверка гарантирует, что оболочка правильно выполняет символы, такие как точка с запятой, кавычки и скобки, в следующих задачах конвейера:
- PowerShell
- Пакетный скрипт
- Бить
- Ссх
- AzureFileCopy
- WindowsMachineFileCopy
Вы можете применить проверку аргументов задач оболочки на уровне организации в разделе"Параметры>конвейеров>" или на уровне проекта в разделе "Параметры>>". Если параметр уровня организации включен, он применяется ко всем проектам в организации и не может быть отключен на уровне проекта.
Если этот параметр включен, любая проблема проверки, связанная с параметром arguments , активирует следующее сообщение об ошибке:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Чтобы устранить проблему, настройте аргумент, экранируя специальные символы, как указано в сообщении об ошибке.