Поделиться через


Проверка подлинности в ресурсах 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 ID для удостоверения сервера. Служебный принципал создается в клиенте Microsoft Entra, которому доверяет подписка.

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

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

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

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

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

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

Предварительные условия

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

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

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

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

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

  • Azure Key Vault для хранения и получения ваших учетных данных и предоставления доступа к Key Vault для идентификации, используемой Azure Arc.

Получение токена доступа с помощью 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.

Замечание

Приведенный выше пример предназначен для запроса маркера доступа для использования с REST API ARM, когда переменной ресурса присвоено значение https://management.azure.com. Если вам нужен маркер доступа для другой службы Azure, замените переменную ресурса в скрипте правильным значением ресурса. Сведения о проверке подлинности в службе хранилища Azure см. в статье Об использовании маркера OAuth в службе хранилища Azure. Чтобы завершить настройку для аутентификации в Azure Key Vault, см. раздел Доступ к Key Vault с помощью Windows или Доступ к Key Vault с помощью Linux.

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

  • Дополнительные сведения о Azure Key Vault см. в обзоре Key Vault.

  • Узнайте, как назначить управляемой идентичности доступ к ресурсу с помощью PowerShell или Azure CLI.