Windows VM 시스템 할당 관리 ID를 사용하여 Resource Manager에 액세스

Azure 리소스에 대한 관리 ID는 Microsoft Entra ID의 기능입니다. Azure 리소스에 대한 관리 ID를 지원하는 각 Azure 서비스는 자체 타임라인을 따릅니다. 시작하기 전에 리소스의 관리 ID 가용성 상태와 알려진 문제를 검토하세요.

이 자습서에서는 시스템 할당 관리 ID를 사용하도록 설정된 Windows 가상 머신을 사용하여 Azure Resource Manager API에 액세스하는 방법을 보여줍니다. Azure 리소스의 관리 ID는 Azure에서 자동으로 관리되며 이를 사용하면 Microsoft Entra 인증을 지원하는 서비스에 인증할 수 있으므로 코드에 자격 증명을 삽입할 필요가 없습니다. 다음 방법에 대해 설명합니다.

  • VM에 Azure Resource Manager의 리소스 그룹 액세스 권한 부여
  • VM ID를 사용하여 액세스 토큰을 가져온 다음 Azure Resource Manager를 호출하는 데 사용

필수 조건

Enable

한 번의 클릭으로 시스템 할당 관리 ID를 활성화할 수 있습니다. VM을 만드는 동안 또는 기존 VM의 속성에서 이 기능을 활성화할 수 있습니다.

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

기존 VM에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음을 수행합니다.

  1. Azure 포털

  2. 시스템 할당 ID가 설정된 가상 머신 만들기

VM에 Resource Manager의 리소스 그룹 액세스 권한 부여

이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.

Azure 리소스의 관리 ID를 사용하면 애플리케이션에서 Microsoft Entra 인증을 지원하는 리소스에 인증하기 위한 액세스 토큰을 가져올 수 있습니다. Azure Resource Manager API는 Microsoft Entra 인증을 지원합니다. 이 VM의 ID에 Azure Resource Manager의 리소스(이 경우 리소스 그룹)에 대한 액세스 권한을 부여합니다. 리소스 그룹의 범위에서 관리 ID에 읽기 권한자 역할을 할당합니다.

  1. 관리자 계정으로 Azure Portal에 로그인합니다.
  2. 리소스 그룹의 탭으로 이동합니다.
  3. VM의 관리 ID에 액세스 권한을 부여할 리소스 그룹을 선택합니다.
  4. 왼쪽 창에서 액세스 제어(IAM)를 선택합니다.
  5. 추가를 선택한 다음 역할 할당 추가를 선택합니다.
  6. 역할 탭에서 읽기 권한자를 선택합니다. 이 역할이 있으면 모든 리소스를 볼 수 있지만 변경할 수는 없습니다.
  7. 멤버 탭에서 다음에 대한 액세스 할당에 대해 관리 ID를 선택합니다. 그런 후 + 멤버 선택을 선택합니다.
  8. 구독 드롭다운에 적절한 구독이 나열되어 있는지 확인합니다. 그리고 리소스 그룹에서는 모든 리소스 그룹을 선택합니다.
  9. 관리 ID 드롭다운에서 가상 머신을 선택합니다.
  10. 마지막으로 선택의 드롭다운에서 Windows Virtual Machine을 선택하고 저장을 선택합니다.

VM의 시스템 할당 관리 ID를 통해 액세스 토큰을 가져오고 Azure Resource Manager를 호출하는 데 사용합니다.

이 부분에서는 PowerShell을 사용해야 합니다. PowerShell이 설치되어 있지 않으면 여기서 다운로드하세요.

  1. Portal에서 Virtual Machines -> Windows 가상 머신으로 이동한 다음, 개요에서 연결을 선택합니다.

  2. Windows VM을 만들 때 추가한 사용자 이름암호를 입력합니다.

  3. 이제 가상 머신에 대한 원격 데스크톱 연결을 만들었으므로 원격 세션에서 PowerShell을 엽니다.

  4. Invoke-WebRequest cmdlet을 사용하여 Azure Resource Manager에 대한 액세스 토큰을 가져오도록 Azure 리소스 엔드포인트의 로컬 관리 ID에 요청합니다.

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    

    참고 항목

    "resource" 매개 변수의 값은 Microsoft Entra ID에서 예상하는 값과 정확히 일치해야 합니다. Azure Resource Manager 리소스 ID를 사용할 때는 URI에 후행 슬래시를 포함해야 합니다.

    다음으로 $response 개체에서 JSON(JavaScript Object Notation) 형식의 문자열로 저장된 전체 응답을 추출합니다.

    $content = $response.Content | ConvertFrom-Json
    

    다음으로는 응답에서 액세스 토큰을 추출합니다.

    $ArmToken = $content.access_token
    

    마지막으로 액세스 토큰을 사용하여 Azure Resource Manager를 호출합니다. 또한 이 예제에서는 Invoke-WebRequest cmdlet을 사용하여 Azure Resource Manager를 호출하고, 인증 헤더에 액세스 토큰을 포함합니다.

    (Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"}).content
    

    참고 항목

    URL은 대/소문자를 구분하므로 앞서 리소스 그룹의 이름을 지정할 때 사용했던 것과 정확히 동일한 대/소문자를 사용해야 하며, “resourceGroups”와 같이 대문자 “G”를 사용해야 합니다.

    다음 명령은 리소스 그룹의 세부 정보를 반환합니다.

    {"id":"/subscriptions/98f51385-2edc-4b79-bed9-7718de4cb861/resourceGroups/DevTest","name":"DevTest","location":"westus","properties":{"provisioningState":"Succeeded"}}
    

다음 단계

이 빠른 시작에서는 시스템 할당 관리 ID를 사용하여 Azure Resource Manager API에 액세스하는 방법을 알아보았습니다. Azure Resource Manager에 대한 자세한 내용은 다음을 참조하세요.