Share via


인증된 피드의 패키지 사용

복원 및 설치와 같은 많은 NuGet 작업에는 nuget.config 파일에서 구성할 수 있는 하나 이상의 패키지 원본과의 통신이 필요합니다. HTTP 피드의 경우 NuGet은 인증되지 않은 요청을 수행하고 서버가 HTTP 401 응답으로 응답하는 경우 NuGet은 다음 순서대로 자격 증명을 검색합니다.

  1. 환경 변수 NuGetPackageSourceCredentials_{name}입니다.
  2. nuget.config 파일의 자격 증명입니다.
  3. 패키지 원본이 제공하는 경우 NuGet 자격 증명 공급자를 사용합니다.

사용해야 하는 자격 증명은 패키지 원본에 의해 결정됩니다. 따라서 자격 증명 공급자를 사용하지 않는 한 어떤 자격 증명을 사용할지 패키지 원본과 검사 합니다. 패키지 원본은 NuGet을 사용하여 암호(웹 사이트에 로그인하는 경우)를 사용하는 것을 금지하는 것이 매우 일반적입니다. 일반적으로 NuGet의 암호로 사용할 개인 액세스 토큰을 만들어야 하지만 사용 중인 NuGet 서버에 대한 설명서를 검사 합니다. Azure DevOps 및 GitHub와 같은 일부 패키지 원본에는 범위가 지정된 액세스 토큰이 있으므로 만든 토큰에 필요한 범위가 포함되어 있는지 확인해야 할 수 있습니다.

자격 증명을 관리하기 위한 보안 모범 사례

NuGet은 위에서 멘션 순서대로 자격 증명을 검색하지만 프라이빗 피드를 사용하여 인증할 때 자격 증명을 안전하게 관리하려면 다음 시퀀스를 사용하는 것이 좋습니다.

  1. 자격 증명 공급자: 가능하면 자격 증명 공급자를 사용하는 것이 좋습니다. 이 방법은 일반 텍스트에 비밀을 저장하지 않고 소스 제어를 통해 실수로 비밀을 노출할 위험을 최소화합니다. 또한 일반적으로 자격 증명이 만료되거나 변경될 때 업데이트해야 하는 위치 수가 줄어듭니다. 자격 증명 공급자가 Single Sign-On을 지원하는 경우 로그인 빈도 또는 자격 증명을 저장해야 하는 위치 수가 감소할 수 있습니다. 자세한 내용은 자격 증명 공급자 섹션을 참조하세요.

  2. nuget.config의 암호화된 자격 증명: 자격 증명 공급자를 사용할 수 없는 경우 암호화된 자격 증명을 사용하는 것이 좋습니다. 이 방법은 자격 증명을 암호화된 형식으로 저장하여 추가 보안 계층을 제공합니다. 자세한 내용은 nuget.config 파일의 자격 증명에 대한 섹션을 참조하세요.

    참고 항목

    암호화된 암호는 Windows에서만 지원됩니다. 또한 동일한 컴퓨터와 원래 암호화한 동일한 사용자만 암호 해독할 수 있습니다.

  3. nuget.config에서 환경 변수 매크로 사용: 암호화된 자격 증명을 사용할 수 없는 경우 환경 변수 매크로를 사용하여 nuget.config 파일에 자격 증명을 저장하는 것이 좋습니다. 이 방법을 사용하면 실제 자격 증명을 포함하는 환경 변수를 참조할 수 있습니다. 투명성을 향상시키고 최종 사용자가 자격 증명을 구성하는 방법을 이해하는 데 도움이 됩니다. 자세한 내용은 nuget.config 파일의 자격 증명에 대한 섹션을 참조하세요.

  4. 환경 변수 직접 사용: 대체 옵션으로 환경 변수에 직접 자격 증명을 저장할 수 있습니다. 그러나 이 방법은 nuget.config 파일에서 환경 변수 매크로를 사용하는 방법에 비해 가시성과 제어가 적을 수 있습니다. 자세한 내용은 환경 변수의 자격 증명에 대한 섹션을 참조하세요.

  5. NuGet.Config에서 텍스트 자격 증명 지우기: 이전에 멘션 옵션 중 하나를 사용하는 것이 좋습니다. 이러한 옵션을 사용할 수 없는 경우 nuget.config 파일에 자격 증명을 저장할 수 있습니다. 그러나 이 옵션은 다른 보안 옵션을 사용할 수 없는 환경에서만 사용해야 합니다. 자세한 내용은 nuget.config 파일의 자격 증명에 대한 섹션을 참조하세요.

    Warning

    특히 소스 제어에 파일을 저장할 때 nuget.config 파일의 명확한 텍스트에 자격 증명을 저장하면 실수로 자격 증명이 누출될 가능성이 높아집니다. nuget.config 파일에 자격 증명을 저장해야 하는 경우 위에서 멘션 더 안전한 옵션 중 하나를 사용하는 것이 좋습니다.

