我有一个 Azure Function 应用,它使用通过 Azure 门户配置的集成 Azure AD 身份验证。
通过“快速”模式设置,这会创建 Azure 应用注册以及企业应用程序。
默认情况下,此企业应用程序接受所有用户。所以这意味着租户中的所有用户都可以触发受保护的 Azure Functions,这不是我想要的。
我的目标是允许租户中具有托管标识(例如应用服务)的某些用户和某些 Azure 资源触发该功能。
所以我转到 Azure Function 应用程序的企业应用程序设置,将其属性更改为“需要用户分配”。然后在用户/组下,我可以添加允许进行身份验证的用户/组。
在这里我发现我只能添加普通的 AAD 用户。托管身份服务主体(即系统为我的应用服务分配托管身份主体)未显示在列表中。
我还没有尝试过用户分配的托管身份。但我更喜欢使用系统分配的托管身份。
这是支持的场景吗?
答案 0 :(得分:3)
是的,您可以,但是要将 MSI(本质上是服务主体)添加到企业应用程序的 Users and groups
,与添加用户/组不同,您需要利用 {{3} }.
请按照以下步骤操作。
1.在门户中导航到 Azure Active Directory
-> App registrations
-> 使用过滤器搜索您的函数应用名称 All applications
-> 单击它 -> App roles | Preview
- > Create app role
-> 创建如下角色 -> Apply
。
2.使用下面的 powershell 将应用程序角色赋予您的 MSI(托管身份),替换 <appservice-name>
和 <functionapp-name>
。
请确保您已安装 powershell 模块并具有分配应用程序角色的足够权限(此步骤在 azure 门户中不可用)。
Connect-AzureAD
$MSI = Get-AzureADServicePrincipal -Filter "displayName eq '<appservice-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
完成上述步骤后,导航到 Users and groups
,您会发现 MSI 已添加到其中。
这种情况下,你还有另外一种方式,就是,然后把组加入到
Users and groups
中,这样MSI也可以调用这个函数了。
总之,您有两种解决方案,您可以选择首选方式。
利用应用程序角色
利用 AAD 集团
要成功调用函数,还要确保使用 Anonymous
设置函数。
导航到函数应用中的 httptrigger,将 Authorization level
设置为 Anonymous
,因为我们已经配置了 AAD 身份验证。
create a security group in AAD and add the MSI service principal as a member to it
答案 1 :(得分:1)
几个月前,我与 Azure 支持人员进行了类似的问题解决会议。
结论是: