Не рекомендуется: вход в виртуальную машину Linux в Azure с помощью Azure Active Directory с использованием проверки подлинности потока кода устройства

Внимание!

Общедоступная предварительная версия функции, описанная в этой статье, объявлена нерекомендуемой 15 августа 2021 г.

Эта функция заменяется возможностью применения SSH на основе Azure AD с использованием проверки подлинности на основе сертификата openSSH. Эта функция стала общедоступной. Дополнительные сведения см. в статье Вход в виртуальную машину Linux в Azure с помощью Azure Active Directory с использованием проверки подлинности на основе сертификата SSH. Сведения о миграции из старой версии в эту версию см. в разделе "Миграция из предыдущей (предварительной версии)".

Для повышения безопасности виртуальных машин Linux в Azure их можно интегрировать с аутентификацией Azure Active Directory (AD). При аутентификации Azure AD для виртуальных машин Linux осуществляется централизованное управление и применение политик, которые разрешают или запрещают доступ к виртуальным машинам. В этой статье показано, как создать и настроить виртуальную машину Linux для аутентификации Azure AD.

Есть много преимуществ аутентификации Azure AD при входе на виртуальные машины Linux в Azure, в том числе следующие:

  • Повышение уровня безопасности.

    • Для входа на виртуальные машины Linux в Azure можно использовать корпоративные учетные данные AD. Нет необходимости создавать учетные записи локального администратора и управлять временем существования учетных данных.
    • Уменьшая зависимость от учетных записей локального администратора, вам не нужно беспокоиться о потере или краже учетных данных, а также о настройке слабых учетных данных.
    • Политики сложности паролей и времени их существования, настроенные для вашего каталога Azure AD, также помогают защитить виртуальные машины Linux.
    • Для дальнейшей защиты входа на виртуальные машины Azure можно настроить аутентификацию MFA.
    • Возможность войти на виртуальные машины Linux с помощью Azure Active Directory также доступна для клиентов, использующих службы федерации.
  • Беспрепятственная совместная работа: с помощью управления доступом на основе ролей (RBAC) можно указать, кто может выполнить вход на заданную виртуальную машину как обычный пользователь или с правами администратора. По мере присоединения пользователей к вашей группе или ухода из нее можно обновлять политику Azure RBAC для виртуальной машины, предоставляя соответствующий доступ. Это намного проще, чем очистка виртуальных машин вручную для удаления ненужных открытых ключей SSH. Когда сотрудники уходят из вашей организации, а их учетная запись пользователя отключается или удаляется из Azure AD, они теряют доступ к вашим ресурсам.

Поддерживаемые регионы Azure и дистрибутивы Linux

В режиме предварительной версии этой функции сейчас поддерживаются следующие дистрибутивы Linux:

Distribution Версия
CentOS CentOS 6, CentOS 7
Debian Debian 9
openSUSE openSUSE Leap 42.3
RedHat Enterprise Linux RHEL 6, RHEL 7
SUSE Linux Enterprise Server SLES 12
Сервер Ubuntu Ubuntu 14.04 LTS, Ubuntu Server 16.04 и Ubuntu Server 18.04

Важно!

Эта предварительная версия не поддерживается в Azure для государственных организаций и в национальных облаках.

Использование этого расширения в кластерах Azure Kubernetes Service (AKS) не поддерживается. Дополнительные сведения см. в статье Политики поддержки AKS.

Чтобы установить и использовать интерфейс командной строки локально, для работы с этим руководством вам понадобится Azure CLI 2.0.31 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Требования к сети

Чтобы включить проверку подлинности Azure AD для виртуальных машин Linux в Azure, необходимо убедиться, что конфигурация сети виртуальных машин допускает исходящий доступ к следующим конечным точкам через TCP-порт 443:

  • https://login.microsoftonline.com
  • https://login.windows.net
  • https://device.login.microsoftonline.com
  • https://pas.windows.net
  • https://management.azure.com
  • https://packages.microsoft.com

Примечание

Сейчас нельзя настроить группы безопасности сети Azure для виртуальных машин, включенных с помощью аутентификации Azure AD.

Создание виртуальной машины Linux

