다음을 통해 공유


리포지토리 보호

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

소스 코드, 파이프라인의 YAML 파일 및 필요한 스크립트 및 도구는 모두 버전 제어 리포지토리에 저장됩니다. 코드 및 파이프라인의 변경 내용이 안전한지 확인하려면 사용 권한 및 분기 정책을 사용해야 합니다. 리포지토리에 파이프라인 권한 및 검사 추가할 수도 있습니다.

또한 리포지토리에 대한 기본 액세스 제어를 검토해야 합니다.

Git의 디자인으로 인해 분기 수준의 보호는 지금까지만 수행됩니다. 리포지토리에 푸시 액세스 사용자는 일반적으로 새 분기를 만들 수 있습니다. GitHub 오픈 소스 프로젝트를 사용하는 경우 GitHub 계정이 있는 모든 사용자가 리포지토리를 포크하고 기여 다시 제안할 수 있습니다. 파이프라인은 특정 분기가 아닌 리포지토리와 연결되므로 코드 및 YAML 파일이 신뢰할 수 없다고 가정해야 합니다.

포크

GitHub에서 퍼블릭 리포지토리를 빌드하는 경우 포크 빌드에 대한 입장을 고려해야 합니다. 포크는 조직 외부에서 나오기 때문에 특히 위험합니다. 기여 코드로부터 제품을 보호하려면 다음 권장 사항을 고려하세요.

참고 항목

다음 권장 사항은 주로 GitHub에서 공용 리포지토리를 빌드하는 데 적용됩니다.

포크 빌드에 비밀을 제공하지 않음

기본적으로 파이프라인은 포크를 빌드하도록 구성되지만 비밀 및 보호된 리소스는 기본적으로 해당 파이프라인의 작업에 사용할 수 없습니다. 이 후자의 보호를 해제하지 마십시오.

Screenshot of fork build protection UI.

참고 항목

포크 빌드를 사용하여 비밀에 액세스하도록 설정하면 기본적으로 Azure Pipelines는 포크 빌드에 사용되는 액세스 토큰을 제한합니다. 일반 액세스 토큰보다 열린 리소스에 대한 액세스가 더 제한적입니다. 포크 빌드에 일반 빌드와 동일한 권한을 부여하려면 포크 만들기 빌드에 일반 빌드 설정과 동일한 사용 권한이 있도록 설정합니다.

Screenshot of fork build protection UI in Azure DevOps Server 2020 and lower.

참고 항목

포크 빌드가 비밀에 액세스하도록 설정하더라도 Azure Pipelines는 포크 빌드에 사용되는 액세스 토큰을 제한합니다. 일반 액세스 토큰보다 열린 리소스에 대한 액세스가 더 제한적입니다. 이 보호를 사용하지 않도록 설정할 수 없습니다.

포크 빌드 수동 트리거 고려

자동 포크 빌드를 해제하고 대신 끌어오기 요청 주석을 사용하여 이러한 기여 수동으로 빌드할 수 있습니다. 이 설정은 빌드를 트리거하기 전에 코드를 검토할 수 있는 기회를 제공합니다.

포크 빌드에 Microsoft 호스팅 에이전트 사용

자체 호스팅 에이전트의 포크에서 빌드를 실행하지 마세요. 이렇게 하면 외부 조직이 회사 네트워크 내의 컴퓨터에서 외부 코드를 실행할 수 있는 경로를 효과적으로 제공합니다. 가능하면 Microsoft 호스팅 에이전트를 사용합니다. 자체 호스팅 에이전트의 경우 일종의 네트워크 격리를 사용하고 에이전트가 작업 간에 상태를 유지하지 않도록 합니다.

코드 변경 내용 검토

분기된 풀 요청에 대해 파이프라인을 실행하기 전에 제안된 변경 사항을 주의 깊게 검토하고 원활하게 실행할 수 있는지 확인하세요.

실행할 YAML 파이프라인의 버전은 풀 요청의 버전입니다. 따라서 명령줄 스크립트 또는 단위 테스트와 같이 파이프라인이 실행되면 실행되는 코드 및 YAML 코드의 변경 내용에 특히 주의해야 합니다.

GitHub 토큰 범위 제한

GitHub 포크 풀 요청을 빌드할 때 Azure Pipelines는 파이프라인이 GitHub 리포지토리 콘텐츠를 변경할 수 없도록 합니다. 이 제한은 Azure Pipelines GitHub 앱을 사용하여 GitHub와 통합하는 경우에만 적용됩니다. 다른 형태의 GitHub 통합(예: OAuth 앱)을 사용하는 경우 제한이 적용되지 않습니다.

사용자 분기

올바른 권한이 있는 조직 사용자는 새 코드 또는 업데이트된 코드를 포함하는 새 분기를 만들 수 있습니다. 해당 코드는 보호된 분기와 동일한 파이프라인을 통해 실행할 수 있습니다. 또한 새 분기의 YAML 파일이 변경되면 업데이트된 YAML을 사용하여 파이프라인을 실행합니다. 이 디자인은 뛰어난 유연성과 셀프 서비스를 허용하지만 모든 변경 내용이 안전하지는 않습니다(악의적으로 수행되었는지 여부).

파이프라인이 소스 코드를 사용하거나 Azure Repos에 정의된 경우 Azure Repos 권한 모델을 완전히 이해해야 합니다. 특히 리포지토리 수준에서 분기 만들기 권한이 있는 사용자는 참가 권한이 없는 경우에도 리포지토리에 코드를 도입할 수 있습니다.

다음 단계

다음으로, 보호된 리소스에 대한 검사 제공되는 더 많은 보호에 대해 알아봅니다.