다음을 통해 공유


자습서: Linux VM/VMSS를 사용하여 Azure 리소스에 액세스

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

필수 조건

Linux VM 시스템 할당 관리 ID를 사용하여 Azure Data Lake Store에 액세스

이 자습서에서는 Linux VM(가상 머신)에 대한 시스템 할당 관리 ID를 사용하여 Azure Data Lake Store에 액세스하는 방법을 보여 줍니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • VM에 Azure Data Lake Store에 대한 액세스 권한 부여
  • VM의 시스템 할당 관리 ID를 사용하여 Azure Data Lake Store에 액세스하도록 액세스 토큰을 가져옵니다.

액세스 허가

이 섹션에서는 Azure Data Lake Store에 있는 파일 및 폴더에 VM 액세스 권한을 부여하는 방법을 보여줍니다. 이 단계에서는 기존 Data Lake Store 인스턴스를 사용하거나 새로 만들 수 있습니다. Azure Portal을 사용하여 Data Lake Store 인스턴스를 만들려면 이 Azure Data Lake Store 빠른 시작을 참조하세요. Azure Data Lake Store 설명서에는 Azure CLI 및 Azure PowerShell을 사용하는 빠른 시작도 있습니다.

Data Lake Store에서 새 폴더를 만들고 Linux VM 시스템 할당 관리 ID 권한을 부여하여 해당 폴더에서 파일을 읽고, 쓰고, 실행할 수 있습니다.

  1. Azure Portal의 왼쪽 창에서 Data Lake Store를 선택합니다.
  2. 사용할 Data Lake Store 인스턴스를 선택합니다.
  3. 명령 모음에서 데이터 탐색기를 선택합니다.
  4. Data Lake Store 인스턴스의 루트 폴더가 선택됩니다. 명령 모음에서 액세스를 선택합니다.
  5. 추가를 선택합니다. 선택 상자에 VM의 이름을 입력합니다. 예: DevTestVM. 검색 결과에서 VM을 선택한 다음 선택을 선택합니다.
  6. 권한 선택을 선택합니다. 읽기실행을 선택하고 이 폴더에 추가하고 액세스 권한만 추가한 다음 확인을 선택합니다. 사용 권한은 성공적으로 추가되어야 합니다.
  7. 액세스 창을 닫습니다.
  8. 새 폴더를 만든 다음 명령 모음에서 새 폴더를 선택하고 새 폴더에 이름을 지정합니다. 예를 들어 TestFolder 선택 후 확인을 선택합니다.
  9. 만든 폴더를 선택한 다음 명령 모음에서 Access를 선택합니다.
  10. 추가를 선택한 다음, 선택 상자에서 VM의 이름을 입력합니다.
  11. 검색 결과에서 VM을 선택한 다음 선택을 선택합니다.
  12. 사용 권한을 선택한 다음 읽기를 선택한 다음, 쓰기실행을 선택합니다.
  13. 이 폴더에 추가하려면, 액세스 권한 항목 및 기본 사용 권한 항목 추가를 선택한 다음, 확인을 선택합니다. 사용 권한은 성공적으로 추가되어야 합니다.

이제 사용자가 만든 폴더의 파일에 Azure 리소스에 대한 관리 ID가 모든 작업을 수행할 수 있습니다. Data Lake Store에 대한 액세스 권한을 관리하는 방법에 대한 자세한 내용은 Data Lake Store의 Access Control을 참조하세요.

액세스 토큰 가져오기

이 섹션에서는 액세스 토큰을 가져오고 Data Lake Store 파일 시스템을 호출하는 방법을 보여줍니다. Azure Data Lake Store는 기본적으로 Microsoft Entra 인증을 지원하므로 Azure 리소스에 대한 관리 ID를 사용하여 가져오는 액세스 토큰을 직접 수락할 수 있습니다.

Data Lake Store 파일 시스템을 인증하려면 Microsoft Entra ID에서 발급한 액세스 토큰을 Data Lake Store 파일 시스템 엔드포인트로 보냅니다. 액세스 토큰은 Bearer \<ACCESS_TOKEN_VALUE\> 형식의 권한 부여 헤더에 있습니다. Microsoft Entra 인증을 위한 Data Lake Store 지원에 대해 자세히 알아보려면 Microsoft Entra ID를 사용하여 Data Lake Store로 인증을 참조하세요.

다음으로, cURL을 사용하여 REST 요청을 수행하여 Data Lake Store 파일 시스템에 대한 REST API에 인증합니다.

참고 항목

Data Lake Store 파일 시스템용 클라이언트 SDK는 Azure 리소스에 대한 관리 ID를 아직 지원하지 않습니다.