이러한 모범 사례를 준수하면 중요한 정보 노출 위험을 최소화하면서 프라이빗 피드를 안전하게 인증할 수 있습니다.

환경 변수의 자격 증명

NuGet은 nuget.config 파일의 key="name" 패키지 원본에 있는 {name}값인 환경 NuGetPackageSourceCredentials_{name}변수를 검색합니다. 환경 변수의 값은 이어야 하며 필요에 따라 포함;ValidAuthenticationTypes={types}Username={username};Password={password}수 있습니다. 환경 변수가 NuGet의 규칙과 일치하지 않거나 값이 NuGet의 예상 패턴을 충족하지 않는 경우 NuGet은 환경 변수를 자동으로 무시하고 다른 곳에서 패키지 원본에 대한 자격 증명을 계속 검색합니다. NuGet이 환경 변수의 자격 증명을 사용한다는 신호를 보낼 로그가 없으므로 환경 변수에 만료된 비밀이 포함되어 있고 구성 파일의 우선 순위가 낮기 때문에 새 비밀이 nuget.config 파일에 추가되는 경우 인증 문제를 디버깅하는 데 어려움이 발생할 수 있습니다.

CI/CD 파이프라인에서 환경 변수를 사용하면 비밀이 로그에 캡처될 위험을 최소화할 수 있습니다.

예를 들어 다음 nuget.config 파일을 고려합니다.

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

이 경우 원본 이름은 NuGet에서 Contoso 환경 변수 이름을 NuGetPackageSourceCredentials_Contoso찾습니다. 일부 플랫폼은 대/소문자를 구분하므로 nuget.config 파일에 정의된 대로 환경 이름 및 원본 이름에 올바른 대/소문자를 사용하는 것이 중요합니다.

사용자 이름이 nugetUser 고 암호인 secret123경우 환경 변수의 값을 .로 Username=nugetUser;Password=secret123설정해야 합니다. NuGet은 HTTP 기본 인증에만 이 자격 증명을 사용해야 하지만 다른 인증 체계는 사용하지 않아야 하는 경우 환경 변수의 값을 으로 Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic설정할 수 있습니다. 유효한 인증 유형에 대한 자세한 내용은 nuget.config 파일의 패키지 자격 증명에 대한 문서를 참조하세요.

참고 항목

환경 변수에는 허용되는 문자에 대한 제한이 있으며 운영 체제에 따라 제한 사항이 다를 수 있습니다. 예를 들어 공백은 허용되지 않습니다. 따라서 이 환경 변수 기능을 사용하여 플랫폼의 환경 변수에 유효하지 않은 문자를 사용하는 패키지 원본에 대해 NuGet 자격 증명을 지정합니다. 이러한 경우 nuget.config 파일에서 패키지 원본의 이름을 바꿔야 합니다.

nuget.config 파일의 자격 증명

