Вызов функции Azure из виртуальной машины с использованием управляемого удостоверения и REST API

Можем ли мы выполнять вызовы REST API к лазурной функции с виртуальной машины Azure? Мы не можем хранить имя пользователя и пароль для API. Есть ли какая-либо другая аутентификация, которую мы можем использовать для вызова функции Azure? например: управляемая идентификация, сертификаты?


person Blue Clouds    schedule 27.10.2020    source источник


Ответы (1)


Да, вы можете использовать управляемую идентификацию (MSI) для получения токена, а затем использовать этот токен для вызова REST API к вашей функции Azure. Выполните следующие действия.

1. Перейдите к виртуальной машине на портале - ›Identity -› включите идентификацию, назначенную системой.

2. Перейдите к приложению-функции на портале - ›Authentication / Authorization -› настройте приложение-функцию с аутентификацией Azure AD, выполните следующие действия: doc, не забудьте установить Log in with Azure Active Directory, после настройки потребуется некоторое время для создания приложение AD для вашего функционального приложения, оно, наконец, будет выглядеть, как показано ниже.

введите описание изображения здесь

3. Затем в приложении-функции создайте триггер HTTP для проверки, Примечание: его Authorization level необходимо установить как Anonymous.

введите описание изображения здесь

4. В моем примере я использую RDP для виртуальной машины, затем использую powershell для получения токена, а затем использую токен для вызова функции, в вашем случае вы также можете использовать другие языки в зависимости от ваших требований. Имя моей функции joyfun111, замените его на ваше в скрипте, у меня она работает.

$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://joyfun111.azurewebsites.net' -Method GET -Headers @{Metadata="true"} 
$content = $response.Content | ConvertFrom-Json 
$Token = $content.access_token 
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?name=world' -Method POST -Headers @{Authorization="Bearer $Token"} 

введите описание изображения здесь

Обновление:

Если это так, вам просто нужно использовать функциональную клавишу вместе с URL-адресом функции, изменить Authorization level на Function, отключить аутентификацию Azure AD в Authentication / Authorization, а затем использовать команду, как показано ниже.

Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?code=10X/IKJIeElrCRIxxxxH6A==&name=world' -Method POST -UseBasicParsing

введите описание изображения здесь

Вы можете получить URL-адрес функции на странице функции.

введите описание изображения здесь

person Joy Wang    schedule 28.10.2020
comment
Проблема в том, что на виртуальной машине запущено приложение, которое может вызывать только API. Логика получения токена из этого приложения невозможна. Есть ли решение для этого сценария? - person Blue Clouds; 28.10.2020
comment
Да, мы можем использовать URL-адрес функции, но этот ключ будет открыто доступен в виртуальной машине для всех, не так ли? Можно ли это предотвратить? - person Blue Clouds; 28.10.2020
comment
@BlueClouds Если да, то я не думаю, что это возможно, в любом случае вам нужны некоторые учетные данные для авторизации, это невозможно выполнить за один вызов. Даже если вы используете функциональную клавишу и не хотите ее открывать, вам нужно сделать еще один вызов, чтобы сначала ее получить. - person Joy Wang; 28.10.2020