아래의 단계를 완료하려면 SSH 클라이언트가 필요합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

  1. 포털에서 Linux VM으로 이동한 다음, 개요 섹션에서 연결을 선택합니다.

  2. 원하는 SSH 클라이언트를 사용하여 VM에 연결합니다.

  3. 터미널 창에서 cURL을 사용하여 Azure 리소스 엔드포인트용 로컬 관리 ID Azure에 요청하여 Data Lake Store 파일 시스템에 대한 액세스 토큰을 가져옵니다. Data Lake Store의 리소스 식별자는 https://datalake.azure.net/입니다. 리소스 식별자에 후행 슬래시를 포함해야 합니다.

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -H Metadata:true   
    

    성공적인 응답에는 Data Lake Store에 인증하는 데 사용하는 액세스 토큰이 반환됩니다.

    {"access_token":"eyJ0eXAiOiJ...",
     "refresh_token":"",
     "expires_in":"3599",
     "expires_on":"1508119757",
     "not_before":"1508115857",
     "resource":"https://datalake.azure.net/",
     "token_type":"Bearer"}
    
  4. cURL을 사용하여 Data Lake Store 파일 시스템의 REST 엔드포인트에 요청하여 루트 폴더의 폴더를 나열합니다. 이 방법은 모든 것이 올바르게 구성되었는지 확인하는 가장 좋은 방법입니다. 이전 단계에서 액세스 토큰의 값을 복사합니다. 권한 부여 헤더에 Bearer 문자열에 대문자 "B"가 있는 것이 중요합니다. Azure Portal에 있는 Data Lake Store 창의 개요 섹션에서 Data Lake Store 인스턴스의 이름을 찾을 수 있습니다.

    curl https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -H "Authorization: Bearer <ACCESS_TOKEN>"
    

    성공적인 응답은 다음과 같습니다.

    {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY","blockSize":0,"accessTime":1507934941392,"modificationTime":1508105430590,"replication":0,"permission":"770","owner":"bd0e76d8-ad45-4fe1-8941-04a7bf27f071","group":"bd0e76d8-ad45-4fe1-8941-04a7bf27f071"}]}}
    
  5. 이제 Data Lake Store 인스턴스에 파일을 업로드합니다. 먼저 업로드할 파일을 만듭니다.

    echo "Test file." > Test1.txt
    
  6. cURL을 사용하여 Data Lake Store 파일 시스템 REST 엔드포인트에 요청하여 이전에 만든 폴더에 파일을 업로드합니다. 업로드에는 리디렉션이 포함되고 cURL은 리디렉션을 자동으로 따릅니다.

    curl -i -X PUT -L -T Test1.txt -H "Authorization: Bearer <ACCESS_TOKEN>" 'https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/<FOLDER_NAME>/Test1.txt?op=CREATE' 
    

    성공적인 응답은 다음과 같습니다.

    HTTP/1.1 100 Continue
    HTTP/1.1 307 Temporary Redirect
    Cache-Control: no-cache, no-cache, no-store, max-age=0
    Pragma: no-cache
    Expires: -1
    Location: https://mytestadls.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE&write=true
    x-ms-request-id: 756f6b24-0cca-47ef-aa12-52c3b45b954c
    ContentLength: 0
    x-ms-webhdfs-version: 17.04.22.00
    Status: 0x0
    X-Content-Type-Options: nosniff
    Strict-Transport-Security: max-age=15724800; includeSubDomains
    Date: Sun, 15 Oct 2017 22:10:30 GMT
    Content-Length: 0
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 201 Created
    Cache-Control: no-cache, no-cache, no-store, max-age=0
    Pragma: no-cache
    Expires: -1
    Location: https://mytestadls.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE&write=true
    x-ms-request-id: af5baa07-3c79-43af-a01a-71d63d53e6c4
    ContentLength: 0
    x-ms-webhdfs-version: 17.04.22.00
    Status: 0x0
    X-Content-Type-Options: nosniff
    Strict-Transport-Security: max-age=15724800; includeSubDomains
    Date: Sun, 15 Oct 2017 22:10:30 GMT
    Content-Length: 0
    

마지막으로 이제 Data Lake Store 파일 시스템에 다른 API를 사용하여 파일에 추가하고 파일을 다운로드하는 등의 작업을 수행할 수 있습니다.

Linux VM 시스템 할당 관리 ID를 사용하여 Azure Storage에 액세스

이 자습서에서는 Linux VM(가상 머신)에 대한 시스템 할당 관리 ID를 사용하여 Azure Storage에 액세스하는 방법을 보여줍니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • 저장소 계정 만들기
  • 스토리지 계정에 Blob 컨테이너 만들기
  • Azure Storage 컨테이너에 대한 Linux VM의 관리 ID 액세스 권한 부여
  • 액세스 토큰 가져오기 및 액세스 토큰을 사용하여 Azure Storage 호출

저장소 계정 만들기

이 예제에서 CLI 스크립트를 실행하려면 다음 두 가지 옵션을 사용할 수 있습니다.

먼저 스토리지 계정을 만듭니다.

  1. Azure Portal의 왼쪽 위 모서리에서 + 리소스 만들기 단추를 선택합니다.

  2. 스토리지를 선택한 다음, 스토리지 계정 - Blob, 파일, 테이블, 큐를 선택합니다.

  3. 이름 아래에서 스토리지 계정의 이름을 입력합니다.

  4. 배포 모델계정 종류리소스 관리자스토리지(범용 v1)로 설정해야 합니다.

  5. 구독리소스 그룹은 이전 단계에서 VM을 만들 때 지정한 것과 일치합니다.

  6. 만들기를 실행합니다.

    새 스토리지 계정 만들기 화면을 보여 주는 스크린샷.

Blob 컨테이너 만들기 및 스토리지 계정에 파일 업로드

파일에 Blob Storage가 필요하므로 파일을 저장할 Blob 컨테이너를 만들어야 합니다. 그런 다음, 새 스토리지 계정에서 Blob 컨테이너에 파일을 업로드합니다.

  1. 새로 만든 스토리지 계정으로 이동합니다.

  2. Blob Service 다음 컨테이너를 선택합니다.

  3. 페이지 맨 위에서 + 컨테이너를 선택합니다.

  4. 새 컨테이너를 선택한 다음 컨테이너의 이름을 입력합니다.

  5. 공용 액세스 수준이 기본값인지 확인합니다.

    스토리지 컨테이너 만들기 화면을 보여 주는 스크린샷.

  6. 선택한 편집기를 사용하여 로컬 컴퓨터에서 hello world.txt라는 파일을 만듭니다. 파일을 열고 Hello world!에 텍스트를 추가한 후, 저장합니다.

  7. 컨테이너 이름을 선택한 다음 업로드를 선택합니다. 그러면 파일이 새로 만든 컨테이너에 업로드됩니다.

  8. Blob 업로드 창의 파일 섹션에서 폴더 아이콘을 선택하고 로컬 컴퓨터의 파일 hello_world.txt를 찾습니다.

  9. 파일을 선택한 다음 업로드를 선택합니다.

    텍스트 파일 업로드 섹션을 보여 주는 스크린샷.

VM에 Azure Storage 컨테이너에 대한 액세스 권한 부여

VM의 관리 ID를 사용하여 Azure Storage Blob에서 데이터를 검색할 수 있습니다. Azure 리소스에 대한 관리 ID는 Microsoft Entra 인증을 지원하는 리소스를 인증하는 데 사용할 수 있습니다. 스토리지 계정이 포함된 리소스 그룹의 범위에서 관리 ID에 storage-blob-data-reade 역할을 할당하여 액세스 권한을 부여합니다.

세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

참고 항목

스토리지에 대한 권한을 부여하는 데 사용할 수 있는 다양한 역할에 대한 자세한 내용은 Microsoft Entra ID를 사용하여 Blob 및 큐에 대한 액세스 권한 부여를 검토하세요.

액세스 토큰 가져오기 및 액세스 토큰을 사용하여 Azure Storage 호출

Azure Storage는 기본적으로 Microsoft Entra 인증을 지원하므로 관리 ID를 사용하여 획득한 액세스 토큰을 직접 수락할 수 있습니다. 이 방법은 Azure Storage를 Microsoft Entra ID와 통합하는 작업의 일부로, 연결 문자열에서 자격 증명을 제공하는 것과는 다릅니다.

다음 단계를 완료하려면 앞에서 작성한 VM에서 작업해야 하며 연결을 위한 SSH 클라이언트가 필요합니다.

Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

  1. Azure Portal에서 Virtual Machines, Linux 가상 머신으로 이동한 다음, 개요 페이지에서 연결을 선택합니다. VM에 연결하기 위한 문자열을 복사합니다.

  2. 선택한 SSH 클라이언트를 사용하여 VM에 연결합니다.

  3. 터미널 창에서 CURL을 사용하여 로컬 관리 ID 엔드포인트에 대한 요청을 만들어서 Azure Storage에 대한 액세스 토큰을 가져옵니다.

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true
    
  4. 액세스 토큰을 사용하여 Azure Storage에 액세스합니다. 예를 들어 이전에 컨테이너에 업로드한 샘플 파일의 내용을 읽으려면 <STORAGE ACCOUNT>, <CONTAINER NAME><FILE NAME> 값을 이전에 지정한 값으로, <ACCESS TOKEN>를 이전 단계에서 반환된 토큰으로 바꿉니다.

    curl https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME> -H "x-ms-version: 2017-11-09" -H "Authorization: Bearer <ACCESS TOKEN>"
    

    응답에는 파일의 내용이 포함됩니다.

    Hello world! :)
    

