Share via


Azure Arc 지원 서버를 사용하는 Azure 리소스에 대해 인증

Azure Arc 지원 서버에서 직접 실행되는 애플리케이션 또는 프로세스는 관리 ID를 사용하여 Microsoft Entra ID 기반 인증을 지원하는 다른 Azure 리소스에 액세스할 수 있습니다. 애플리케이션은 Azure Arc 지원 서버에 대해 시스템이 할당한 ID를 나타내는 액세스 토큰을 가져와서 이를 '전달자' 토큰으로 사용하여 다른 서비스에 인증할 수 있습니다.

관리 ID에 대한 자세한 설명은 관리 ID 개요 문서를 참조하고 시스템이 할당한 ID와 사용자가 할당한 ID의 차이점을 이해합니다.

이 문서에서는 서버가 시스템이 할당한 관리 ID를 사용하여 Azure Key Vault에 액세스하는 방법을 보여줍니다. 부트스트랩 역할을 하는 Key Vault를 사용하면 클라이언트 애플리케이션에서 비밀을 사용하여 Microsoft Entra ID로 보호되지 않는 리소스에 액세스할 수 있습니다. 예를 들어 IIS 웹 서버에서 사용하는 TLS/SSL 인증서를 Azure Key Vault에 저장하고 인증서를 Azure 외부의 Windows 또는 Linux 서버에 안전하게 배포할 수 있습니다.

보안 개요

서버를 Arc 지원 서버에 온보딩하는 동안 Azure VM에 대해 수행되는 작업과 유사한 관리 ID를 사용하여 구성하기 위해 몇 가지 작업이 수행됩니다:

  • Azure Resource Manager는 Azure Arc 지원 서버에서 시스템이 할당한 관리 ID를 사용하도록 설정하라는 요청을 받습니다.

  • Azure Resource Manager가 Microsoft Entra ID에 서버의 ID에 대한 서비스 주체를 만듭니다. 서비스 주체는 구독이 신뢰하는 Microsoft Entra 테넌트에 생성됩니다.

  • Azure Resource Manager는 서비스 주체 클라이언트 ID 및 인증서를 사용하여 Windows 또는 Linux에 대한 Azure IMDS(Instance Metadata Service) ID 엔드포인트를 업데이트하고 서버에서 ID를 구성합니다. 엔드 포인트는 잘 알려진 라우팅 불가능한 IP 주소를 사용하여 서버 내에서만 액세스 할 수 있는 REST 엔드 포인트입니다. 이 서비스는 Azure Arc 지원 서버에 대한 메타데이터 정보의 하위 집합을 제공하여 관리 및 구성을 지원합니다.

관리 ID 사용 서버의 환경은 Windows Azure Arc 지원 서버에서 다음 변수로 구성됩니다.

  • IMDS_ENDPOINT: Azure Arc 지원 서버의 IMDS 엔드포인트 IP 주소 http://localhost:40342입니다.

  • IDENTITY_ENDPOINT:서비스의 관리 ID http://localhost:40342/metadata/identity/oauth2/token에 해당하는 localhost 엔드포인트입니다.

서버에서 실행되는 코드는 Azure Instance Metadata Service 엔드포인트에서 토큰을 요청할 수 있으며, 서버 내에서만 액세스할 수 있습니다.

시스템 환경 변수 IDENTITY_ENDPOINT는 애플리케이션에서 ID 엔드포인트를 발견하는 데 사용됩니다. 애플리케이션은 IDENTITY_ENDPOINTIMDS_ENDPOINT 값을 검색하여 사용해야합니다. 모든 액세스 수준의 애플리케이션은 엔드포인트에 요청을 수행할 수 있습니다. 메타데이터 응답은 정상적으로 처리되며 컴퓨터의 모든 프로세스에 제공됩니다. 그러나 토큰 노출 요청이 있을 때 클라이언트는 더 높은 권한을 가진 사용자만 사용할 수 있는 데이터에 액세스 할 수 있음을 증명하는 비밀을 제공해야 합니다.

