비밀을 저장하는 ASP.NET 가장 좋은 방법
소개
이 기사의 목표는 값을 저장할 수 있는 일반적인 유형과 각 방법으로 얻을 수 있는 이점을 검토하는 것입니다. 구걸할 때 특히 자격 증명이나 기타 비밀을 저장하기 위해 이러한 모든 노력을 기울여야 하는 이유를 이해해야 합니다. 구성 파일에 직접 비밀을 추가하고 이러한 변경 사항을 git과 같은 제어 버전 시스템(CVS)에 푸시하는 것은 너무 위험합니다.
이 질문에 대답하는 것은 매우 간단합니다. 프로젝트에서 작업할 모든 개발자는 비밀 값에 액세스할 수 있습니다. 당신의 팀에서는 그들이 내부 회사의 데이터를 다른 사람에게 절대 공개하지 않는다는 것을 확신할 수 있지만, 그들의 작업 기계는 다른 방식으로 해킹될 수 있습니다. 가장 좋은 방법은 코드와 비밀 구성 값을 분리하는 것입니다.
그러나 우리는 애플리케이션을 위해 이러한 값에 액세스해야 합니다. .NET은 코드에서 비밀을 분리하는 방법에 대한 몇 가지 값을 제공합니다.
배포 중 구성 파일 생성
이 흐름에는 비밀을 유지하기 위한 추가 노력이 필요합니다. 이를 수행할 책임자는 모든 비밀에 액세스할 수 있으며 이는 여전히 모든 프로젝트의 취약점입니다. 이러한 파일은 환경별로 생성될 수 있으며 개발자가 추가 노력 없이 로컬 시스템에서 프로젝트를 실행할 수 있도록 CVS에 dev 버전을 추가할 수 있습니다.
환경 변수
개발자가 로컬 환경에서 설정해야 하는 변수에 대한 지침을 정의해야 합니다. 또한 DevOps 팀은 이러한 비밀의 적절한 유지 관리와 적절한 순환을 담당합니다.
Azure 키 자격 증명 모음
이 방법은 Azure에 비밀을 저장하고 단일 정보 소스로서 비밀 값을 회전하고 암호화하여 저장하는 모범 사례를 제공합니다.
실습
예제를 따르려면 솔루션에 다음 패키지를 추가해야 합니다.
Microsoft.Extensions.Configuration — 구성 작업을 위한 클래스가 포함된 기본 패키지입니다.
Microsoft.Extensions.Configuration.Binder — 구성에서 입력된 값을 가져오는 편리한 방법을 제공합니다.
Microsoft.Extensions.Configuration.Json — JSON 구성 파일을 로드할 수 있습니다.
Microsoft.Extensions.Configuration.AzureKeyVault — 구성에 Azure Key Vault 제공을 추가합니다.
Azure.Extensions.AspNetCore.Configuration.Secrets - 이 패키지를 사용하면 Azure 키 자격 증명 모음에서 비밀을 읽을 수 있습니다.
Azure.Identity — 키 자격 증명 모음에 액세스하는 데 사용되는 인증 클래스를 포함합니다.
콘솔에서 다음 명령을 실행하여 프로젝트에 패키지를 추가해 보겠습니다.
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Binder
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.Configuration.AzureKeyVault
dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
dotnet add package Azure.Identity
구성 파일은 기본 구성의 간단한 구조를 가지고 있습니다.
{
"NAMESPACE": {
"SECTIONNAME": {
"Key": "Value1"
}
}
}
파일 속성을 업데이트하고 파일을 출력 디렉토리에 복사하는 것을 잊지 마십시오:
`cs
using Azure.Extensions.AspNetCore.Configuration.Secrets;
using Azure.Identity;
using Microsoft.Extensions.Configuration;
var keyVaultUrl = "https://dev-readexample.vault.azure.net/";
var settingsPrefix = "NAMESPACE";
var sectionName = "SECTIONNAME";
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
builder.AddAzureKeyVault(new Uri(keyVaultUrl), new DefaultAzureCredential(), new AzureKeyVaultConfigurationOptions
{
ReloadInterval = TimeSpan.FromSeconds(3)
});
IConfigurationRoot configuration = builder.Build();
var section = configuration.GetSection($"{settingsPrefix}:{sectionName}");
var value = section.GetValue("key");
Console.WriteLine("Key has value {0}", value);
// delay allows us to update value in azure key vault
await Task.Delay(TimeSpan.FromSeconds(30));
var newValue = configuration.GetValue($"{settingsPrefix}:{sectionName}:key");
Console.WriteLine("Key has value {0}", newValue);
`
어떤 일이 일어나는지 이해하기 위해 예를 검토해 보겠습니다.
We create ConfigurationBuilder and add 2 provides one that allows us to read values from JSON files. And we can grab a configuration that is stored directly in JSON without any request to Azure. Also, we added AzureKeyVaultProvider, and now our configuration can read secrets from Azure. To properly configure AzureKeyVaultProvider, we need to pass the key vault URL and credentials, which should be used to access the key vault.
You can check how DefaultAzureCredential works in the next image:
As you can notice, an additional configuration was provided to AzureKeyVaultProvider that tells to reload settings from KeyVault every 3 seconds. Please be careful with this configuration. Azure changes 0.03$ per 10k requests at the moment of writing the article. The application will check for new value in Azure for key 12 times per minute. With simple math calculations:
12 * 60 min * 24hours * 30 days = 518400 requests / 10000 * 0.03 = 1.5552$ per month.
It`s just for a single secret and single application instance per month.
Also, you should remember that in order to map the JSON setting page in Azure, you should follow the dash notation as in the following image:
결론
If you are going to host your application in Azure, it`s better to follow best practices and store your secrets in Azure Key Vault. Just be aware of how often your application loads data from the key vault because it can increase your monthly bill. Good luck.
Any questions or comments? Ping me on LinkedIn or comment below. And if you liked this post, please give it a clap and share it with all of your friends.
Twitter:
Linkedin:
More articles you can find at:
https://blog.akyltech.com/
Reference
이 문제에 관하여(비밀을 저장하는 ASP.NET 가장 좋은 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/akyltech/aspnet-best-way-to-store-secrets-4j8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)