마지막으로 다음과 같이 토큰을 변수에 저장하고 두 번째 명령에 전달할 수도 있습니다.

# Run the first curl command and capture its output in a variable
access_token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true | jq -r '.access_token')

# Run the second curl command with the access token
curl "https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME>" \
  -H "x-ms-version: 2017-11-09" \
  -H "Authorization: Bearer $access_token"

Linux VM 시스템 할당 관리 ID를 사용하여 SAS 자격 증명을 통해 Azure Storage에 액세스

이 자습서에서는 Linux VM(가상 머신)에 시스템 할당 관리 ID를 사용하여 SAS(공유 액세스 서명) 자격 증명, 특히 서비스 SAS 자격 증명을 가져오는 방법을 보여 줍니다.

참고 항목

이 자습서에서 생성된 SAS 키는 VM에 제한되거나 바인딩되지 않습니다.

서비스 SAS는 계정 액세스 키를 노출하지 않고 스토리지 계정의 개체에 대한 제한된 액세스 권한을 부여합니다. 제한된 시간 및 특정 서비스에 대한 액세스 권한을 부여할 수 있습니다. 스토리지 작업을 수행할 때 평소와 같이 SAS 자격 증명을 사용할 수 있습니다. 예를 들어 스토리지 SDK를 사용하는 경우입니다. 이 자습서에서는 Azure Storage CLI를 사용하여 Blob을 업로드하고 다운로드합니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • 스토리지 계정 만들기
  • 스토리지 계정에서 BLOB 컨테이너 만들기
  • Resource Manager의 스토리지 계정 SAS에 대한 VM 액세스 권한 부여
  • VM ID를 사용하여 액세스 토큰을 가져오고 리소스 관리자에서 SAS를 검색하는 데 사용

저장소 계정 만들기

아직 없는 경우 스토리지 계정을 만들어야 합니다. 이 단계를 건너뛰고 VM 시스템 할당 관리 ID에 기존 스토리지 계정의 키에 대한 액세스 권한을 부여하도록 선택할 수 있습니다.

  1. Azure Portal의 왼쪽 위 모서리에 있는 +/새 서비스 만들기 단추를 선택합니다.

  2. 스토리지를 선택한 다음 스토리지 계정을 선택하면, 스토리지 계정 만들기 패널이 나타납니다.

  3. 스토리지 계정의 이름을 입력합니다. 나중에 필요하므로 이 이름을 기억하세요.

  4. 배포 모델Resource Manager에 설정되고 계정 종류범용으로 설정되었는지 확인합니다.

  5. 구독리소스 그룹 VM을 만들 때 지정한 것과 일치하는지 확인합니다.

  6. 만들기를 선택하여 스토리지 계정 만들기를 완료합니다.

    새 스토리지 계정 만들기 화면을 보여 주는 스크린샷.

스토리지 계정에서 BLOB 컨테이너 만들기

자습서의 뒷부분에서 파일을 업로드하고 새 스토리지 계정에 다운로드합니다. 파일에 Blob Storage가 필요하기 때문에 파일을 저장할 Blob 컨테이너를 만들어야 합니다.

  1. 새로 만든 스토리지 계정으로 이동합니다.

  2. 왼쪽 패널에서 Blob service컨테이너 링크를 선택합니다.

  3. 페이지 맨 위에서 + 컨테이너를 선택하면, 새 컨테이너 패널이 나타납니다.

  4. 컨테이너에 이름을 지정하고 액세스 수준을 선택한 다음, 확인을 선택합니다. 자습서의 뒷부분에서 지정한 이름이 필요합니다.

    스토리지 컨테이너 만들기 화면을 보여 주는 스크린샷.

스토리지 SAS를 사용하도록 VM의 시스템 할당 관리 ID 액세스 부여

Azure Storage는 기본적으로 Microsoft Entra 인증을 지원하므로 VM의 시스템 할당 관리 ID를 사용하여 Resource Manager에서 스토리지 SAS를 검색할 수 있습니다. 그런 다음 SAS를 사용하여 스토리지에 액세스할 수 있습니다.

이 섹션에서는 스토리지 계정 SAS에 대한 VM의 시스템 할당 관리 ID 액세스 권한을 부여합니다. 스토리지 계정이 포함된 리소스 그룹의 범위에서 관리 ID에 스토리지 계정 기여자 역할을 할당합니다.

세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

참고 항목

