Проверка подлинности в ресурсах Azure с помощью серверов с поддержкой Azure Arc

Приложения или процессы, работающие непосредственно на серверах с поддержкой Azure Arc, могут использовать управляемые удостоверения для доступа к другим ресурсам Azure, поддерживающим проверку подлинности на основе идентификатора Microsoft Entra. Приложение может получить маркер доступа, представляющий свое удостоверение, назначаемое системой для серверов с поддержкой Azure Arc, и использовать его в качестве маркера носителя для проверки подлинности в другой службе.

Ознакомьтесь с документацией по управляемому удостоверению , чтобы получить подробное описание управляемых удостоверений и понять различие между удостоверениями, назначенными системой и назначаемыми пользователем.

В этой статье показано, как сервер может использовать управляемое удостоверение, назначаемое системой, для доступа к Azure Key Vault. В качестве начальной загрузки Key Vault позволяет клиентскому приложению использовать секрет для доступа к ресурсам, не защищенным идентификатором Microsoft Entra. Например, сертификаты TLS/SSL, используемые веб-серверами IIS, могут храниться в Azure Key Vault и безопасно развертывать сертификаты на серверах Windows или Linux за пределами Azure.

Обзор безопасности

При подключении сервера к серверам с поддержкой Azure Arc для настройки с помощью управляемого удостоверения выполняются несколько действий, аналогичные тем, что выполняются для виртуальной машины Azure.

  • Azure Resource Manager получает запрос на включение управляемого удостоверения, назначаемого системой, на сервере с поддержкой Azure Arc.

  • Azure Resource Manager создает субъект-службу в идентификаторе Microsoft Entra для удостоверения сервера. Субъект-служба создается в клиенте Microsoft Entra, доверенном подпиской.

  • Azure Resource Manager настраивает удостоверение на сервере, обновляя конечную точку удостоверения Службы метаданных экземпляров Azure (IMDS) для Windows или Linux с помощью идентификатора клиента и сертификата субъекта-службы. Конечная точка является конечной точкой REST, доступной только в пределах сервера по известному IP-адресу без поддержки маршрутизации. Эта служба предоставляет подмножество метаданных о сервере с поддержкой Azure Arc для управления и настройки.

Среда сервера с поддержкой управляемого удостоверения будет настроена со следующими переменными на сервере с поддержкой Windows Azure Arc:

  • IMDS_ENDPOINT. IP-адрес http://localhost:40342 конечной точки IMDS для серверов с поддержкой Azure Arc.

  • IDENTITY_ENDPOINT: конечная точка localhost, соответствующая управляемому удостоверению службы http://localhost:40342/metadata/identity/oauth2/token.

Код, выполняющийся на сервере, может запросить маркер безопасности из конечной точки службы метаданных экземпляров Azure, доступной только на этом сервере:

Переменная среды системы IDENTITY_ENDPOINT используется для обнаружения конечной точки удостоверения приложениями. Приложения должны попытаться получить значения IDENTITY_ENDPOINT и IMDS_ENDPOINT и использовать их. Приложения с любым уровнем доступа могут выполнять запросы к конечным точкам. Ответы метаданных обрабатываются как обычные и передаются в любой процесс на компьютере. Однако при создании запроса, который откроет маркер, клиент должен предоставить секрет для подтверждения того, что он может получить доступ к данным, доступным только пользователям с высоким уровнем привилегий.

Необходимые компоненты

  • Основные сведения об управляемых удостоверениях.

  • В Windows необходимо быть членом локальной группы администраторов или группы приложений расширения гибридного агента.

  • В Linux вы должны быть членом группы хиддов .

  • Сервер, подключенный и зарегистрированный на серверах с поддержкой Azure Arc.

  • Вы являетесь членом группы владельца в подписке или группе ресурсов, чтобы выполнить необходимые действия по созданию ресурсов и управлению ролями.

  • Azure Key Vault для хранения и получения учетных данных и назначения доступа к Идентификатору Azure Arc к KeyVault.

Получение маркера доступа с помощью REST API

Метод получения и использования управляемого удостоверения, назначаемого системой, для проверки подлинности в ресурсах Azure аналогичен методу, используемому с виртуальной машиной Azure.

Для сервера Windows с поддержкой Azure Arc с помощью 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
}

Следующий ответ — это пример возвращаемого результата:

Успешное получение маркера доступа с помощью PowerShell.

Для сервера Linux с поддержкой Azure Arc с помощью 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

Следующий ответ — это пример возвращаемого результата:

Успешное получение маркера доступа с помощью Bash.

Ответ включает маркер доступа, необходимый для доступа к любым ресурсам в Azure. Чтобы выполнить настройку проверки подлинности в Azure Key Vault, см. статью Доступ к Key Vault с помощью Windows или Доступ к Key Vault с помощью Linux.

Следующие шаги