자습서: Windows VM에서 사용자 할당 관리 ID를 사용하여 Azure Resource Manager에 액세스

이 자습서에서는 사용자 할당 ID를 만들어서, Windows VM(가상 머신)에 할당한 다음, 이 ID를 사용하여 Azure Resource Manager API에 액세스하는 방법을 설명합니다. 관리 서비스 ID는 Azure에서 자동으로 관리됩니다. 그러면 코드에 자격 증명을 포함할 필요 없이 Azure AD 인증을 지원하는 서비스에 인증할 수 있습니다.

다음 방법을 알아봅니다.

  • 사용자 할당 관리 ID 만들기
  • 사용자 할당 ID를 Windows VM에 할당
  • 사용자 할당 ID에 Azure Resource Manager의 리소스 그룹 액세스 권한 부여
  • 사용자 할당 ID를 사용하여 액세스 토큰을 가져와서 Azure Resource Manager를 호출하는 데 사용
  • Resource Group의 속성 읽기

참고

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

사전 요구 사항

  • Azure 리소스에 대한 관리 ID 기능이 익숙하지 않은 경우 개요를 참조하세요. Azure 계정이 없으면 계속하기 전에 체험 계정에 등록합니다.
  • Azure Portal에 로그인

  • Windows 가상 머신 만들기

  • 이 자습서에서 필요한 리소스 만들기 및 역할 관리 단계를 수행하려면 적절한 범위(사용자 구독 또는 리소스 그룹)에서 계정에 “소유자” 권한이 필요합니다. 역할 할당에 관한 도움이 필요한 경우 Azure 역할을 할당하여 Azure 구독 리소스에 대한 액세스 관리를 참조하세요.

  • 예제 스크립트를 실행하려면 다음 두 가지 옵션을 사용합니다.

    • 코드 블록의 오른쪽 위 모서리에 있는 사용해 보기 단추를 사용하여 열 수 있는 Azure Cloud Shell을 사용합니다.
    • 다음 섹션에 설명된 대로 Azure PowerShell을 사용하여 로컬로 스크립트를 실행합니다.

로컬로 Azure PowerShell 구성

이 문서에 로컬로 Azure PowerShell을 사용(Cloud Shell을 사용하는 대신)하려면 다음 단계를 완료합니다.

  1. 아직 설치하지 않은 경우 Azure PowerShell 최신 버전을 설치합니다.

  2. Azure에 로그인:

    Connect-AzAccount
    
  3. PowerShellGet 최신 버전을 설치합니다.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    다음 단계에서 이 명령을 실행한 후 현재 PowerShell 세션에서 Exit를 제거해야 합니다.

  4. Az.ManagedServiceIdentity 모듈의 시험판 버전을 설치하여 이 문서의 사용자 할당 관리 ID 작업을 수행합니다.

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

사용

사용자 할당 ID를 기반으로 하는 시나리오의 경우 다음 단계를 수행해야 합니다.

  • ID 만들기
  • 새로 만든 ID 할당

ID 만들기

이 섹션에서는 사용자 할당 ID를 만드는 방법을 보여줍니다. 사용자 할당 ID는 독립 실행형 Azure 리소스로 생성됩니다. New-AzUserAssignedIdentity를 사용하면 하나 이상의 Azure 서비스 인스턴스를 할당할 수 있는 Azure AD 테넌트에 ID가 만들어집니다.

중요

사용자 할당 관리 ID를 만드는 경우, 영숫자 문자(0-9, a-z, A-Z) 및 하이픈(-)만 지원됩니다. 가상 머신 또는 가상 머신 확장 집합에 대한 할당이 제대로 작동하려면 이름이 24자로 제한됩니다. 자세한 내용은 FAQ 및 알려진 문제를 참조하세요.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

응답에는 다음 예제와 같이 생성된 사용자 할당 ID에 대한 세부 정보가 포함됩니다. 사용자 할당 ID의 IdClientId 값을 적어 둡니다. 후속 단계에서 사용됩니다.

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: 733a8f0e-ec41-4e69-8ad8-971fc4b533f8
PrincipalId: e591178e-b785-43c8-95d2-1397559b2fb9
ClientId: af825a31-b0e0-471f-baea-96de555632f9
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=733a8f0e-ec41-4e69-8ad8-971fc4b533f8&oid=e591178e-b785-43c8-95d2-1397559b2fb9&aid=af825a31-b0e0-471f-baea-96de555632f9
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

ID 할당

이 섹션에서는 사용자 할당 ID를 Windows VM에 할당하는 방법을 보여줍니다. 사용자 할당 ID는 여러 Azure 리소스에 있는 클라이언트에 사용될 수 있습니다. 다음 명령을 사용하여 사용자 할당 ID를 단일 VM에 할당합니다. 이전 단계에서 반환된 Id 속성을 -IdentityID 매개 변수에 사용합니다.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

액세스 권한 부여

이 섹션에서는 Azure Resource Manager의 리소스 그룹에 사용자 할당 ID 액세스 권한을 부여하는 방법을 보여줍니다. Azure 리소스에 대한 관리 ID는 Azure AD 인증을 지원하는 리소스 API를 인증하는 액세스 토큰을 요청하기 위해 코드에 사용할 수 있는 ID를 제공합니다. 이 자습서에서 코드는 Azure Resource Manager API에 액세스합니다.

코드가 API에 액세스할 수 있으려면 그 전에 Azure Resource Manager의 리소스에 ID 액세스 권한을 부여해야 합니다. 이 경우에는 VM이 포함된 리소스 그룹입니다. <SUBSCRIPTION ID>의 값을 환경에 적합하게 업데이트합니다.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

응답에는 다음 예제와 같이 만든 역할 할당에 대한 세부 정보가 포함됩니다.

RoleAssignmentId: /subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/f9cc753d-265e-4434-ae19-0c3e2ead62ac
Scope: /subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId: e591178e-b785-43c8-95d2-1397559b2fb9
ObjectType: ServicePrincipal
CanDelegate: False

데이터 액세스

액세스 토큰 가져오기

자습서의 나머지 부분에서는 앞서 만든 VM에서 작업합니다.

  1. https://portal.azure.com에서 Azure Portal에 로그인합니다.

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

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

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

  5. PowerShell의 Invoke-WebRequest를 사용하여 Azure Resource Manager에 대한 액세스 토큰을 가져오도록 Azure 리소스 엔드포인트의 로컬 관리 ID에 요청합니다. client_id 값은 사용자 할당 관리 ID를 만들 때 반환되는 값입니다.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=af825a31-b0e0-471f-baea-96de555632f9&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

속성 읽기

이전 단계에서 검색한 액세스 토큰을 사용하여 Azure Resource Manager에 액세스하고, 사용자 할당 ID 액세스 권한을 부여한 리소스 그룹의 속성을 읽습니다. <SUBSCRIPTION ID>를 환경의 구독 ID로 바꿉니다.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

응답은 다음 예제와 비슷하게 특정 리소스 그룹 정보를 포함합니다.

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

다음 단계

이 자습서에서는 사용자 할당 ID를 만들고 이를 Azure Virtual Machine에 연결하여 Azure Resource Manager API에 액세스하는 방법을 설명합니다. Azure Resource Manager에 대한 자세한 내용은 다음을 참조하세요.