使用托管标识从 Azure 逻辑应用向 Azure 函数进行身份验证

Gre*_*ous 2 azure azure-active-directory azure-logic-apps azure-functions

我正在尝试为逻辑应用程序和 Azure 函数配置安全性。Azure 函数有一个 HTTP 触发器。到目前为止,我已经完成了以下工作:

  1. 创建了具有一些基本功能的 Azure 函数(在请求日志中写入查询)。
  2. 创建逻辑应用程序(循环触发器,HTTP 触发 Azure 函数)
  3. 测试逻辑App成功调用Azure函数
  4. 向逻辑应用添加了托管标识
  5. 在 Azure Function App 上启用 Azure AD 身份验证/授权,并使用在 Azure AD 中为 Function App 创建应用注册的快速配置。
  6. 在逻辑应用程序中的 HTTP 操作中添加了托管标识作为身份验证方法。

当我运行逻辑应用程序时,它显示 HTTP 操作失败,因为它未经授权。谁能告诉我我错过了什么?我找到了一些关于如何使用类似方法访问 KeyVault(例如)的教程,但对于 Azure 函数却没有。我觉得我需要告诉应用注册逻辑应用的托管标识有权限,但我不知道这是否正确,也不知道如何去做。

Roh*_*gal 5

首先,要解决当前在逻辑应用调用 Azure 函数时遇到的未经授权的错误,您需要确保逻辑应用正在获取令牌以正确地对函数进行身份验证。

我很快尝试了一个带有托管标识的逻辑应用程序,例如您的设置,以调用启用了 Azure AD 身份验证的 Azure 函数。以下是要遵循的详细步骤。

  1. 在您的逻辑应用程序中添加一个 HTTP 操作,它将用于调用您的 Azure 函数
  2. 就我而言,这是一个简单的 GET 调用,其 URL 如下 https://<myfunctionapp>.azurewebsites.net/api/simplefunction
  3. 在身份验证中选择 Managed Identity
  4. 然后添加新参数并选择Audience复选框

    在此处输入图片说明

  5. Audience参数的值更改为函数应用的 Azure AD 应用注册的 APP ID URI。在我的情况下,这个值看起来像https://<myazureadtenant>.onmicrosoft.com/GUID

    您可以从 Azure 门户 > Azure AD > 应用注册 > 函数应用注册 > 设置 > 属性中找到此 APP ID URI 值

    在此处输入图片说明

此时,您应该能够测试您的逻辑应用程序,并且至少可以正常调用 Azure 函数(除非您的 Azure 函数仅限于某些调用者或需要特定权限,稍后会详细介绍。)

在我的案例中,完整的 HTTP 操作如下所示。

在此处输入图片说明

接下来,一旦从逻辑应用程序(具有托管标识)到您的 Azure 函数的基本调用得到正确的身份验证,问题是任何应用程序都应该能够调用您的 Azure 函数,还是应该只允许具有特定权限的某些调用者。

我在这篇 SO Post 中用 2 种方法详细回答了这部分 -有没有办法保护只能从特定 Azure 逻辑应用程序调用的 Azure 函数?. 该答案中的第二种方法非常具有声明性,如果您的功能需要,您甚至可以为不同类型的调用者创建多个不同的应用程序角色。