Авторизация конечной точки Http приложения функции Azure с фабрики данных

#azure #authentication #azure-data-factory #azure-function-app #azure-managed-identity

#azure #аутентификация #azure-функции #azure-data-factory #azure-managed-identity

Вопрос:

В настоящее время мы разрабатываем решение ETL на фабрике данных Azure, которое требует вызова HTTP-триггера приложения функции Azure. В нашем экземпляре фабрики данных настроено управляемое удостоверение, и мне было интересно, как я могу обеспечить, чтобы приложение функций Azure разрешало доступ только с управляемого удостоверения данных?

Ранее я использовал назначенные системой управляемые удостоверения Azure Function Apps для доступа к другим ресурсам (хранилище ключей), поэтому я понимаю основные концепции, но мне трудно понять, возможно ли использование назначенных системой управляемых удостоверений в качестве механизма авторизации и аутентификации в приложениях Azure Function.

Комментарии:

1. Привет, какие-либо обновления по этой проблеме?

2. Очень правильный вопрос. У меня такой же вопрос некоторое время. Если мы включим управляемую идентификацию в DataFactory и Function app, они не смогут автоматически взаимодействовать друг с другом через AD. Нужно ли явно включать Authentication/Authorization приложение функции и создавать другое приложение AD?

Ответ №1:

Да, вы можете, пожалуйста, выполните следующие действия.

1. Перейдите к своему приложению функций на портале -> Authentication / Authorization -> настройте его с помощью Azure AD auth, следуйте этому документу. Примечание: В Express , мы выбираем Create New AD App , это уменьшит ненужные проблемы.

После настройки все будет так, как показано ниже.

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

2. Через некоторое время перейдите Azure Active Directory на портал -> App registrations -> найдите имя вашего функционального приложения с помощью фильтра All applications -> щелкните его -> App roles | Preview -> Create app role -> создайте роль, как показано ниже -> Apply .

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

Перейдите к Overview -> щелкните Managed application in local directory .

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

В Properties -> установить User assignment required? значение Yes .

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

3. Используйте приведенную ниже powershell, чтобы присвоить роль приложения вашему MSI (управляемому удостоверению), замените <datafactory-name> и <functionapp-name> .

Убедитесь, что у вас установлен модуль AzureAD powershell и у вас достаточно прав для назначения роли приложения.

 Connect-AzureAD
$MSI = Get-AzureADServicePrincipal -Filter "displayName eq '<datafactory-name>'"
$funapp = Get-AzureADServicePrincipal -Filter "displayName eq '<functionapp-name>'"
$PermissionName = "Function.Test"
$approle = $funapp.AppRoles | Where-Object {$_.Value -eq $PermissionName}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $funapp.ObjectId -Id $approle.Id
 

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

4.Перейдите к httptrigger в вашем приложении функций, установите значение Authorization level to Anonymous , поскольку мы настроили аутентификацию AAD.

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

5. Затем в вашем ADF создайте веб-действие для тестирования, используйте настройки, как показано ниже.

 URL - https://<functionapp-name>.azurewebsites.net/api/HttpTrigger1

Resource - https://<functionapp-name>.azurewebsites.net
 

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

Запустите его, он будет работать нормально.

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

В этом решении мы защищаем функцию ролью приложения, если вы не предоставите эту роль своему MSI, т.Е. Шаг 3, MSI не сможет получить доступ к функции, другими словами, если вы просто предоставите роль только своему MSI, только ваш MSI сможет получить доступ к функции.доступ к функции.

Комментарии:

1. Чтобы это сработало, мне пришлось заменить «Ресурс» на шаге 5 идентификатором приложения при регистрации приложения, который связан с функциональным приложением.