nuget.config 파일에는 패키지 원본 자격 증명이 포함될 수 있습니다. 구문을 비롯한 자세한 내용은 패키지 원본 자격 증명에 대한 nuget.config 파일 참조 문서 섹션을 참조하세요. 그러나 명령줄에서 자격 증명을 dotnet nuget update source 설정하는 것이 더 쉽습니다.

Warning

nuget.config 파일에서 자격 증명을 설정할 때 특히 자격 증명을 일반 텍스트로 저장할 때 주의해야 합니다. 자격 증명이 소스 제어에 있는 nuget.config 파일에 기록되는 경우 실수로 비밀이 누출될 위험이 증가합니다.

NuGet은 여러 파일의 설정을 누적하므로 사용자 nuget.config 파일에 자격 증명을 저장하는 것이 좋습니다. 또한 빌드 안정성을 위해 요소를 포함하여 솔루션(소스 코드 리포지토리) nuget.config 파일에 패키지 원본을 <clear /> 저장하는 것이 좋습니다.

nuget.config 파일의 사용자 이름 및 일반 텍스트 암호는 사용하려는 환경 변수 이름의 시작과 끝에 추가하여 % 환경 변수를 사용할 수 있습니다. 자세한 내용은 환경 변수 사용에 대한 nuget.config 참조 문서를 참조하세요.

자격 증명 공급자

NuGet에는 확장성 모델이 있으므로 플러그 인이 NuGet 자격 증명을 제공할 수 있습니다. NuGet에서 검색하려면 자격 증명 공급자를 설치해야 하는 경로가 .NET Framework(NuGet.exe, MSBuild 및 Visual Studio) 및 .NET SDK(.NET 5+ 런타임에서 실행)와 다릅니다.

NuGet에는 대화형 모드 또는 비대화형 모드에서 실행되는 개념이 있습니다. 비대화형 모드에서 자격 증명 공급자는 NuGet을 차단하지 말라는 메시지가 표시됩니다. 대화형 모드에서는 자격 증명 공급자가 로그인하라는 메시지를 표시할 수 있습니다. 도구의 기본값은 다르므로 대화형 모드는 시나리오에 따라 옵트인 또는 옵트아웃해야 할 수 있습니다.

도구 기본값 Toggle
dotnet CLI 비대화형 --interactive 인수. 예들 들어 dotnet restore --interactive입니다.
MSBuild 비대화형 NuGetInteractive MSBuild 속성입니다. 예들 들어 msbuild -t:restore -p:NuGetInteractive=true입니다.
NuGet.exe 대화형 -NonInteractive 인수. 예들 들어 nuget.exe restore -NonInteractive입니다.
Visual Studio 대화형 비대화형 모드에서 실행할 수 없습니다.

NuGet.exe V1 및 V2 자격 증명 공급자를 모두 지원하지만 MSBuild 및 .NET SDK는 V2(플랫폼 간) 플러그 인만 지원합니다.

Visual Studio에서 NuGet에는 자격 증명 공급자가 그래픽 로그인 환경을 제공하거나 필요한 경우 Visual Studio API를 호출하는 데 사용할 수 있는 Visual Studio 자격 증명 공급자 인터페이스가 있습니다. Visual Studio의 NuGet은 원본을 처리하는 Visual Studio 자격 증명 공급자를 찾을 수 없는 경우 명령줄 자격 증명 공급자로 대체됩니다.

Visual Studio 2017 버전 15.9 이상에는 Visual Studio, MSBuild 및 NuGet.exe 내에서 작동하는 Azure Artifacts에 대한 자격 증명 공급자가 포함되어 있습니다. 그러나 .NET SDK에 대한 자격 증명 공급자는 Visual Studio에 포함되지 않으므로 CLI를 dotnet 사용하려면 별도로 설치해야 합니다.

자격 증명 공급자 목록

.NET 도구를 통해 자격 증명 공급자를 설치할 수 있도록 하는 기능 요청이 있으므로 다른 자격 증명 공급자를 더 쉽게 검색할 수 있습니다. 이 작업이 구현될 때까지는 다음과 같이 알고 있는 자격 증명 공급자 목록이 있습니다.