Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Azure Pipelines에서 사용자가 변수 및 매개 변수를 사용하여 입력을 수집하여 파이프라인 실행을 사용자 지정할 수 있습니다. 그러나 사용자 입력을 수락하면 제대로 처리되지 않으면 보안 위험이 발생할 수 있습니다. 이 문서에서는 파이프라인에서 변수 및 매개 변수를 안전하게 사용하는 방법을 알아봅니다.
이 문서는 Azure Pipelines에 대한 보안 조치를 구현하는 데 도움이 되는 시리즈의 일부입니다. 자세한 내용은 보안 Azure Pipelines를 참조하세요.
필수 조건
범주 | 요구 사항 |
---|---|
Azure DevOps | - Azure DevOps를 안전하고 안전한 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
비밀 변수에는 특히 주의해야 합니다. 비밀 변수를 설정하는 권장 방법은 UI 사용, 변수 그룹 만들기 또는 Azure Key Vault에서 원본으로 사용하는 변수 그룹을 사용하는 것입니다. 자세한 내용은 비밀 변수 설정을 참조하세요.
대기 시간 변수
Azure Pipelines UI에서 변수를 정의할 때 파이프라인 실행 중에 사용자가 값을 재정의하도록 허용할지 여부를 선택할 수 있습니다. 사용자가 큐 시간에 값을 설정할 수 있는 변수를 큐 시간 변수라고 하며 Azure Pipelines 변수 UI에서만 정의할 수 있습니다.
클래식 파이프라인 편집기에서 큐 시간에 Settable에 대한 확인란을 선택하여 큐 시간 변수를 정의합니다. YAML 파이프라인에서 사용자가 이 파이프라인을 실행할 때 이 값을 재정의하도록 선택하여 지정합니다.
비고
릴리스 파이프라인에서 릴리스 시 설정 가능 항목을 선택합니다. 자세한 내용은 릴리스 시간에 변수를 편집하려면 어떻게 해야 하나요?
사용자가 파이프라인을 수동으로 실행하면 큐 시간 변수를 선택하고 값을 변경할 수 있습니다.
사용자는 큐 시간에 설정된 변수를 정의할 수 있도록 파이프라인에 대한 큐 빌드 구성 편집 권한이 있어야 합니다.
큐 시간에 설정할 수 있는 변수 제한
파이프라인을 실행하는 Azure Pipelines UI 및 REST API는 사용자가 큐 시간에 새 변수를 추가할 수 있는 방법을 제공합니다. 이 기능을 사용하면 파이프라인 작성자가 정의하지 않은 변수를 만들고, 시스템 변수를 재정의하고, 큐 시간에 기존 변수에 대한 값을 설정할 수 있습니다.
이러한 기능으로 인한 문제를 방지하려면 큐 시간에 설정할 수 있는 변수를 제한할 수 있습니다. 사용자가 큐 시간에 Settable로 명시적으로 표시된 변수만 설정할 수 있도록 큐 시간 설정 시 설정할 수 있는 제한 변수를 사용하도록 설정하거나 사용자가 큐 시간에 이 파이프라인을 실행할 때 이 값을 재정의하도록 할 수 있습니다.
이 설정은 조직 및 프로젝트 수준에서 적용할 수 있습니다.
프로젝트 컬렉션 관리자는 조직 설정 파이프라인설정의 조직 수준에서 이 > 적용할 수>. 설정이 On이면 큐 시간에 Settable 로 명시적으로 표시된 변수만 조직의 모든 프로젝트의 모든 파이프라인에 대해 큐 시간에 설정할 수 있습니다.
프로젝트 관리자는 프로젝트 설정 파이프라인 설정의 프로젝트 수준에서 이 설정을> 적용할 수있습니다>. 설정이 On이면 큐 시간에 Settable 로 명시적으로 표시된 변수만 이 프로젝트의 모든 파이프라인에 대해 큐 시간에 설정할 수 있습니다. 설정이 조직 수준에서 사용하도록 설정되지 않은 경우 개별 프로젝트에 대해 설정하거나 사용하지 않도록 설정할 수 있습니다.
조직 수준 설정을 사용하는 경우 조직의 모든 프로젝트에 적용되며 프로젝트 수준에서 해제할 수 없습니다.
다음 예제에서는 클래식 파이프라인에 대한 변수를 보여 줍니다. 그 중 일부는 큐 시간에 Settable로 표시되어 있습니다. 변수는 BuildPlatform
큐 시간에 설정할 수 있지만 BuildConfiguration
설정할 수는 없습니다.
이 파이프라인을 실행하면 큐 시간에 Settable 로 표시된 변수만 선택할 변수 화면에 표시됩니다.
큐 시간에 설정할 수 있는 변수 제한이 프로젝트 또는 조직 수준에서 사용하도록 설정된 경우 변수 추가 단추가 나타나지 않습니다.
빌드 - 큐 또는 실행 - 파이프라인 API를 사용하여 파이프라인 실행을 큐에 대기시키고 큐 시간에 Settable로 표시되지 않은 변수 값을 설정하려고 시도하면 다음과 유사한 오류가 발생합니다.
{
"$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
- BatchScript (배치스크립트)
- 배쉬
- 쉿
- AzureFile복사
- 윈도우 머신 파일 복사
조직 설정파이프라인설정의 조직 수준 또는 > 설정 >파이프라인 설정 아래의 프로젝트 수준에서 > 적용할 수있습니다>. 조직 수준 설정을 사용하는 경우 조직의 모든 프로젝트에 적용되며 프로젝트 수준에서 해제할 수 없습니다.
이 설정을 사용하면 매개 변수와 관련된 arguments
유효성 검사 문제가 다음 오류 메시지를 트리거합니다.
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
이 문제를 해결하려면 오류 메시지에 표시된 대로 특수 문자를 이스케이프하여 인수를 조정합니다.