자습서: .NET에서 가상 머신이 있는 Azure Key Vault 사용
Azure Key Vault를 통해 애플리케이션, 서비스 및 IT 리소스에 액세스하는 데 필요한 API 키, 데이터베이스 연결 문자열과 같은 비밀을 보호할 수 있습니다.
이 자습서에서는 Azure Key Vault에서 정보를 읽는 콘솔 애플리케이션을 가져오는 방법을 알아봅니다. 애플리케이션은 가상 머신 관리 ID를 사용하여 Key Vault에 인증합니다.
이 자습서에서는 다음을 수행하는 방법에 대해 설명합니다.
- 리소스 그룹을 만듭니다.
- 키 자격 증명 모음을 생성합니다.
- 키 자격 증명 모음에 비밀 추가
- 키 자격 증명 모음에서 비밀을 검색합니다.
- Azure 가상 머신을 만듭니다.
- Virtual Machine에 관리 ID를 사용하도록 설정합니다.
- VM ID에 사용 권한을 할당합니다.
시작하기 전에 Key Vault 기본 개념을 읽어보세요.
Azure 구독이 없는 경우 무료 계정을 만드세요.
필수 조건
Windows, Mac 및 Linux:
리소스 만들기 및 권한 할당
코딩을 시작하기 전에 몇 가지 리소스를 만들고, 키 자격 증명 모음에 비밀을 배치하고, 사용 권한을 할당해야 합니다.
Azure에 로그인
다음 명령을 사용하여 Azure에 로그인하려면 다음을 수행합니다.
az login
리소스 그룹 및 키 자격 증명 모음 만들기
이 빠른 시작에서는 미리 만든 Azure Key Vault를 사용합니다. Azure CLI 빠른 시작, Azure PowerShell 빠른 시작 또는 Azure Portal 빠른 시작의 단계에 따라 키 자격 증명 모음을 만들 수 있습니다.
또는 다음의 Azure CLI 또는 Azure PowerShell 명령을 실행할 수 있습니다.
Important
각 Key Vault마다 고유한 이름이 있어야 합니다. 다음 예제에서는 <your-unique-keyvault-name>을 키 자격 증명 모음의 이름으로 바꿉니다.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization
비밀로 키 자격 증명 모음 채우기
값이 Success!인 mySecret이라는 비밀을 만들어 보겠습니다. 비밀은 안전하게 유지하면서도 애플리케이션에서 사용할 수 있어야 하는 암호, SQL 연결 문자열 또는 기타 정보입니다.
새로 만든 키 자격 증명 모음에 비밀을 추가하려면 다음 명령을 사용합니다.
az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"
가상 머신 만들기
다음 방법 중 하나를 사용하여 Windows 또는 Linux 가상 머신을 만듭니다.
Windows | Linux |
---|---|
Azure CLI | Azure CLI |
PowerShell | PowerShell |
Azure Portal | Azure Portal |
VM에 ID 할당
다음 예제를 사용하여 가상 머신에 대한 시스템 할당 ID를 만듭니다.
az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>
다음 코드에 표시되는 시스템 할당 ID를 기록해 둡니다. 위 명령의 출력은 다음과 같습니다.
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
VM ID에 사용 권한을 할당합니다.
RBAC(역할 기반 액세스 제어)를 통해 키 자격 증명 모음에 애플리케이션 권한을 부여하려면 az role assignment create Azure CLI 명령을 사용하여 역할을 할당합니다.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
<app-id>
, <subscription-id>
. <resource-group-name>
및 <your-unique-keyvault-name>
을 실제 값으로 바꿉니다. <app-id>
는 Microsoft Entra에 등록된 애플리케이션의 애플리케이션(클라이언트) ID입니다.
가상 머신에 로그인
가상 머신에 로그인하려면 Azure Windows 가상 머신에 연결 및 로그인 또는 Azure Linux 가상 머신에 연결 및 로그인의 지침을 따르세요.
콘솔 앱 설정
dotnet
명령을 사용하여 콘솔 앱을 만들고 필요한 패키지를 설치합니다.
.NET Core 설치
.NET Core를 설치하려면 .NET 다운로드 페이지로 이동합니다.
샘플 .NET 앱 만들기 및 실행
명령 프롬프트가 엽니다.
다음 명령을 실행하여 "Hello World"를 콘솔에 출력할 수 있습니다.
dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run
패키지 설치
콘솔 창에서 .NET용 Azure Key Vault 비밀 클라이언트 라이브러리를 설치합니다.
dotnet add package Azure.Security.KeyVault.Secrets
이 빠른 시작에서는 다음 ID 패키지를 설치하여 Azure Key Vault에 인증해야 합니다.
dotnet add package Azure.Identity
콘솔 앱 편집
Program.cs 파일을 열고 다음 패키지를 추가합니다.
using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
다음 줄을 추가하여, 키 자격 증명 모음의 vaultUri
를 반영하도록 URI를 업데이트합니다. 아래 코드에서는 키 자격 증명 모음에 대한 인증을 위해 'DefaultAzureCredential()'을 사용하며, 이는 애플리케이션 관리 ID의 토큰을 사용하여 인증합니다. 또한 키 자격 증명 모음이 제한되는 경우 지수 백오프를 다시 시도에 사용합니다.
class Program
{
static void Main(string[] args)
{
string secretName = "mySecret";
string keyVaultName = "<your-key-vault-name>";
var kvUri = "https://<your-key-vault-name>.vault.azure.net";
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);
Console.Write("Input the value of your secret > ");
string secretValue = Console.ReadLine();
Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");
client.SetSecret(secretName, secretValue);
Console.WriteLine(" done.");
Console.WriteLine("Forgetting your secret.");
secretValue = "";
Console.WriteLine("Your secret is '" + secretValue + "'.");
Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");
KeyVaultSecret secret = client.GetSecret(secretName);
Console.WriteLine("Your secret is '" + secret.Value + "'.");
Console.Write("Deleting your secret from " + keyVaultName + " ...");
client.StartDeleteSecret(secretName);
System.Threading.Thread.Sleep(5000);
Console.WriteLine(" done.");
}
}
리소스 정리
더 이상 필요하지 않으면 가상 머신 및 Key Vault를 삭제합니다.