只允许通过Azure API管理访问后端APIs

20

我在Azure上部署了多个Web API,但没有应用身份验证,因此任何人都可以访问这些Web API。

现在我想对Web API应用身份验证,而不是在不同的Web API中实现相同的身份验证逻辑,我发现Azure API网关(API管理)是一个潜在的解决方案。

通过Azure API管理文档,我了解到可以应用诸如validate-jwt之类的策略来验证对后端Web API的请求。然而,后端Web API的终结点仍然向用户开放。

那么,我该如何隐藏它们?我是否必须定义子网络或者Azure API管理是否有此功能?

7个回答

11

最近我也遇到了同样的问题。最终,我通过使用“IP限制”功能找到了解决方案。请按照以下步骤操作:

1)在Azure门户中进入API管理概述页面,复制VIP。 API management Overview page

2)在您的Web APP > Networking中 networking

3)粘贴您的VIP paste vip


2
不幸的是,IP地址会发生变化。例如,这里有一篇来自微软的公告,关于API管理中IP地址的变更:https://blogs.msdn.microsoft.com/apimanagement/2018/05/31/potential-change-to-api-management-ip-addresses/ - Neil
1
非常有趣(+1),我之前不知道@Neil,但我认为这种情况相当罕见?你知道它是否经常变化吗? - Alex KeySmith
1
@AlexKeySmith 这应该是非常罕见的情况,但已经发生过一次了,因此设置一些监控/警报可能会有用。 - Neil
1
@AlexKeySmith 我也向微软提出了一个相关的问题;这是他们的回复(我也在这里发布了其中一个答案):https://github.com/MicrosoftDocs/azure-docs/issues/26312#issuecomment-470105156 - Neil
这个可以工作,但不是理想的解决方案。最好尝试这个 - https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-use-managed-service-identity - Musa
根据功能列表(2022年5月),除了在消耗计划上的实例外,所有实例现在都应该具有静态IP地址-https://learn.microsoft.com/en-us/azure/api-management/api-management-features - JsAndDotNet

8

微软的解决方案:如何在Azure API Management中使用客户端证书认证来保护后端服务

采用这种方法,任何未经授权的尝试访问后端服务的操作都会导致403 - Forbidden的响应。

您可以使用自签名证书,而不是使用受信任的CA签名证书($$)。我选择实现一个Azure Key Vault,在其中生成了一个新的证书,将其下载为*.PFX文件,并按照文章中所述上传到我的API管理实例中。


如果您不想在私有 Azure 网络上花费资金,我认为这是最佳答案。 - smurtagh

5

1

或者您可以使用以下方法:

  1. 基本认证
  2. 双向证书认证
  3. 虚拟专用网络(VPN)

来保护Azure API管理服务与后端服务的通信。


1

请了解如何在Azure API管理中设置TLS,以便所有与后端API的连接都必须通过API代理进行。


0
Azure API管理无法修改您的后端服务,它的角色仅限于充当代理。
您需要对每个Web API应用身份验证,或者配置防火墙仅接受来自Azure APIM的请求。

0

你的后端应用是Azure Function应用程序还是App Service应用程序?

如果是这样,托管标识可能是限制访问的最简单方法。无需在API管理中存储客户端密钥/证书+不像IP白名单方法那样不稳定。

  1. 为Function应用程序创建Azure Active Directory应用程序。
  2. 在Function应用程序上启用身份验证/授权模块,并引用步骤1中的AAD应用程序。
  3. 在APIM实例上启用托管标识。
  4. 向APIM添加<authentication-managed-identity>策略,并引用步骤1中的AAD应用程序。

我在使用Terraform将Azure Functions限制为API Management中更详细地介绍了这种方法。

参考:


这种方法难道不仅仅确保了请求来自经过AAD身份验证的实体吗?那么这个实体可能是任何具有AAD身份的应用程序或人员,而不仅仅是APIM吗? - Mike Pennington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接