스토리지에 대한 권한을 부여하는 데 사용할 수 있는 다양한 역할에 대한 자세한 내용은 Microsoft Entra ID를 사용하여 Blob 및 큐에 대한 액세스 권한 부여를 검토하세요.

VM의 ID를 사용하여 액세스 토큰을 가져온 다음 Azure Resource Manager를 호출하는 데 사용

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

이러한 단계를 완료하려면 SSH 클라이언트가 필요합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키를 구성하는 데 도움이 필요한 경우 다음을 참조하세요.

SSH 클라이언트가 있으면 다음 단계를 수행합니다.

  1. Azure Portal에서 Virtual Machines로 이동한 다음, Linux 가상 머신으로 이동합니다.
  2. 개요 페이지에서 화면 맨 위에 있는 연결을 선택합니다.
  3. VM에 연결하기 위한 문자열을 복사합니다.
  4. SSH 클라이언트를 사용하여 VM에 연결합니다.
  5. Linux VM을 만들 때 추가한 암호를 입력합니다. 이제 정상적으로 로그인되어야 합니다.
  6. CURL을 사용하여 Azure Resource Manager에 대한 액세스 토큰을 가져옵니다.

액세스 토큰에 대한 CURL 요청 및 응답은 다음과 같습니다.

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true    

참고 항목

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

다음 응답에서는 간단히 나타내기 위해 access_token 요소를 축약했습니다.

{
  "access_token":"eyJ0eXAiOiJ...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

스토리지 호출을 위해 Azure Resource Manager에서 SAS 자격 증명 가져오기

다음으로 CURL을 사용하여 이전 섹션에서 검색한 액세스 토큰을 사용하여 Resource Manager를 호출합니다. 이를 사용하여 스토리지 SAS 자격 증명을 만듭니다. SAS 자격 증명이 있으면 스토리지 업로드/다운로드 작업을 호출할 수 있습니다.

이 요청의 경우 다음 HTTP 요청 매개 변수를 사용하여 SAS 자격 증명을 만듭니다.

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite.  Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

SAS 자격 증명에 대한 POST 요청 본문에 이러한 매개 변수를 포함합니다. SAS 자격 증명을 만들기 위한 매개 변수에 대한 자세한 내용은 서비스 SAS REST 목록 참조를 참조하세요.

다음 CURL 요청을 사용하여 SAS 자격 증명을 가져옵니다. <SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME><EXPIRATION TIME> 매개 변수 값을 원하는 값으로 바꾸세요. <ACCESS TOKEN> 값을 앞서 검색한 액세스 토큰으로 바꿉니다.

curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"signedExpiry\":\"<EXPIRATION TIME>\"}" -H "Authorization: Bearer <ACCESS TOKEN>"

참고 항목

이전 URL의 텍스트는 대/소문자를 구분하므로 리소스 그룹에 대/소문자를 사용하여 적절하게 반영하는지 확인합니다. 또한 GET 요청이 아니라 POST 요청임을 알고 있는 것이 중요합니다.

CURL 응답은 SAS 자격 증명을 반환합니다.

{"serviceSasToken":"sv=2015-04-05&sr=c&spr=https&st=2017-09-22T00%3A10%3A00Z&se=2017-09-22T02%3A00%3A00Z&sp=rcw&sig=QcVwljccgWcNMbe9roAJbD8J5oEkYoq%2F0cUPlgriBn0%3D"} 

Linux VM에서 다음 명령을 사용하여 Blob Storage 컨테이너에 업로드할 샘플 Blob 파일을 만듭니다.

echo "This is a test file." > test.txt

그런 다음 SAS 자격 증명을 사용하여 CLI az storage 명령을 사용하여 인증한 다음, Blob 컨테이너에 파일을 업로드합니다. 이 단계에서는 VM에 최신 Azure CLI를 설치해야 합니다(아직 없는 경우).

 az storage blob upload --container-name 
                        --file 
                        --name
                        --account-name 
                        --sas-token

응답:

Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D4F9929765C139\"",
  "lastModified": "2017-09-21T03:58:56+00:00"
}

Azure CLI를 사용하여 파일을 다운로드하고 SAS 자격 증명으로 인증할 수도 있습니다.

요청:

az storage blob download --container-name
                         --file 
                         --name 
                         --account-name
                         --sas-token

응답:

{
  "content": null,
  "metadata": {},
  "name": "testblob",
  "properties": {
    "appendBlobCommittedBlockCount": null,
    "blobType": "BlockBlob",
    "contentLength": 16,
    "contentRange": "bytes 0-15/16",
    "contentSettings": {
      "cacheControl": null,
      "contentDisposition": null,
      "contentEncoding": null,
      "contentLanguage": null,
      "contentMd5": "Aryr///Rb+D8JQ8IytleDA==",
      "contentType": "text/plain"
    },
    "copy": {
      "completionTime": null,
      "id": null,
      "progress": null,
      "source": null,
      "status": null,
      "statusDescription": null
    },
    "etag": "\"0x8D4F9929765C139\"",
    "lastModified": "2017-09-21T03:58:56+00:00",
    "lease": {
      "duration": null,
      "state": "available",
      "status": "unlocked"
    },
    "pageBlobSequenceNumber": null,
    "serverEncrypted": false
  },
  "snapshot": null
}

Linux VM 시스템 할당 관리 ID를 사용하여 액세스 키를 통해 Azure Storage에 액세스

이 자습서에서는 Linux VM(가상 머신)에 대한 시스템 할당 관리 ID를 사용하여 스토리지 계정 액세스 키를 검색하는 방법을 보여줍니다. 스토리지 작업을 수행할 때 평소와 같이 스토리지 액세스 키를 사용할 수 있습니다. 예를 들어 스토리지 SDK를 사용하는 경우입니다. 이 자습서에서는 Azure CLI를 사용하여 Blob을 업로드하고 다운로드합니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • 리소스 관리자의 스토리지 계정 액세스 키에 대한 VM 액세스 권한 부여
  • VM ID를 사용하여 액세스 토큰을 가져와서 리소스 관리자에서 스토리지 액세스 키를 검색하는 데 사용

저장소 계정 만들기

