【问题标题】:Authorizing Azure Function App Http endpoint from Data Factory从数据工厂授权 Azure Function App Http 端点
【发布时间】:2021-03-18 13:57:14
【问题描述】:

我们目前正在 Azure 数据工厂中开发一个 ETL 解决方案,该解决方案需要调用 Azure Function App HTTP 触发器。 Out Data Factory 实例配置了托管标识,我想知道如何保护 Azure Function App 以仅允许来自 Data Factroy 托管标识的访问?

我以前使用过 Azure Function Apps 系统分配的托管标识来访问其他资源(Key Vault),所以我了解基本概念,但我很难理解是否使用系统分配的托管标识作为 Azure Function Apps 上的授权和身份验证机制是可能的。

【问题讨论】:

  • 嗨,这个问题有更新吗?
  • 非常有效的问题。我有一段时间有同样的问题。如果我们在 DataFactory 和 Function 应用程序中启用托管标识,那么它们就不能通过 AD 自动相互通信。我们是否必须在函数应用上显式启用 Authentication/Authorization 并创建另一个 AD 应用程序?

标签: azure authentication azure-data-factory azure-function-app azure-managed-identity


【解决方案1】:

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

1.在门户中导航到您的函数应用 -> Authentication / Authorization -> 使用 Azure AD 身份验证对其进行配置,按照此 doc 操作。 注意: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设置为Anonymous,因为我们已经配置了AAD auth。

5.然后在您的 ADF 中,创建一个 Web Activity 进行测试,使用如下设置。

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

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

运行它,它会正常工作的。

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

【讨论】:

  • 为了完成这项工作,我不得不将第 5 步中的“资源”替换为与函数应用关联的应用注册的应用 ID。
猜你喜欢
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2020-02-24
  • 2019-02-14
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多