자습서: .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"

비밀로 키 자격 증명 모음 채우기

값이 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에 사용 권한을 할당합니다.

az keyvault set-policy 명령으로 키 자격 증명 모음에 이전에 만든 ID 사용 권한을 할당합니다.

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

가상 머신에 로그인

가상 머신에 로그인하려면 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를 삭제합니다.

다음 단계