이 자습서를 시작하기 전에 기존 스토리지 계정이 없는 경우 계정을 만들어야 합니다. 기존 스토리지 계정이 있는 경우 다음 단계에 따라 VM 시스템 할당 관리 ID에 기존 스토리지 계정의 키에 대한 액세스 권한을 부여합니다.

  1. Azure Portal의 왼쪽 위 모서리에 있는 +/새 서비스 만들기 단추를 선택합니다.

  2. 스토리지를 선택한 다음 스토리지 계정을 선택하면, 스토리지 계정 만들기 패널이 나타납니다.

  3. 스토리지 계정의 이름을 입력합니다. 나중에 필요하므로 이 이름을 기억하세요.

  4. 배포 모델Resource Manager에 설정되고 계정 종류범용으로 설정되었는지 확인합니다.

  5. 구독리소스 그룹 VM을 만들 때 지정한 것과 일치하는지 확인합니다.

  6. 만들기를 선택하여 스토리지 계정 만들기를 완료합니다.

    새 스토리지 계정 만들기를 보여 주는 스크린샷

스토리지 계정에서 BLOB 컨테이너 만들기

자습서의 뒷부분에서 파일을 업로드하고 새 스토리지 계정에 다운로드합니다. 파일에 Blob Storage가 필요하기 때문에 파일을 저장할 Blob 컨테이너를 만들어야 합니다.

  1. 새로 만든 스토리지 계정으로 이동합니다.

  2. 왼쪽 패널에서 Blob service컨테이너 링크를 선택합니다.

  3. 페이지 맨 위에서 + 컨테이너를 선택하면, 새 컨테이너 패널이 나타납니다.

  4. 컨테이너에 이름을 지정하고 액세스 수준을 선택한 다음, 확인을 선택합니다. 자습서의 뒷부분에서 지정한 이름이 필요합니다.

    스토리지 컨테이너 만들기를 보여 주는 스크린샷

스토리지 계정 액세스 키를 사용하도록 VM의 시스템 할당 관리 ID 액세스 부여

Azure Storage는 기본적으로 Microsoft Entra 인증을 지원하지 않습니다. 그러나 VM의 시스템 할당 관리 ID를 사용하여 Resource Manager에서 스토리지 SAS를 검색한 다음, 해당 SAS를 사용하여 스토리지에 액세스할 수 있습니다. 이 단계에서 스토리지 계정 SAS에 대한 VM의 시스템 할당 관리 ID 액세스 권한을 부여합니다. 스토리지 계정이 포함된 리소스 그룹의 범위에서 관리 ID에 스토리지 계정 기여자 역할을 할당하여 액세스 권한을 부여합니다.

세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

참고 항목

스토리지에 대한 권한을 부여하는 데 사용할 수 있는 다양한 역할에 대한 자세한 내용은 Microsoft Entra ID를 사용하여 Blob 및 큐에 대한 액세스 권한 부여를 검토하세요.

VM의 ID를 사용하여 액세스 토큰을 가져온 다음 Azure Resource Manager를 호출하는 데 사용

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

아래의 단계를 완료하려면 SSH 클라이언트가 필요합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

  1. Azure Portal에서 Virtual Machines로 이동하여 Linux 가상 머신을 선택한 다음, 개요 페이지에서 맨 위에 있는 연결을 선택합니다. VM에 연결하기 위한 문자열을 복사합니다.

  2. SSH 클라이언트를 사용하여 VM에 연결합니다.

  3. 다음으로, Linux VM을 만들 때 추가한 암호를 입력해야 합니다.

  4. CURL을 사용하여 Azure Resource Manager에 대한 액세스 토큰을 가져옵니다.

    액세스 토큰에 대한 CURL 요청 및 응답은 다음과 같습니다.

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true
    

    참고 항목

    이전 요청에서 "resource" 매개 변수의 값은 Microsoft Entra ID에 필요한 값과 정확하게 일치해야 합니다. Azure Resource Manager 리소스 ID를 사용할 때는 URI에 후행 슬래시를 포함해야 합니다. 다음 응답에서는 간단히 나타내기 위해 access_token 요소를 축약했습니다.

    {
      "access_token": "eyJ0eXAiOiJ...",
      "refresh_token": "",
      "expires_in": "3599",
      "expires_on": "1504130527",
      "not_before": "1504126627",
      "resource": "https://management.azure.com",
      "token_type": "Bearer"
    }
    

스토리지 호출을 위해 Azure Resource Manager에서 스토리지 계정 액세스 키 가져오기

이제 CURL을 사용하여 이전 섹션에서 검색한 액세스 토큰을 사용하여 리소스 관리자를 호출하여 스토리지 액세스 키를 검색합니다. 스토리지 액세스 키가 있으면 스토리지 업로드/다운로드 작업을 호출할 수 있습니다. <SUBSCRIPTION ID>, <RESOURCE GROUP><STORAGE ACCOUNT NAME> 매개 변수 값을 원하는 값으로 바꾸세요. <ACCESS TOKEN> 값을 앞서 검색한 액세스 토큰으로 바꿉니다.

curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listKeys?api-version=2016-12-01 --request POST -d "" -H "Authorization: Bearer <ACCESS TOKEN>" 

참고 항목

이전 URL의 텍스트는 대/소문자를 구분하므로 리소스 그룹을 적절하게 반영하는 대/소문자를 사용하는지 확인하세요. 또한 이 요청은 GET 요청이 아닌 POST 요청임을 기억해야 하며, -d(NULL일 수 있음)를 사용하여 길이 제한을 캡처하는 값을 전달해야 합니다.

CURL 응답에서는 키 목록을 제공합니다.

{"keys":[{"keyName":"key1","permissions":"Full","value":"iqDPNt..."},{"keyName":"key2","permissions":"Full","value":"U+uI0B..."}]} 

Blob Storage 컨테이너에 업로드할 샘플 Blob 파일을 만듭니다. Linux VM에서는 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.

echo "This is a test file." > test.txt

다음으로, 스토리지 액세스 키를 사용하여 CLI az storage 명령을 통해 인증을 받고 Blob 컨테이너에 파일을 업로드합니다. 이 단계에서는 아직 설치하지 않은 경우, VM에 최신 Azure CLI를 설치해야 합니다.

az storage blob upload -c <CONTAINER NAME> -n test.txt -f test.txt --account-name <STORAGE ACCOUNT NAME> --account-key <STORAGE ACCOUNT KEY>

