azure-active-directory - 是否可以将系统托管标识分配给需要用户分配的 Azure AD 企业应用程序?

标签 azure-active-directory azure-functions azure-managed-identity azure-authentication

我有一个 Azure Function 应用程序,它使用通过 Azure 门户配置的集成 Azure AD 身份验证。
通过“快速”模式设置,这会创建 Azure 应用程序注册以及企业应用程序。
默认情况下,此企业应用程序接受所有用户。所以这意味着租户中的所有用户都可以触发 protected Azure Functions,这不是我想要的。
我的目标是允许租户中具有托管标识(例如应用服务)的某些用户和某些 Azure 资源触发该功能。
所以我转到 Azure Function 应用程序的企业应用程序设置,将其属性更改为“需要用户分配”。然后在用户/组下,我可以添加允许进行身份验证的用户/组。
在这里我发现我只能添加普通的 AAD 用户。托管标识服务主体(即系统为我的应用服务分配托管标识主体)未显示在列表中。
我还没有尝试过用户分配的托管身份。但我更喜欢使用系统分配的托管标识。
这是支持的场景吗?

最佳答案

是的,您可以,但要将 MSI(本质上是服务主体)添加到 Users and groups对于企业应用,与添加用户/组不同,您需要利用azure ad app role .
请按照以下步骤操作。
1.导航到Azure Active Directory在门户中 -> App registrations -> 使用过滤器搜索您的函数应用名称 All applications -> 点击它 -> App roles | Preview -> Create app role -> 创建如下角色 -> Apply .
enter image description here
2.使用下面的powershell将应用程序角色赋予您的MSI(托管身份),替换<appservice-name><functionapp-name> .
确保您已安装 AzureAD 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
enter image description here
完成上述步骤后,导航至 Users and groups ,您会发现 MSI 已添加到其中。
在这种情况下,您还有另一种方式,只是 create a security group in AAD and add the MSI service principal as a member to it ,然后将该组添加到 Users and groups ,那么 MSI 也将能够调用该函数。
所以总而言之,您有两种解决方案,您可以选择首选方式。
  • 利用应用程序角色
  • 利用 AAD 集团

  • 要成功调用该函数,还要确保使用 Anonymous 设置该函数。 .
    导航到函数应用中的 httptrigger,设置 Authorization levelAnonymous ,因为我们已经配置了 AAD 身份验证。
    enter image description here

    关于azure-active-directory - 是否可以将系统托管标识分配给需要用户分配的 Azure AD 企业应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66806261/

    相关文章:

    azure - 将 ClaimsPrincipal 从 Azure Function 传递到 BlobClient

    python - 从用于 python 的 Azure 函数获取应用程序设置值(环境)

    azure - 如何使用 bicep 为我的 azure 函数创建访问策略?

    Azure AD B2C 与 Azure AD Multi-Tenancy - 始终选择 MS 帐户登录的选项?

    Azure AD OAuth2.0 应用程序权限

    azure - 哪些 CosmosDb 操作会导致 Azure 函数触发?

    在 key 保管库访问策略中引用托管标识时,Azure ARM 模板 ResourceNotFound 错误

    具有托管身份的 Azure SQL - Bicep

    azure - 使用 Connect-MSOLservice 与服务主体连接

    Azure AD 守护程序应用程序应用程序权限和 id_token