【问题标题】:Azure Function Authentication: Azure Active Directory: Use Security Group to include identities (users and service principals) to access FunctionAzure Function 身份验证:Azure Active Directory:使用安全组包含身份(用户和服务主体)以访问 Function
【发布时间】:2020-10-23 06:28:40
【问题描述】:

我有一个启用了 Azure Active Directory 身份验证的 Azure 函数(包括“请求未通过身份验证时采取的操作”=“使用 Azure Active Directory 登录”)。此外,选项“需要用户分配?” Azure Function 相关服务主体 (sp_func) 的设置为“是”,以避免租户中的每个人最终都能够运行该函数。

目标是将单个安全组(可以包括用户和服务主体)添加到 sp_func 的“用户和组”中,以便分配给该组来决定是否可以访问该功能.对于用户,这可以正常工作,但对于服务主体 (sp_nonfunc) 则不行。为了让他们 (sp_nonfunc) 工作,我必须为他们设置权限 (sp_nonfunc) 最终允许他们与 Azure Function 交互,无论他们 (sp_nonfunc) 是否分配给组。

我是否可以只将服务主体 (sp_nonfunc) 添加到组中,然后将组添加到 sp_func,然后能够使用 sp_nonfunc 执行函数(不授予 sp_nonfunc 显式权限)?

编辑:即使我在 Manifest 中定义了自己的 appRole,似乎也无法直接将 sp_nonfunc 添加到 sp_func。目前似乎唯一的方法是在 sp_nonfunc 上为 sp_func 添加权限 - 但这是我想要避免的。

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 添加到我得到的安全组时,当使用资源 = Application ID URI 向https://login.microsoftonline.com/<tenant id>/oauth2/token 发出请求时sp_func的注册app:

{
    "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"
}

【问题讨论】:

  • 您能澄清一下“将 sp_nonfunc 直接添加到 sp_func”是什么意思吗?您能分享一下您是如何在应用程序上为“sp_func”定义应用程序角色的吗?
  • @PhilippeSignoret 我在通过 AAD 为 Azure Functions 启用身份验证时在上下文中创建了服务主体“sp_func”。此服务主体用于身份验证。当我启用“用户分配”时,我需要(并且想要)将身份添加到服务主体“用户和组”。并且无法直接向该用户和组添加另一个服务主体。

标签: azure authentication azure-active-directory azure-functions azure-service-principal


【解决方案1】:

这种方式行不通,要使用服务主体(在您的情况下为sp_nonfunc)获取函数应用程序的令牌(sp_func),您需要授予sp_nonfunc 的API 权限。

在门户中导航到与sp_nonfunc相关的App Registration -> API permissions -> 添加您定义的AzureFunctionAccess,最后点击Grant admin consent for xxx按钮。

然后用客户端凭证流获取token,就可以正常工作了。 (我用的是v2.0的端点,如果你用的是v1.0,也可以。)

详细步骤,我之前写过this post,你可以参考一下。

【讨论】:

  • 感谢您的回复。这是我意识到但我想避免的方式。组分配应该是决定因素,而不是 sp_nonfunc 是否具有分配的权限。目标是组成员身份决定您是否可以执行该功能。但这是不可能的还是?
  • @quervernetzt 如果你给api权限,你会发现sp_nonfunc存在于sp_func的Users and groups中。但是如果你只是添加包含服务主体的组,sp_nonfunc中没有api权限,我认为没有权限你可以得到令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2015-01-11
  • 2016-02-14
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多