응답:

Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D4F9929765C139\"",
  "lastModified": "2017-09-12T03:58:56+00:00"
}

또한 Azure CLI를 사용하여 파일을 다운로드하고 스토리지 액세스 키를 사용하여 인증할 수 있습니다.

요청:

az storage blob download -c <CONTAINER NAME> -n test.txt -f test-download.txt --account-name <STORAGE ACCOUNT NAME> --account-key <STORAGE ACCOUNT KEY>

응답:

{
  "content": null,
  "metadata": {},
  "name": "test.txt",
  "properties": {
    "appendBlobCommittedBlockCount": null,
    "blobType": "BlockBlob",
    "contentLength": 21,
    "contentRange": "bytes 0-20/21",
    "contentSettings": {
      "cacheControl": null,
      "contentDisposition": null,
      "contentEncoding": null,
      "contentLanguage": null,
      "contentMd5": "LSghAvpnElYyfUdn7CO8aw==",
      "contentType": "text/plain"
    },
    "copy": {
      "completionTime": null,
      "id": null,
      "progress": null,
      "source": null,
      "status": null,
      "statusDescription": null
    },
    "etag": "\"0x8D5067F30D0C283\"",
    "lastModified": "2017-09-28T14:42:49+00:00",
    "lease": {
      "duration": null,
      "state": "available",
      "status": "unlocked"
    },
    "pageBlobSequenceNumber": null,
    "serverEncrypted": false
  },
  "snapshot": null
}

Linux VM 시스템 할당 관리 ID를 사용하여 Azure Key Vault에 액세스

이 자습서에서는 Linux VM(가상 머신)이 시스템 할당 관리 ID를 사용하여 Azure Key Vault에 액세스하는 방법을 보여줍니다. Key Vault를 사용하면 클라이언트 애플리케이션에서 비밀을 사용하여 Microsoft Entra ID로 보호되지 않는 리소스에 액세스할 수 있습니다. 관리되는 서비스 ID는 Azure에서 자동으로 관리되며, 코드에 인증 정보를 포함하지 않고도 Microsoft Entra 인증을 지원하는 서비스에 인증할 수 있습니다.

이 문서에서 배울 내용은 다음과 같습니다.

  • Key Vault에 저장된 비밀 액세스 권한을 VM에 부여
  • VM ID를 사용하여 액세스 토큰을 가져온 다음 Key Vault에서 비밀을 검색하는 데 사용

주요 자격 증명 모음 만들기

시스템 할당 관리 ID가 활성화된 Linux 가상 머신도 필요합니다.

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

이 섹션에서는 Key Vault에 저장된 비밀에 대한 액세스 권한을 VM에 부여하는 방법을 보여줍니다. Azure 리소스에 대한 관리 ID를 사용하면 코드에서 Microsoft Entra 인증을 지원하는 리소스에 인증하기 위한 액세스 토큰을 가져올 수 있습니다.

그러나 모든 Azure 서비스가 Microsoft Entra 인증을 지원하는 것은 아닙니다. 이러한 서비스에서 Azure 리소스에 대한 관리 ID를 사용하려면 Azure Key Vault에 서비스 자격 증명을 저장하고 VM의 관리 ID로 Key Vault에 액세스하여 자격 증명을 검색합니다.

먼저 Key Vault를 만들고 VM의 시스템 할당 관리 ID에 Key Vault에 대한 액세스 권한을 부여해야 합니다.

  1. Azure Portal에 로그인합니다.

  2. 왼쪽 탐색 모음 맨 위에서 리소스 만들기를 선택합니다.

  3. Marketplace 검색 상자에 Key Vault를 입력하고 Enter를 누릅니다.

  4. 결과 목록에서 Key Vault를 선택합니다.

  5. 만들기를 실행합니다.

  6. 새 키 자격 증명 모음의 이름을 입력합니다.

    Azure Key Vault 만들기 화면을 보여 주는 스크린샷.

  7. 이 자습서에 사용 중인 가상 머신을 만든 구독 및 리소스 그룹을 선택하도록 필요한 모든 정보를 입력합니다.

  8. 검토+ 만들기를 선택한 다음, 만들기를 선택합니다.

비밀 만들기

다음으로, 나중에 VM에서 실행되는 코드를 사용하여 검색할 수 있도록 Key Vault에 비밀을 추가해야 합니다. 이 섹션에서는 PowerShell을 사용합니다. 그러나 이 가상 머신에서 실행되는 모든 코드에는 동일한 개념이 적용됩니다.

  1. 새로 만든 Key Vault로 이동합니다.

  2. 비밀을 선택한 다음 추가를 선택합니다.

  3. 생성/가져오기를 선택합니다.

  4. 비밀 만들기 섹션에서 업로드 옵션으로 이동하여 수동이 선택되어 있는지 확인합니다.

  5. 비밀의 이름과 값을 입력합니다.  원하는 어떤 값이나 입력할 수 있습니다. 

  6. 활성화 날짜 및 만료 날짜를 지우고 사용 로 설정되었는지 확인합니다. 

  7. 만들기를 선택하여 비밀을 만듭니다.

    비밀 만들기를 보여 주는 스크린샷.

액세스 허가

Key Vault에 저장된 비밀을 읽으려면 가상 머신에서 사용하는 관리 ID에 액세스 권한이 필요합니다.

  1. 새로 만든 Key Vault로 이동합니다.

  2. 왼쪽 탐색 영역에서 액세스 정책을 선택합니다.

  3. 액세스 정책 추가 선택.

    키 자격 증명 모음 만들기 액세스 정책 화면의 스크린샷.

  4. 액세스 정책 추가 섹션의 템플릿에서 구성(선택 사항) 드롭다운 메뉴에서 비밀 관리를 선택합니다.

  5. 보안 주체를 선택한 다음 검색 필드에 이전에 만든 VM의 이름을 입력합니다.  결과 목록에서 VM을 선택한 다음 선택을 선택합니다.

  6. 추가를 선택합니다.

  7. 저장을 선택합니다.

데이터 액세스

아래의 단계를 완료하려면 SSH 클라이언트가 필요합니다.  Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

Important

