appSetting.json에 암호 및 기타 중요한 데이터를 저장하지 말아야 하는 이유
database connection string, third party service credentials, encryption key등을 asp.net에서는 web.config파일에 asp.net core에서는 appSetting.json파일에 저장한다.
이 파일들은 프로젝트에 포함되어 있어, source control repository에 commit할때 업로드 되어, repository접근 권한이 있는 자는 누구나 접근이 가능해진다. 보안에 취약하다.
Secret Manager 사용방법
Secret Manager는 secrets.json파일에 민감 정보를 저장한다. sercrets.json 파일을 추가하기 위해서는 프로젝트 우측마우스를 클릭하고 '사용자 암호 관리'를 선택한다. 이 파일의 구조는 appSetting.json과 비슷하다. 중요한 점은 프로젝트 폴더에 위치하지 않다는 점이다. 이 파일은 프로젝트 폴더 바깥에 아래 경로에 있다.
C:\Users\{UserName}\AppData\Roaming\Microsoft\UserSecrets\{ID}
{UserName} : 윈도우 사용자 명
{ID} : GUID (Globally Unique Identifier)
secrets.json 파일을 추가하면 csproj 파일에 아래 태그가 추가된다.
<PropertyGroup>
<UserSecretsId>c550082c-24d3-44a2-ab00-ffee6c70d0eb</UserSecretsId>
</PropertyGroup>
Secret Manager를 사용하여 database connection string 관리하기
appSetting.json에 저장되어 있던 connectionstring을 secrets.json 파일로 옮기기
{
"ConnectionStrings": {
"DefaultConnection": "Server=;database=;uid=;pwd=;"
}
}
Program.cs는 기존과 동일하다
builder.Services.AddDbContext<ApplicationDbContext>(option => option.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")
));
WebApplicationBuilder는 Development에서 기본으로 AddUserSecrets를 호출한다.
User Secrets in production
ASP.NET Core에서 configuration setting은 아래의 파일에서 관리할 수 있다. 그리고, IConfiguration service는 아래 파일들에서 데이터를 읽어올 수 있도록 한다.
- appSetting.json
- secrets.json
- Environment variables
- Command-line arguments
secrets.json 파일은 Production server에서는 사용할 수 없으며, environment variables, azure key vault, 3rd party production secret management system을 사용해야 한다.
'ASP.NET Core' 카테고리의 다른 글
ASP.NET Core] Configuration (0) | 2022.01.20 |
---|---|
ASP.NET Core 6] Kestrel vs IIS, Hosting Model (0) | 2022.01.18 |
ASP.NET Core] Authorization Handler (0) | 2022.01.17 |
ASP.NET Core] Custom Authorization Policy, Custom Authorization Requirement & Handler (0) | 2022.01.17 |
ASP.NET Core 6] Service - AddTransient, AddScoped, AddSingleton 차이점 (0) | 2022.01.17 |
댓글