#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 идентификатором приложения при регистрации приложения, который связан с функциональным приложением.