Создайте группу ресурсов с помощью команды az group create, а затем — виртуальную машину с помощью команды az vm create, используя поддерживаемый дистрибутив в поддерживаемом регионе. В приведенном ниже примере развертывается виртуальная машина с именем myVM, использующая Ubuntu 16.04 LTS, в группе ресурсов с именем myResourceGroup в регионе southcentralus. В следующих примерах можно при необходимости указать собственную группу ресурсов и имена виртуальных машин.

az group create --name myResourceGroup --location southcentralus

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys

Создание виртуальной машины и вспомогательных ресурсов занимает несколько минут.

Установка расширения для входа на виртуальную машину с помощью Azure AD

Примечание

При развертывании этого расширения на ранее созданной виртуальной машине убедитесь, что на компьютере выделено не менее 1 ГБ памяти, а расширение не сможет установиться.

Для входа на виртуальную машину Linux с учетными данными Azure AD установите расширение виртуальной машины для входа с помощью Azure Active Directory. Расширения виртуальных машин — это небольшие приложения, которые выполняют задачи настройки и автоматизации после развертывания виртуальных машин Azure. С помощью команды az vm extension set установите расширение AADLoginForLinux на виртуальную машину с именем myVM в группе ресурсов myResourceGroup:

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory.LinuxSSH \
    --name AADLoginForLinux \
    --resource-group myResourceGroup \
    --vm-name myVM

После успешной установки расширения на виртуальную машину отображается параметр provisioningState со значением Succeeded. Для установки расширения виртуальной машине требуется работающий агент виртуальной машины. Дополнительную информацию см. в статье Агент виртуальной машины — обзор.

Настройка назначений ролей для виртуальной машины

Политика управления доступом на основе ролей (Azure RBAC) определяет, кто может входить на виртуальную машину. Для авторизации входа на виртуальную машину используются две роли Azure:

  • Имя для входа администратора виртуальной машины. Пользователи с этой ролью могут входить на виртуальную машину Azure с правами администратора Windows или привилегированного пользователя Linux.
  • Имя для входа пользователя виртуальной машины. Пользователи с этой ролью могут входить на виртуальную машину Azure с правами обычного пользователя.

Примечание

Чтобы разрешить пользователю входить в на виртуальную машину через SSH, необходимо назначить ему роль Имя для входа администратора виртуальной машины или Имя для входа пользователя виртуальной машины. Для ролей "Имя для входа администратора виртуальной машины" или "Имя для входа пользователя виртуальной машины" используется разрешение dataActions, поэтому их нельзя назначать в области действия группы управления. В настоящее время эти роли можно назначать только в области подписки, группы ресурсов или ресурсов. Пользователю Azure с ролью Владелец или Участник, назначенной для виртуальной машины, права для входа на эту виртуальную машину через SSH не предоставляются автоматически.

В следующем примере используется команда az role assignment create для назначения роли Имя для входа администратора виртуальной машины виртуальной машине текущего пользователя Azure. Имя пользователя активной учетной записи Azure можно получить с помощью команды az account show. В качестве области задается виртуальная машина, созданная на предыдущем шаге с помощью команды az vm show. Область также можно назначить на уровне группы ресурсов или подписки. При этом применяются обычные разрешения наследования Azure RBAC. Дополнительные сведения см. в статье Azure RBAC.

username=$(az account show --query user.name --output tsv)
vm=$(az vm show --resource-group myResourceGroup --name myVM --query id -o tsv)

az role assignment create \
    --role "Virtual Machine Administrator Login" \
    --assignee $username \
    --scope $vm

Примечание

Если домен AAD и домен имени пользователя для входа не совпадают, необходимо указать идентификатор объекта учетной записи пользователя, предоставив идентификатор объекта уполномоченного, а не только имя пользователя уполномоченного. Идентификатор объекта учетной записи пользователя можно получить с помощью команды az ad user list.

Дополнительные сведения об использовании Azure RBAC для управления доступом к ресурсам подписки Azure см. в статьях об использовании Azure, портала Azure или Azure PowerShell.

Использование условного доступа

Вы можете применить политики условного доступа, например многофакторную проверку подлинности или проверку риска при входе пользователя, прежде чем разрешить доступ к виртуальным машинам Linux в Azure, для которых включен вход с помощью Azure AD. Чтобы применить политику условного доступа, необходимо выбрать приложение "Вход на виртуальную машину Microsoft Azure под управлением Linux" в облачных приложениях или в качестве параметра назначения действий, а затем указать "Риск при входе" в качестве условия и/или указать многофакторную проверку подлинности в качестве элемента управления предоставлением доступа.

