如何保护受APIM保护的Azure Functions,以便它们只响应来自同一资源组中的Azure Web App的请求?

rbl8hiat  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个托管在Azure(MVC/C#/ .Net Core 3.1)上的Web应用程序。
两个新的Azure函数(由HTTP触发并由APIM保护)将添加到同一个父资源组,以便Web应用从中获取数据。
如何使Azure函数只响应应用发出的GET请求?是否有方法实现“如果源服务器既不是Azure box 123-South也不是123-West,则返回HTTP 403”-或者如果添加更多函数,可能会扩展得更好?
或者,是否有一种方法可以通过代码检查Azure函数中的HTTP标头?
我们以前的Web API,也就是这些函数的前身,是“本地”托管的。它检查HTTP请求的标头,寻找特定的base-64编码标头。如果找到,则会解码标头的值并检查其正确性。它仍然是Azure的有效方法吗?
注意:我们的Web应用程序要求用户通过Microsoft或任何其他身份提供商登录。我们的用户是普通公众,不属于我们的域。

ljsrvy3e

ljsrvy3e1#

我假设你的Azure Functions已经通过使用IP Restrictions或其他方式从APIM之外的直接调用中获得了保护,但只是想为其他遇到此问题的人提供此功能。
根据您的场景,有几个选项供您考虑

1.使用Client Certificate Authentication

这将要求您的Web App在其请求中将客户端证书设置为APIM。

2.使用Azure AD Auth

由于您的客户端没有要传递的令牌,因此这在您的情况下是可以接受的。在这里,您的Web App将使用Managed Identity或客户端凭据获取令牌,并将其传递到APIM的请求中。

3.设置自定义标题

这可能是最不安全但最容易实现的,你只需要在Web App的请求中添加一个header,APIM就会使用policies验证这个值。
请注意,如果这是一个静态值,并且您的客户以某种方式获得了它,那么他们可以直接调用APIM。将其动态化会增加此选项的复杂性,此时最好使用#1或#2。

相关问题