필수 조건

  • 관리 ID에 대한 이해.

  • Windows에서 로컬 관리자 그룹 또는 하이브리드 에이전트 확장 애플리케이션 그룹의 구성원이어야 합니다.

  • Linux에서는 himds 그룹의 구성원이어야 합니다.

  • Azure Arc 지원 서버에 서버를 연결하고 등록했습니다.

  • 필요한 리소스 만들기 및 역할 관리 단계를 수행하기 위한 구독 또는 리소스 그룹에서 소유자 그룹의 구성원입니다.

  • 자격 증명을 저장 및 검색하고, Azure Arc ID 액세스를 KeyVault에 할당하는 Azure Key Vault입니다.

REST API를 사용하여 액세스 토큰 획득

Azure 리소스 인증을 위해 시스템이 할당한 관리 ID를 얻고 사용하는 방법은 Azure VM에서 수행하는 방법과 유사합니다.

Azure Arc 지원 Windows 서버의 경우 PowerShell을 사용하여 웹 요청을 호출하여 특정 포트의 로컬 호스트에서 토큰을 가져옵니다. IP 주소 또는 환경 변수 IDENTITY_ENDPOINT를 사용하여 요청을 지정합니다.

$apiVersion = "2020-06-01"
$resource = "https://management.azure.com/"
$endpoint = "{0}?resource={1}&api-version={2}" -f $env:IDENTITY_ENDPOINT,$resource,$apiVersion
$secretFile = ""
try
{
    Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'} -UseBasicParsing
}
catch
{
    $wwwAuthHeader = $_.Exception.Response.Headers["WWW-Authenticate"]
    if ($wwwAuthHeader -match "Basic realm=.+")
    {
        $secretFile = ($wwwAuthHeader -split "Basic realm=")[1]
    }
}
Write-Host "Secret file path: " $secretFile`n
$secret = cat -Raw $secretFile
$response = Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'; Authorization="Basic $secret"} -UseBasicParsing
if ($response)
{
    $token = (ConvertFrom-Json -InputObject $response.Content).access_token
    Write-Host "Access token: " $token
}

다음 응답은 반환되는 예시입니다:

A successful retrieval of the access token using PowerShell.

Azure Arc 지원 Linux 서버의 경우 Bash를 사용해서 웹 요청을 호출하여 특정 포트의 로컬 호스트에서 토큰을 가져옵니다. IP 주소 또는 환경 변수 IDENTITY_ENDPOINT를 사용하여 다음 요청을 지정합니다. 이 단계를 완료하려면 SSH 클라이언트가 필요합니다.

CHALLENGE_TOKEN_PATH=$(curl -s -D - -H Metadata:true "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com" | grep Www-Authenticate | cut -d "=" -f 2 | tr -d "[:cntrl:]")
CHALLENGE_TOKEN=$(cat $CHALLENGE_TOKEN_PATH)
if [ $? -ne 0 ]; then
    echo "Could not retrieve challenge token, double check that this command is run with root privileges."
else
    curl -s -H Metadata:true -H "Authorization: Basic $CHALLENGE_TOKEN" "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com"
fi

다음 응답은 반환되는 예시입니다:

A successful retrieval of the access token using Bash.

응답에는 Azure의 모든 리소스에 액세스하는 데 필요한 액세스 토큰이 포함되어 있습니다. Azure Key Vault 인증 구성을 완료하려면 Windows를 사용하여 Key Vault 액세스 또는 Linux를 사용하여 Key Vault 액세스를 참조하세요.

다음 단계

  • Azure Key Vault에 대한 자세한 내용을 보려면 Key Vault 개요를 참조하세요.

  • PowerShell을 사용하거나 Azure CLI를 사용하여 리소스에 관리 ID 액세스를 할당하는 방법을 알아봅니다.