Azure 容器应用程序:仅允许通过 Api 管理进行访问

Mth*_*enn 3 azure azure-api-management azure-container-apps

我想使用Azure 中的Api 管理来限制对我的Azure 容器应用程序的访问。

我成功地将 Api 管理与容器应用程序链接起来,并使用 Api 密钥激活了订阅,这将阻止通过 Api 管理服务 URL 进行公共访问。但问题是,仍然可以通过容器应用程序的公共 Url 来访问容器应用程序。

仍然可以选择Ingress Traffic在容器应用程序中进行设置Limited to Container Apps Environment,但 Api 管理也将无法访问容器应用程序。

正确保护 Api 管理服务背后的容器应用程序的正确方法是什么?

Dan*_*ski 5

首先,我认为解释 Azure 容器应用程序中的网络架构是很好的。

Azure 容器应用程序在虚拟网络 (VNET) 支持的环境上下文中运行。创建环境时,您可以提供自定义 VNET,否则系统会自动为您生成 VNET。

部署容器应用程序环境有两种方法:

  1. 外部- 作为外部资源部署的容器应用程序环境可用于公共请求。外部环境通过外部、面向公众的 IP 地址上的虚拟 IP 进行部署。

  2. 内部- 当设置为内部时,环境没有公共端点。内部环境部署有映射到内部 IP 地址的虚拟 IP (VIP)。内部终结点是 Azure 内部负载均衡器 (ILB),IP 地址是从自定义 VNET 的专用 IP 地址列表中颁发的。

我附上来自 Azure 门户的图像以显示上述两个选项:

在此输入图像描述

现在更进一步,如果您希望容器应用程序限制所有外部访问,请创建一个内部容器应用程序环境

现在,当涉及到将容器应用程序部署到容器应用程序环境时,您为环境选择的可访问性级别将影响容器应用程序部署的可用入口选项。

如果您要部署到外部环境,则有两个选项可用于配置容器应用程序的入口流量:

  1. 仅限于容器应用程序环境- 仅允许来自共享容器应用程序环境中部署的其他容器应用程序的流量。

  2. 接受来自任何地方的流量- 允许从公共互联网访问应用程序。

在此输入图像描述

如果您要部署到内部环境,您还可以选择两个选项来配置容器应用程序的入口流量:

  1. 仅限于容器应用程序环境- 仅允许来自共享容器应用程序环境中部署的其他容器应用程序的流量。

  2. 仅限于 vNET(虚拟网络) - 允许来自 VNET 的流量,使容器应用程序可从虚拟网络内的其他 Azure 资源或应用程序进行访问,或通过对等互连或某种类型的 VPN 连接连接到虚拟网络

在此输入图像描述

现在,在您的情况下,您正在寻找的是仅通过 Azure API 管理启用对 Azure 容器应用程序的访问的体系结构。在这种情况下,您必须使用内部模式部署 Azure 容器应用程序环境,并将入口流量设置为仅限于 VNet(虚拟网络)。

我假设可以从 Internet 访问 Azure API 管理。在这种情况下,您必须在 Azure 虚拟网络内部署 Azure API 管理。有两种可能的模式:内部模式和外部模式。在您的场景中,您可以使用外部模式。更多详情可在这找到。当 API 管理实例处于外部模式时,可以从公共 Internet 访问开发人员门户、API 网关和其他 API 管理终结点,并且后端服务位于 Azure 虚拟网络中。

在此输入图像描述

在这里,我还附上了解决方案架构,以展示所有这些组件是如何连接在一起的。我这里也有 Azure Front Door,但 API 管理是使用外部模式部署的。请记住,您的 Azure 容器应用程序环境域还需要私有 DNS 区域,以便可以使用 URL 从 Azure API 管理引用特定 API,例如:

https://ca-tmf-mip-vc-api--v-01.blacklacier-cf61414b.westeurope.azurecontainerapps.io

在此输入图像描述

有用的网址:

带有 Bicep 文件的存储库以使用内部模式部署 Azure 容器应用程序

Azure 容器应用程序虚拟网络集成