모든 Azure SDK는 Microsoft Entra 토큰을 쉽게 획득하여 대상 서비스에 액세스할 수 있게 해주는 Azure.Identity 라이브러리를 지원합니다. Azure SDK 및 Azure.Identity 라이브러리에 액세스하는 방법에 대해 자세히 알아봅니다.

  1. Portal에서 Linux VM으로 이동한 다음, 개요에서 연결을 선택합니다. 
  2. 선택한 SSH 클라이언트를 사용하여 VM에 연결합니다. 
  3. 터미널 창에서 cURL을 사용하여 Azure Key Vault에 대한 액세스 토큰을 가져오기 위해 Azure 리소스 엔드포인트에 대한 로컬 관리 ID를 요청합니다.   액세스 토큰에 대한 CURL 요청은 다음과 같습니다.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
  ```
The response includes the access token you need to access Resource Manager. 
  
Response:
  
```bash
{"access_token":"eyJ0eXAi...",
"refresh_token":"",
"expires_in":"3599",
"expires_on":"1504130527",
"not_before":"1504126627",
"resource":"https://vault.azure.net",
"token_type":"Bearer"} 

이 액세스 토큰을 사용하여 Azure Key Vault에 인증할 수 있습니다.  다음 CURL 요청은 CURL 및 Key Vault REST API를 사용하여 Key Vault에서 비밀을 읽는 방법을 보여 줍니다.  Key Vault 개요 페이지의 기본 정보 섹션에 있는 Key Vault의 URL이 필요합니다.  이전 호출에서 가져오는 액세스 토큰도 필요합니다. 

curl 'https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01' -H "Authorization: Bearer <ACCESS TOKEN>" 

응답은 다음과 같습니다.

{"value":"p@ssw0rd!","id":"https://mytestkeyvault.vault.azure.net/secrets/MyTestSecret/7c2204c6093c4d859bc5b9eff8f29050","attributes":{"enabled":true,"created":1505088747,"updated":1505088747,"recoveryLevel":"Purgeable"}} 

Key Vault에서 비밀을 검색한 후에는 이름과 암호가 필요한 서비스에 인증하는 데 비밀을 사용할 수 있습니다.

리소스 정리

리소스를 정리할 준비가 되면 Azure Portal에 로그인하고 리소스 그룹을 선택한 다음, 이 자습서 프로세스에서 만든 리소스 그룹(예: mi-test)을 찾아 선택합니다. 리소스 그룹 삭제 명령을 사용하거나 PowerShell 또는 CLI를 통해 사용할 수 있습니다.

Linux VM 시스템 할당 관리 ID를 사용하여 리소스 관리자의 리소스 그룹에 액세스

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

이 자습서에서는 시스템 할당 ID를 만들고 Linux VM(Virtual Machine)에 할당한 다음 해당 ID를 사용하여 Azure Resource Manager API에 액세스하는 방법을 설명합니다. 관리 서비스 ID는 Azure에서 자동으로 관리됩니다. 그러면 코드에 자격 증명을 포함할 필요 없이 Microsoft Entra 인증을 지원하는 서비스에 인증할 수 있습니다.

다음 방법에 대해 설명합니다.

  • Azure 리소스 관리자에 대한 액세스 권한을 VM에 부여합니다.
  • VM의 시스템 할당 관리 ID를 사용하여 리소스 관리자에 액세스하여 액세스 토큰을 가져옵니다.
  1. 관리자 계정으로 Azure Portal에 로그인합니다.

  2. 리소스 그룹 탭으로 이동합니다.

  3. VM의 관리형 ID에 액세스 권한을 부여할 리소스 그룹을 선택합니다.

  4. 왼쪽 창에서 액세스 제어(IAM)를 선택합니다.

  5. 추가를 선택한 다음, 역할 할당 추가를 선택합니다.

  6. 역할 탭에서 읽기 권한자를 선택합니다. 이 역할이 있으면 모든 리소스를 볼 수 있지만 변경할 수는 없습니다.

  7. 멤버 탭의 액세스 권한 할당 옵션에서 관리 ID를 선택한 다음, +멤버 선택을 선택합니다.

  8. 구독 드롭다운에 적절한 구독이 나열되어 있는지 확인합니다. 리소스 그룹의 경우 모든 리소스 그룹을 선택합니다.

  9. ID 관리 드롭다운에서 Virtual Machine을 선택합니다.

  10. 선택 옵션에서, 드롭다운에서 VM을 선택한 다음 저장을 선택합니다.

    관리 ID에 판독기 역할을 추가하는 것을 보여 주는 스크린샷

액세스 토큰 가져오기

VM의 시스템 할당 관리 ID를 사용하고 리소스 관리자를 호출하여 액세스 토큰을 가져옵니다.

아래의 단계를 완료하려면 SSH 클라이언트가 필요합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

  1. Azure Portal에서 Linux VM으로 이동합니다.
  2. 개요에서 연결을 선택합니다.
  3. 선택한 SSH 클라이언트를 사용하여 VM에 연결합니다.
  4. 터미널 창에서 curl을(를) 사용하여 Azure 리소스 엔드포인트에 대한 로컬 관리 ID를 요청하여 Azure 리소스 관리자에 대한 액세스 토큰을 가져옵니다.   액세스 토큰에 대한 curl 요청은 다음과 같습니다.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

참고 항목

resource 매개 변수의 값은 Microsoft Entra ID에서 예상하는 값과 정확히 일치해야 합니다. 리소스 관리자 리소스 ID의 경우 URI에 후행 슬래시를 포함해야 합니다.

응답에는 Azure 리소스 관리자에 액세스하는 데 필요한 액세스 토큰이 포함됩니다.

응답:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

이 액세스 토큰을 사용하여 Azure 리소스 관리자에 액세스합니다. 예를 들어 이전에 이 VM 액세스 권한을 부여한 리소스 그룹의 세부 정보를 읽으려면 <SUBSCRIPTION-ID>, <RESOURCE-GROUP>, <ACCESS-TOKEN>의 값은 이전에 작성한 값으로 바꿉니다.

참고 항목

URL은 대/소문자를 구분하므로 리소스 그룹의 이름을 지정할 때 이전에 사용한 정확한 대/소문자와 resourceGroup에서 대문자 “G”를 사용하고 있는지 확인합니다.

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

특정 리소스 그룹 정보를 사용하여 다시 응답합니다.

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Linux VM 사용자 할당 관리 ID를 사용하여 Resource Manager의 리소스 그룹에 액세스

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

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

