从数据工厂授权 Azure Function App Http 终结点

Authorizing Azure Function App Http endpoint from Data Factory

我们目前正在 Azure 数据工厂中开发 ETL 解决方案,该解决方案需要调用 Azure Function App HTTP 触发器。我们的数据工厂实例配置了托管标识,我想知道如何确保 Azure Function App 仅允许从数据工厂托管标识进行访问?

我之前使用过 Azure Function Apps System Assigned Managed Identities 来访问其他资源 (Key Vault),所以我了解基本概念,但我很难理解是否使用 System Assigned Managed Identities 作为授权和身份验证机制Azure Function Apps 是可能的。

可以,请按照以下步骤操作。

1.Navigate 到门户中的函数应用程序 -> Authentication / Authorization -> 使用 Azure AD 身份验证配置它,遵循此 doc注意:Express中,我们selectCreate New AD App,会减少不必要的麻烦。

配置完成后如下图

2.After 一会儿,导航到门户中的 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.Use 下面的 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.Navigate到你的函数应用程序中的httptrigger,将Authorization level设置为Anonymous,因为我们已经配置了AAD auth。

5.Then 在您的 ADF 中,创建一个网站 activity 进行测试,使用如下设置。

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

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

运行它,它会很好地工作。

在此解决方案中,我们使用 app 角色保护该功能,如果您不将该角色授予您的 MSI,即第 3 步,MSI 将无法访问该功能,换句话说,如果您仅将角色授予您的 MSI,只有您的 MSI 才能访问该功能。