업스트림 동작 구성

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Artifacts 업스트림 원본을 통해 개발자는 통합 피드를 활용하여 아티팩트 피드와 NuGet.org 또는 npmjs.com 같은 인기 있는 공용 레지스트리에서 패키지를 게시하고 사용하는 데 편리합니다. 이전에는 아티팩트 피드가 피드 자체와 구성된 모든 업스트림 원본에서 사용 가능한 패키지 버전 목록을 결합했습니다.

피드의 콘텐츠를 보여 주는 일러스트레이션입니다.

업스트림 동작은 개발자가 외부 소스 패키지 버전을 사용할지 선택할 수 있는 기능입니다. 특정 패키지에 대한 퍼블릭 레지스트리에서 액세스할 수 있는 패키지를 제어합니다.

업스트림 동작을 사용하도록 설정하면 패키지가 Azure Artifacts 피드에 게시되면 퍼블릭 레지스트리의 모든 버전이 차단되고 다운로드할 수 없게 됩니다.

이 방법은 공용 레지스트리에 침투했을 수 있는 악의적인 패키지에 잠재적인 노출을 방지하여 추가 보안 계층을 추가합니다.

그러나 사용자는 여전히 업스트림 동작 설정을 비활성화하여 원하는 경우 공용 레지스트리의 패키지를 사용할 수 있습니다.

참고 항목

새 동작은 피드의 @local 보기 내에서 유지되므로 현재 사용 중인 패키지 버전에는 영향을 주지 않습니다.

적용 가능한 시나리오

다음 섹션에서는 외부 소스 패키지 버전을 차단하기 위해 업스트림 동작이 트리거되는 다양한 일반적인 시나리오와 퍼블릭 패키지에 대한 액세스를 차단할 필요가 없는 기타 시나리오를 보여 줍니다.

공용 버전이 차단됨

공개된 프라이빗 패키지 버전

이 시나리오에서 팀에는 공개된 프라이빗 패키지가 있습니다. 이 경우 업스트림 동작은 새 퍼블릭 버전(신뢰할 수 없는 패키지)을 차단하도록 트리거됩니다.

공개된 내부 패키지 버전을 보여 주는 일러스트레이션입니다.

프라이빗 및 퍼블릭 패키지 모두 필요

이 시나리오에서는 팀이 프라이빗 및 퍼블릭 패키지의 조합을 사용하는 경우 업스트림 동작을 사용하도록 설정하면 공용 레지스트리의 새 패키지 버전이 차단됩니다.

사용 가능한 프라이빗 및 퍼블릭 패키지를 보여 주는 일러스트레이션입니다.

공용 버전은 차단되지 않습니다.

모든 패키지는 프라이빗*

모든 기존 패키지가 비공개이고 팀에서 퍼블릭 패키지를 사용할 계획이 없는 경우 새 업스트림 동작은 이 시나리오에서 팀의 워크플로에 영향을 주지 않습니다.

프라이빗 패키지만 있는 피드를 보여 주는 그림입니다.

모든 패키지는 공용입니다.

이 시나리오에서 팀에서 퍼블릭 레지스트리 또는 다른 오픈 소스 리포지토리에서 공용 패키지를 단독으로 사용하는 경우 새 업스트림 동작은 워크플로에 어떤 방식으로도 영향을 주지 않습니다.

퍼블릭 패키지만 있는 피드를 보여 주는 일러스트레이션입니다.

비공개로 만든 퍼블릭 패키지

이 경우 퍼블릭 패키지가 프라이빗 패키지로 변환되는 경우 새 업스트림 동작은 어떤 방식으로든 팀의 워크플로에 영향을 주지 않습니다.

퍼블릭에서 프라이빗으로 변환된 패키지를 보여 주는 일러스트레이션입니다.

외부 버전 허용

참고 항목

외부 소스 버전을 허용하려면 피드 소유자 여야 합니다. 자세한 내용은 피드 권한을 참조 하세요.

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 아티팩트 및 드롭다운 메뉴에서 피드를 선택합니다.

  3. 패키지를 선택한 다음, 더 많은 옵션을 보려면 줄임표 단추를 선택합니다. 외부 소스 버전 허용을 선택합니다.

    외부 소스 버전을 허용하는 방법을 보여 주는 스크린샷.

  4. 외부 버전을 허용하려면 토글 단추를 선택합니다. 완료되면 닫기를 선택합니다.

    외부 버전을 사용하도록 설정하는 방법을 보여 주는 스크린샷

REST API를 사용하여 외부 버전 허용

PowerShell을 사용하여 외부 버전 허용

  1. 읽기, 쓰기 및 관리 권한을 패키징하여>개인용 액세스 토큰을 만듭니다.

    패키징 권한을 선택하는 방법을 보여 주는 스크린샷

  2. 개인 액세스 토큰에 대한 환경 변수를 만듭니다.

    $env:PATVAR = "YOUR_PERSONAL_ACCESS_TOKEN"
    
  3. 개인 액세스 토큰을 baser64로 인코딩된 문자열로 변환하고 HTTP 요청 헤더를 생성합니다.

    $token = [Convert]::ToBase64String(([Text.Encoding]::ASCII.GetBytes("username:$env:PatVar")))
    $headers = @{
        Authorization = "Basic $token"
    }
    
  4. 엔드포인트 URL을 생성합니다. 예: //pkgs.dev.azure.com/MyOrg/MyProject/_apis/packaging/feeds/MyFeed/nuget/packages/pkg1.0.0.nupkg/업스트림ing?api-version=6.1-preview.1

    • 프로젝트 범위 피드:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      
    • 조직 범위 피드:

      $url = "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_apis/packaging/feeds/<FEED_NAME>/<PROTOCOL>/packages/<PACKAGE_NAME>/upstreaming?api-version=6.1-preview.1"
      

다음 명령을 실행하여 패키지의 업스트림 동작 상태를 검색합니다. $url 이전 $headers 섹션에서 사용한 것과 동일한 변수입니다.

Invoke-RestMethod -Uri $url -Headers $headers