이 문서에서 배울 내용은 다음과 같습니다.

  • Azure Resource Manager에 대한 액세스 권한을 VM에 부여합니다.
  • VM의 시스템 할당 관리 ID를 사용하여 Resource Manager에 액세스하여 액세스 토큰을 가져옵니다.

az identity create를 사용하여 사용자 할당 관리 ID를 만듭니다. -g 매개 변수는 사용자 할당 관리 ID가 만들어진 리소스 그룹을 지정하고 -n 매개 변수는 그 이름을 지정합니다. <RESOURCE GROUP><UAMI NAME> 매개 변수 값을 원하는 값으로 바꾸세요.

Important

사용자 할당 관리 ID를 만들 때 이름은 문자나 숫자로 시작해야 하며 영숫자, 하이픈(-), 밑줄(_)의 조합을 포함할 수 있습니다. 가상 머신 또는 가상 머신 확장 집합에 대한 할당이 제대로 작동하려면 이름이 24자로 제한됩니다. 자세한 내용은 FAQ 및 알려진 문제를 참조하세요.

az identity create -g <RESOURCE GROUP> -n <UAMI NAME>

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

{
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"clientSecretUrl": "https://control-westcentralus.identity.azure.net/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>/credentials?tid=5678&oid=9012&aid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"id": "/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>",
"location": "westcentralus",
"name": "<UAMI NAME>",
"principalId": "9012",
"resourceGroup": "<RESOURCE GROUP>",
"tags": {},
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Linux VM에 ID 할당

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

az vm identity assign을 사용하여 Linux VM에 사용자 할당 관리 ID를 할당합니다. <RESOURCE GROUP><VM NAME> 매개 변수 값을 원하는 값으로 바꾸세요. 이전 단계에서 반환된 id 속성을 --identities 매개 변수 값에 사용합니다.

az vm identity assign -g <RESOURCE GROUP> -n <VM NAME> --identities "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>"

Azure Resource Manager에서 리소스 그룹에 대한 액세스 권한 부여

관리 ID는 Microsoft Entra 인증을 지원하는 리소스 API를 인증하는 액세스 토큰을 요청하기 위해 코드에 사용할 수 있는 ID입니다. 이 자습서에서 코드는 Azure Resource Manager API에 액세스합니다.

코드가 API에 액세스할 수 있으려면 그 전에 Azure Resource Manager의 리소스에 ID 액세스 권한을 부여해야 합니다. 이 경우 VM이 포함된 리소스 그룹입니다. <SUBSCRIPTION ID><RESOURCE GROUP>의 값을 환경에 적합하게 업데이트합니다. 또한 <UAMI PRINCIPALID>사용자 할당 관리 ID 만들기az identity create 명령에서 반환한 principalId 속성으로 바꿉니다.

az role assignment create --assignee <UAMI PRINCIPALID> --role 'Reader' --scope "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP> "

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

{
  "id": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "name": "00000000-0000-0000-0000-000000000000",
  "properties": {
    "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
    "roleDefinitionId": "/subscriptions/<SUBSCRIPTION ID>/providers/Microsoft.Authorization/roleDefinitions/00000000-0000-0000-0000-000000000000",
    "scope": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>"
  },
  "resourceGroup": "<RESOURCE GROUP>",
  "type": "Microsoft.Authorization/roleAssignments"
}

VM의 ID를 사용하여 액세스 토큰을 가져온 다음 Resource Manager를 호출하는 데 사용

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

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

아래의 단계를 완료하려면 SSH 클라이언트가 필요합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다.

  1. Azure Portal에 로그인합니다.

  2. 포털에서 Virtual Machines -> Linux 가상 머신으로 이동한 다음, 개요에서 연결을 클릭합니다. VM에 연결하기 위한 문자열을 복사합니다.

  3. 선택한 SSH 클라이언트를 사용하여 VM에 연결합니다. Windows를 사용 중인 경우 Linux용 Windows 하위 시스템에서 SSH 클라이언트를 사용할 수 있습니다. SSH 클라이언트의 키 구성에 대한 도움이 필요하면 Azure에서 Windows를 통해 SSH 키를 사용하는 방법 또는 Azure에서 Linux VM용 SSH 공개 및 프라이빗 키 쌍을 만들고 사용하는 방법을 참조하세요.

  4. 터미널 창에서 CURL을 사용하여 Azure Instance Metadata Service(IMDS) ID 엔드포인트에 대한 요청을 수행해 Azure Resource Manager용 액세스 토큰을 가져옵니다.

    다음 예제에는 액세스 토큰을 획득하는 CURL 요청이 나와 있습니다. <CLIENT ID>사용자 할당 관리 ID 만들기az identity create 명령에서 반환한 clientId 속성으로 바꿉니다.

    curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com/&client_id=<UAMI CLIENT ID>"
    

    참고 항목

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

    응답에는 Azure Resource Manager에 액세스하는 데 필요한 액세스 토큰이 포함되어 있습니다.

    응답 예제:

    {
    "access_token":"eyJ0eXAiOi...",
    "refresh_token":"",
    "expires_in":"3599",
    "expires_on":"1504130527",
    "not_before":"1504126627",
    "resource":"https://management.azure.com",
    "token_type":"Bearer"
    } 
    
  5. 액세스 토큰을 사용하여 Azure Resource Manager에 액세스하고 이전에 사용자 할당 관리 ID 액세스 권한을 부여한 리소스 그룹의 속성을 읽습니다. <SUBSCRIPTION ID><RESOURCE GROUP>을 앞에서 지정한 값으로 바꾸고, <ACCESS TOKEN>을 이전 단계에서 반환된 토큰으로 바꿔야 합니다.

    참고 항목

    URL은 대/소문자를 구분하므로 리소스 그룹의 이름을 지정할 때 이전에 사용한 것과 정확히 동일한 사례와 resourceGroups에서 대문자 "G"를 사용해야 합니다.

    curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS TOKEN>" 
    

    응답에는 다음 예제와 유사한 특정 리소스 그룹 정보가 포함됩니다.

    {
    "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/DevTest",
    "name":"DevTest",
    "location":"westus",
    "properties":{"provisioningState":"Succeeded"}
    } 
    

자세한 정보