.NET 및 Azure DevOps에서 비밀 정보 관리 가이드
카테고리
인프라/DevOps/보안
서브카테고리
DevOps
대상자
.NET 개발자, Azure DevOps 파이프라인 설계자
난이도: 중급 (비밀 관리 기본 개념과 DevOps 자동화 기술 필요)
핵심 요약
- 비밀 정보를 절대 코드에 직접 저장하지 않도록 하라 (예:
appsettings.json
에Connection String
직접 입력 금지) - User Secrets 사용: 로컬 개발 환경에서
dotnet user-secrets
로 비밀 정보를secrets.json
에 저장 (Git에 포함되지 않음) - Azure DevOps 파이프라인에서는 Pipeline Variable 활용:
PowerShell
스크립트로 환경 변수 설정 후dotnet test
실행 (예:Write-Host "##vso[task.setvariable variable=ServiceBusConnectionString;issecret=true]..."
)
섹션별 세부 요약
1. 문제 정의: 공개 저장소에서의 비밀 정보 유출 위험
- API 키, Connection String, 인증 토큰 등의 비밀 정보가
appsettings.json
에 저장되면 GitHub에 커밋된 후 영원히 저장됨 - 수동 삭제 방식(예:
commit
전 삭제)은 실수로 인해 유출 위험 증가
2. User Secrets 활용: 로컬 개발 환경 비밀 관리
dotnet user-secrets init
명령으로.csproj
에UserSecretsId
추가 (프로젝트와secrets.json
연동)dotnet user-secrets set "Settings:ServiceBus:DeleteUserAccount" "SecretValue"
명령으로 비밀 정보 저장appsettings.Development.json
에 빈 값으로 템플릿 제공 (예:"DeleteUserAccount": ""
)
3. Azure DevOps 파이프라인에서의 비밀 정보 설정
- Pipeline Variable 생성:
ServiceBusConnectionString
변수 생성 후 비밀 표시 (보안 강화) - PowerShell Task 추가:
dotnet test
전에##vso[task.setvariable]
명령으로 환경 변수 설정
```powershell
Write-Host "##vso[task.setvariable variable=ServiceBusConnectionString;issecret=true]SuaConnectionStringSuperSecretaAqui"
```
- CI/CD 자동화 시
secrets.json
파일이 포함되지 않도록 유의 (로컬 환경에서만 사용)
결론
- User Secrets과 Pipeline Variable을 결합하여 로컬/CI/CD 환경에서 비밀 정보를 안전하게 관리할 것
dotnet user-secrets
와PowerShell
스크립트를 활용한 환경 변수 설정은 테스트 실패 예방과 보안 강화에 필수적- 환경 변수 우선순위 (
User Secrets
>appsettings.Development.json
)를 이해하고,secrets.json
파일이 Git에 포함되지 않도록 주의해야 함