我有一个启用了 Azure Active Directory 身份验证的 Azure 函数(包括“请求未通过身份验证时采取的操作”=“使用 Azure Active Directory 登录”)。此外,选项“需要用户分配?” Azure Function 相关服务主体 (sp_func) 的设置为“是”,以避免租户中的每个人最终都能够运行该函数。
目标是拥有一个添加到 sp_func 的“用户和组”的单个安全组(可以包括用户和服务主体),以便分配给该组来决定是否可以访问该功能。对于用户,这可以正常工作,但对于服务主体 (sp_nonfunc) 则不行。为了让他们 (sp_nonfunc) 工作,我必须为他们设置权限 (sp_nonfunc) 最终允许他们与 Azure 函数交互,无论他们 (sp_nonfunc) 是否分配给组。
是否可以只将服务主体 (sp_nonfunc) 添加到组中,并将组添加到 sp_func,然后能够使用 sp_nonfunc 执行该函数(不授予 sp_nonfunc 显式权限)?
编辑:即使我在清单中定义了自己的 appRole,似乎也无法直接将 sp_nonfunc 添加到 sp_func。目前似乎唯一的方法是为 sp_func 添加 sp_nonfunc 的权限 - 但这是我想要避免的。
EDIT2:这里我是如何在 sp_func 清单中定义角色的
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "AzureFunctionAccess",
"id": "xxx-xxx-xxx-xxx-xxx",
"isEnabled": true,
"description": "Access Azure Function.",
"value": "AzureFunctionAccess"
}
]
EDIT3:当我不直接为 sp_nonfunc 分配角色,而只是将 sp_nonfunc 添加到我得到的安全组时,当https://login.microsoftonline.com/<tenant id>/oauth2/token
使用资源 = sp_func 的注册应用程序的应用程序 ID URI 发出请求时:
{
"error": "invalid_grant",
"error_description": "AADSTS501051: Application 'xxx-xxx-xx-xx-xx'(xxx) is not assigned to a role for the application 'https://xxx'(xxx).\r\nTrace ID: xxx-xxx-xx-xx-xx\r\nCorrelation ID: xxx-xxx-xx-xx-xx\r\nTimestamp: xx-xx-xx xx:xx:xxZ",
"error_codes": [
501051
],
"timestamp": "xx-xx-xx xx:xx:xxZ",
"trace_id": "5xxx-xxx-xx-xx-xx",
"correlation_id": "xxx-xxx-xx-xx-xx",
"error_uri": "https://login.microsoftonline.com/error?code=501051"
}