빠른 시작: .NET용 Azure Key Vault 비밀 클라이언트 라이브러리
.NET용 Azure Key Vault 비밀 클라이언트 라이브러리를 시작합니다. Azure Key Vault는 보안 비밀 저장소를 제공하는 클라우드 서비스입니다. 키, 암호, 인증서 및 기타 비밀을 안전하게 저장할 수 있습니다. Azure Portal을 통해 Azure Key Vault를 만들고 관리할 수 있습니다. 이 빠른 시작에서는 .NET 클라이언트 라이브러리를 사용하여 Azure Key Vault에서 비밀을 만들고, 검색하고, 삭제하는 방법을 알아봅니다.
Key Vault 클라이언트 라이브러리 리소스:
API 참조 설명서 | 라이브러리 소스 코드 | 패키지(NuGet)
Key Vault 및 비밀에 대한 자세한 내용은 다음을 참조하세요.
- Key Vault 개요
- 비밀 개요를 참조하세요.
필수 조건
- Azure 구독 - 체험 구독 만들기
- .NET 6 SDK 이상
- Azure CLI 또는 Azure PowerShell
- Key Vault - Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 만들 수 있습니다.
이 빠른 시작에서는 dotnet
및 Azure CLI 또는 Azure PowerShell을 사용합니다.
설정
이 빠른 시작에서는 Azure CLI와 함께 Azure ID 라이브러리를 사용하여 사용자를 Azure Services에 인증합니다. 개발자는 Visual Studio 또는 Visual Studio Code를 사용하여 해당 호출을 인증할 수도 있습니다. 자세한 내용은 Azure ID 클라이언트 라이브러리를 사용하여 클라이언트 인증을 참조하세요.
Azure에 로그인
az login
명령을 실행합니다.az login
CLI는 기본 브라우저를 열 수 있으면 기본 브라우저를 열고 Azure 로그인 페이지를 로드합니다.
그렇지 않으면 https://aka.ms/devicelogin 에서 브라우저 페이지를 열고 터미널에 표시된 권한 부여 코드를 입력합니다.
브라우저에서 계정 자격 증명으로 로그인합니다.
키 자격 증명 모음에 대한 액세스 권한 부여
RBAC(역할 기반 액세스 제어)를 통해 키 자격 증명 모음에 대한 권한을 얻으려면 Azure CLI 명령 az role assignment create을 사용하여 UPN("사용자 계정 이름")에 역할을 할당합니다.
az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
<upn>, <subscription-id>, <resource-group-name> 및 <your-unique-keyvault-name>을 실제 값으로 바꿉니다. UPN은 일반적으로 이메일 주소 형식(예: username@domain.com)입니다.
새 .NET 콘솔 앱 만들기
명령 셸에서 다음 명령을 실행하여
key-vault-console-app
이라는 이름의 프로젝트를 만듭니다.dotnet new console --name key-vault-console-app
새로 만든 key-vault-console-app 디렉터리로 변경하고, 다음 명령을 실행하여 프로젝트를 빌드합니다.
dotnet build
빌드 출력에 경고나 오류가 포함되지 않아야 합니다.
Build succeeded. 0 Warning(s) 0 Error(s)
패키지 설치
명령 셸에서 .NET용 Azure Key Vault 비밀 클라이언트 라이브러리를 설치합니다.
dotnet add package Azure.Security.KeyVault.Secrets
이 빠른 시작에서는 Azure ID 클라이언트 라이브러리도 설치해야 합니다.
dotnet add package Azure.Identity
환경 변수 설정
이 애플리케이션은 키 자격 증명 모음 이름을 KEY_VAULT_NAME
이라는 환경 변수로 사용합니다.
Windows
set KEY_VAULT_NAME=<your-key-vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<your-key-vault-name>"
macOS 또는 Linux
export KEY_VAULT_NAME=<your-key-vault-name>
개체 모델
.NET용 Azure Key Vault 비밀 클라이언트 라이브러리를 사용하면 비밀을 관리할 수 있습니다. 코드 예제 섹션에서는 클라이언트를 만들고, 비밀을 설정, 검색 및 삭제하는 방법을 보여줍니다.
코드 예제
지시문 추가
다음 지시문을 Program.cs의 위쪽에 추가합니다.
using System;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
클라이언트 인증 및 만들기
대부분의 Azure 서비스에 대한 애플리케이션 요청은 승인되어야 합니다. Azure.Identity 클라이언트 라이브러리에서 제공하는 DefaultAzureCredential 클래스를 사용하는 것은 코드에서 Azure 서비스에 대한 암호 없는 연결을 구현하는 데 권장되는 접근 방식입니다. DefaultAzureCredential
은 여러 인증 방법을 지원하고 런타임에 사용해야 하는 방법을 결정합니다. 이 방법을 사용하면 앱에서 환경별 코드를 구현하지 않고도 다양한 환경(로컬 및 프로덕션)에서 다양한 인증 방법을 사용할 수 있습니다.
이 빠른 시작에서 DefaultAzureCredential
은 Azure CLI에 로그인한 로컬 개발 사용자의 자격 증명을 사용하여 키 자격 증명 모음에 인증합니다. 애플리케이션이 Azure에 배포되면 동일한 DefaultAzureCredential
코드에서 App Service, 가상 머신 또는 기타 서비스에 할당된 관리 ID를 자동으로 검색하고 사용할 수 있습니다. 자세한 내용은 관리 ID 개요를 참조하세요.
이 예제에서 키 자격 증명 모음 이름은 https://<your-key-vault-name>.vault.azure.net
형식의 키 자격 증명 모음 URI로 확장됩니다. 키 자격 증명 모음 인증에 대한 자세한 내용은 개발자 가이드를 참조하세요.
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
비밀 저장
이제 콘솔 앱이 인증되었으므로 비밀을 키 자격 증명 모음에 추가합니다. 이 작업에는 SetSecretAsync 메서드를 사용합니다.
메서드의 첫 번째 매개 변수는 비밀 이름을 허용합니다. 이 샘플에서 변수 secretName
은 문자열 "mySecret"을 저장합니다.
메서드의 두 번째 매개 변수는 비밀에 대한 값을 허용합니다. 이 샘플에서 비밀은 명령줄을 통해 사용자가 입력하고 변수 secretValue
에 저장됩니다.
await client.SetSecretAsync(secretName, secretValue);
참고 항목
비밀 이름이 있는 경우 코드에서 해당 비밀의 새 버전을 만듭니다.
비밀 검색
이제 GetSecretAsync 메서드를 사용하여 이전에 설정한 값을 검색할 수 있습니다.
var secret = await client.GetSecretAsync(secretName);
이제 비밀이 secret.Value
로 저장됩니다.
비밀 삭제
마지막으로, StartDeleteSecretAsync 및 PurgeDeletedSecretAsync 메서드를 사용하여 키 자격 증명 모음에서 비밀을 삭제해 보겠습니다.
var operation = await client.StartDeleteSecretAsync(secretName);
// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();
await client.PurgeDeletedSecretAsync(secretName);
샘플 코드
다음 단계를 완료하여 Key Vault와 상호 작용하도록 .NET 콘솔 앱을 수정합니다.
Program.cs의 코드를 다음 코드로 바꿉니다.
using System; using System.Threading.Tasks; using Azure.Identity; using Azure.Security.KeyVault.Secrets; namespace key_vault_console_app { class Program { static async Task Main(string[] args) { const string secretName = "mySecret"; var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME"); var kvUri = $"https://{keyVaultName}.vault.azure.net"; var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential()); Console.Write("Input the value of your secret > "); var secretValue = Console.ReadLine(); Console.Write($"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ..."); await client.SetSecretAsync(secretName, secretValue); Console.WriteLine(" done."); Console.WriteLine("Forgetting your secret."); secretValue = string.Empty; Console.WriteLine($"Your secret is '{secretValue}'."); Console.WriteLine($"Retrieving your secret from {keyVaultName}."); var secret = await client.GetSecretAsync(secretName); Console.WriteLine($"Your secret is '{secret.Value.Value}'."); Console.Write($"Deleting your secret from {keyVaultName} ..."); DeleteSecretOperation operation = await client.StartDeleteSecretAsync(secretName); // You only need to wait for completion if you want to purge or recover the secret. await operation.WaitForCompletionAsync(); Console.WriteLine(" done."); Console.Write($"Purging your secret from {keyVaultName} ..."); await client.PurgeDeletedSecretAsync(secretName); Console.WriteLine(" done."); } } }
테스트 및 확인
다음 명령을 실행하여 앱을 실행합니다.
dotnet run
메시지가 표시되면 비밀 값을 입력합니다. 예를 들어 mySecretPassword입니다.
다음과 유사한 출력이 표시됩니다.
Input the value of your secret > mySecretPassword
Creating a secret in <your-unique-keyvault-name> called 'mySecret' with the value 'mySecretPassword' ... done.
Forgetting your secret.
Your secret is ''.
Retrieving your secret from <your-unique-keyvault-name>.
Your secret is 'mySecretPassword'.
Deleting your secret from <your-unique-keyvault-name> ... done.
Purging your secret from <your-unique-keyvault-name> ... done.
다음 단계
Key Vault 및 이를 앱과 통합하는 방법에 대해 자세히 알아보려면 다음 문서를 참조하세요.