[ASP.NET Core] Key Vault 사용

2020. 5. 21. 19:47WEB/ASP.NET Core

Azure Key Valut for ASP.NET Core 3.1

ASP.NET Core 프로젝트에서는 DB연결 문자열이나 중요 정보들을 주로 appsettings.json에 저장합니다. 하지만 소스코드를 저장소에 업로드 할 때 appsettings.json에 포함된 민감한 정보도 업로드 되기 때문에 보안 상 취약한 구조를 가집니다. Secret Manager를 사용하면 민감한 정보를 프로젝트가 아닌 운영체제에 저장되게 할 수 있습니다. 하지만 설정과정도 복잡하고 개발자 PC 마다 따로 설정을 해야하는 번거로움이 있습니다.

이 포스트에서는 Azure Key Vault를 사용하여 민감한 정보를 프로젝트나 개인의 PC가 아니라 Azure 클라우드 저장소에서 저장하는 방법을 소개합니다. Azure Key Vault를 사용하면 개발 할 때와 호스팅 할 때 다른 정보를 사용하도록 할 수 있기 때문에 개발과 배포가 한결 간편해집니다.

HelpImage

사전준비

  • VisualStudio 2019를 기준으로 작성하였습니다.
  • Azure 구독이 되어 있어야 합니다.
  • ASP.NET Core 3.1 프로젝트를 사용하였습니다.

Azure Key Valut 설정

브라우저를 실행하고 https://portal.azure.com/에 접속합니다. Azure에 로그인하고 [리소스 그룹]을 생성합니다.
HelpImage

이제 Key Valut (키 자격 증명 모음)로 이동합니다.
HelpImage

[추가] 버튼을 클릭 하고 Key Valut를 생성합니다. (Azure 공식문서)

  • 주요 자격 증명 모음 이름: Key Valut의 이름입니다.
  • 일시 삭제: Key Valut를 삭제하더라도 즉시 삭제되지 않고, 복구 기간을 둘지 설정합니다.
  • 보존 기간(일): Key Valut를 삭제했을 때 지정한 기간 내에는 복구할 수 있습니다.
  • 제거 보호: 제거가 불가능하게 설정합니다. 

Key Valut 생성(배포)가 완료되면, 생성된 Key Vault를 검색하여 해당 리소스로 이동합니다.
HelpImage

좌측 메뉴에서 비밀(Secret)를 클릭하여 원하는 설정 값을 추가합니다.
HelpImage

ASP.NET Core에서 Key Vault 사용

생성된 Key Vault를 ASP.NET Core 프로젝트에서 사용하는 방법은 매우 간단합니다.

  1. VisualStudio 2019에서 ASP.NET Core 3.1 프로젝트를 실행합니다.
  2. 프로젝트를 마우스 오른쪽 클릭 한 후 Add / Connected Service를 클릭합니다.
    HelpImage
  3. Secure Secrets with zure Key Valut를 선택합니다.
    HelpImage
  4. Azure Portal에서 추가했던 Key Valut를 선택하고 Add를 클릭합니다. 작업이 완료되면 프로젝트의 Connected Services 폴더에 Key Valut 설정파일이 추가됩니다.
    HelpImage
  5. Key Vault 값을 조회하려면 IConfiguration을 Inject 받은 후, 해당 Key 값으로 조회하시면 됩니다. (기존 appsettings.json 조회 방법과 동일)
    HelpImage
    참고로 ASP.NET Core 프로젝트는 Configuration 값을 다음과 같은 순서로 조회합니다.
    • Key Valut에서 검색
    • Key Valut에 없으면 secrets.json 파일에서 검색 (User Secret)
    • secrets.json에 없으면 appsettings.json 파일에서 검색

Azure App Service 배포설정

ASP.NET Core 프로젝트를 Azure App Service로 배포한 후, 특정 Key Valut를 사용하도록 설정할 수 있습니다.

  1. Key Valut 페이지의 좌측 메뉴에서 Access policies를 클릭합니다. 하나 이상의 Access Policy를 설정합니다.
    HelpImage
  2. 호스팅 할 App Service를 생성 한 후, 좌측 메뉴에서 Identity (ID)를 클릭합니다. System assigned에서 Status를 On으로 설정합니다. 이로써 App Service가 Key Vault에 접근이 가능해집니다.
    HelpImage
  3. VisualStudio 2019에서 프로젝트를 마우스 우클릭 한 후 Publish를 클릭합니다. 
    HelpImage
  4. Azure App Service를 선택하고 Publish Profile을 생성합니다.
  5. 생성이 완료되면 하단에 Dependencies의 Add 버튼을 클릭합니다.
    HelpImage
  6. Azure Key Valut를 선택하고, 사용할 Key Vault를 선택하고 Finish 버튼을 클릭합니다.
    HelpImage
  7. 설정 정보는 Properties / PublishProfiles 폴더와 launchSettings.json에 저장되게 됩니다. 이 파일에는 민감한 정보가 포함되어 있으므로 GitHub 등 소스컨트롤에 저장되지 않게 주의해주세요.

References