Microsoft Entra 관리 ID를 사용하여 애플리케이션 빌드

완료됨

여러분은 이미 Azure VM을 만들고 시스템 관리 ID를 할당했습니다. 이 VM에서 실행되는 앱은 Azure 리소스에 대한 요청을 인증해야 합니다. 암호 또는 공유 키를 사용하는 대신 시스템 할당 관리 ID를 사용할 것입니다.

이 단원에서는 애플리케이션이 인증에 관리 ID를 사용하는 방법을 자세히 알아봅니다. Azure Key Vault를 사용하여 권한 부여 정책을 정의하는 방법을 알아보고 인증된 ID가 비밀 정보를 읽을 수 있도록 설정합니다.

관리 ID

이전 단원에서 Azure가 시스템 할당 관리 ID 및 사용자 할당 관리 ID를 지원한다는 것을 알아보았습니다. Azure는 시스템 할당 관리 ID를 만들고 관리합니다. 이는 특정 리소스와 밀접하게 연결되어 있습니다. 예를 들어 시스템에 할당된 관리 ID를 가진 VM을 만드는 경우 Azure가 자동으로 ID를 만듭니다. Azure는 이 ID를 VM에 연결합니다. VM이 삭제되면 ID도 삭제됩니다.

사용자 할당 관리 ID는 모든 리소스에 독립적입니다. 사용자가 할당한 관리 ID를 수동으로 만든 다음, 주식 추적 앱과 같은 리소스 또는 서비스에 할당합니다. 앱이 실행될 때 사용자 할당 관리 ID를 사용합니다. 앱이 액세스해야 하는 Azure 리소스에 대한 액세스 권한을 이 ID에 할당합니다. 이 방법을 사용하여 여러 VM에 앱을 배포할 수 있습니다. 앱은 각 VM에 대해 시스템 할당 관리 ID를 설정하는 대신 이 사용자 할당 관리 ID를 사용합니다.

사용자 할당 관리 ID 만들기 및 관리

Azure Portal 또는 명령 프롬프트에서 사용자 할당 관리 ID를 만들 수 있습니다. 다음 명령은 Azure CLI를 사용합니다.

az identity create \
  --name <identity name>
  --resource-group <resource group>

다음 명령을 실행하여 시스템 할당 관리 ID를 비롯한 ID 목록을 볼 수 있습니다. ID의 보안 주체 ID를 적어둡니다. Azure는 이 ID를 사용하여 권한을 할당하고 확인합니다.

az identity list \
  --resource-group <resource group>

ID를 만든 후에는 보안 주체 ID를 사용하여 ID를 리소스와 연결할 수 있습니다.

Azure 함수 앱에서 ID를 사용하려면 다음 명령을 실행합니다.

az functionapp identity assign \
  --name <function app name> \
  --resource-group <resource group> \
  --role <principal id>

함수 앱이 이 ID를 사용하여 실행됩니다. 앱은 이 ID에 제공되는 리소스에 액세스할 수 있습니다.

필요한 명령은 리소스마다 다릅니다. 예를 들어 ID에 Azure Key Vault에서 키를 읽고 나열하는 기능을 부여하려면 다음 명령을 실행합니다.

az keyvault set-policy \
    --name <key vault name> \
    --object-id <principal id> \
    --secret-permissions get list

사용자 할당 관리 ID를 삭제하려면 다음 명령을 실행합니다.

az identity delete \
  --name <identity name>
  --resource-group <resource group>

Azure Key Vault에서 관리 ID 사용

DefaultAzureCredential 공급자를 사용하면 애플리케이션이 Azure에 배포될 때 인증에 관리 ID를 사용하고 개발 중에 로컬 개발자 자격 증명을 사용할 수 있습니다. DefaultAzureCredential을 사용하려면 Azure.Identity 패키지를 설치해야 합니다.

dotnet install Azure.Identity

DefaultAzureCredential을 사용하여 이제 인증된 SecretClient를 만들 수 있습니다.

var client = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential());

클라이언트를 만든 다음 명명된 비밀을 검색합니다.

KeyVaultSecret secretWithValue = await client.GetSecretAsync(secret.Name).ConfigureAwait(false);