Предупреждение

Индивидуальная настройка многофакторной проверки подлинности Azure AD не поддерживается для входа в виртуальные машины.

Вход на виртуальную машину Linux

Сначала просмотрите общедоступный IP-адрес виртуальной машины с помощью команды az vm show:

az vm show --resource-group myResourceGroup --name myVM -d --query publicIps -o tsv

Войдите на виртуальную машину Azure с Linux, используя учетные данные Azure AD. Параметр -l позволяет указать собственный адрес учетной записи Azure AD. Замените учетную запись в примере своим собственным значением. Адреса учетных записей следует вводить в нижнем регистре. Замените IP-адрес в примере общедоступным IP-адресом виртуальной машины из предыдущей команды.

ssh -l azureuser@contoso.onmicrosoft.com 10.11.123.456

Вам будет предложено войти в Azure AD с помощью кода однократного использования по адресу https://microsoft.com/devicelogin. Скопируйте и вставьте код одноразового использования на страницу входа в устройство.

При появлении запроса введите учетные данные для входа в Azure AD на странице входа.

После успешной аутентификации в браузере появится следующее сообщение: You have signed in to the Microsoft Azure Linux Virtual Machine Sign-In application on your device.

Закройте окно браузера, вернитесь к запросу SSH и нажмите клавишу ВВОД.

Теперь вы выполнили вход на виртуальную машину Azure под управлением Linux с разрешениями назначенных ролей, таких как пользователь виртуальной машины или администратор виртуальной машины. Если вашей учетной записи назначена роль Имя для входа администратора виртуальной машины, можно выполнять команды, для которых требуются права привилегированного пользователя, с помощью sudo.

Вход с использованием sudo и Azure AD

При первом выполнении sudo вам нужно пройти проверку подлинности во второй раз. Чтобы не проходить повторную проверку подлинности при выполнении sudo, вы можете изменить в файле sudoers /etc/sudoers.d/aad_admins следующую строку:

%aad_admins ALL=(ALL) ALL

Вставьте вместо нее эту строку:

%aad_admins ALL=(ALL) NOPASSWD:ALL

Устранение неполадок при входе

Распространенные ошибки при попытке входа через SSH с учетными данными Azure AD — отсутствие назначенных ролей Azure и повторяющиеся запросы на вход. Используйте следующие разделы для устранения этих проблем.

Доступ запрещен: не назначена роль Azure

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

login as: azureuser@contoso.onmicrosoft.com
Using keyboard-interactive authentication.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code FJX327AXD to authenticate. Press ENTER when ready.
Using keyboard-interactive authentication.
Access denied:  to sign-in you be assigned a role with action 'Microsoft.Compute/virtualMachines/login/action', for example 'Virtual Machine User Login'
Access denied

Примечание

Если вы столкнулись с проблемами назначения ролей Azure, см. статью Устранение неполадок Azure RBAC.

Непрерывные запросы на вход SSH

Если вы успешно прошли аутентификацию в веб-браузере, может сразу же поступить повторный запрос на вход со свежим кодом. Эта ошибка обычно вызывается несоответствием между именем входа, указанным в командной строке SSH, и учетной записью, с которой вы вошли в Azure AD. Для решения этой проблемы сделайте следующее:

  • Проверьте, правильно ли указано имя входа в командной строке SSH. Опечатка в имени входа может вызвать несоответствие между именем входа, указанным в командной строке SSH, и учетной записью, с которой вы вошли в Azure AD. Например, вы ввели azuresuer@contoso.onmicrosoft.com вместо azureuser@contoso.onmicrosoft.com.
  • Если у вас есть несколько учетных записей пользователя, убедитесь, что при входе в Azure AD в окне браузера не была указана другая учетная запись.
  • В операционной системе Linux учитывается регистр. Различие между "Azureuser@contoso.onmicrosoft.com" и "azureuser@contoso.onmicrosoft.com" может вызвать несоответствие. Убедитесь в том, что имя участника-пользователя указано в командной строке SSH в правильном регистре.

Другие ограничения

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

Отзывы о предварительной версии

Поделиться своими отзывами об этой предварительной версии функции или сообщите о проблемах на форуме отзывов и предложений по Azure AD.

Дальнейшие действия

Дополнительные сведения об Azure Active Directory см. в статье Что такое Azure Active Directory.