锁定应用服务环境

重要

本文介绍用于独立应用服务计划的应用服务环境 v2。 应用服务环境 v2 将于 2024 年 8 月 31 日停用。 应用服务环境有新版本,此版本更易于使用并在更强大的基础结构上运行。 若要详细了解该新版本,请先参阅应用服务环境简介。 如果你当前正在使用应用服务环境 v2,请按照本文中的步骤迁移到新版本。

从 2024 年 1 月 29 日起,无法再使用任何可用方法(包括 ARM/Bicep 模板、Azure 门户、Azure CLI 或 REST API)创建新的应用服务环境 v2 资源。 你必须在 2024 年 8 月 31 日之前迁移到应用服务环境 v3,以防止资源删除和数据丢失。

应用服务环境 (ASE) 需要访问许多的外部依赖项才能正常运行。 ASE 驻留在客户的 Azure 虚拟网络中。 客户必须允许 ASE 依赖项流量,对于想要锁定从虚拟网络传出的所有流量的客户而言,这是一个问题。

有许多入站终结点可用于管理 ASE。 无法通过防火墙设备发送入站管理流量。 此流量的源地址是已知的,并已在应用服务环境管理地址文档中发布。 还有一个名为 AppServiceManagement 的服务标记,可与网络安全组 (NSG) 结合使用来保护入站流量。

ASE 出站依赖项几乎完全是使用 FQDN 定义的,不附带任何静态地址。 缺少静态地址意味着无法使用网络安全组锁定来自 ASE 的出站流量。 这些地址会经常发生更改,导致用户无法基于当前解析设置规则并使用这些规则来创建 NSG。

保护出站地址的解决方案在于使用可基于域名控制出站流量的防火墙设备。 Azure 防火墙可以根据目标的 FQDN 限制出站 HTTP 和 HTTPS 流量。

系统体系结构

部署出站流量通过防火墙设备的 ASE 需要更改 ASE 子网中的路由。 路由在 IP 级别运行。 如果在定义路由时不谨慎,就可能强制 TCP 将流量从另一个地址回复给源。 如果回复地址与流量发送到的地址不同,会产生非对称路由问题,这会破坏 TCP。

必须定义路由,以便发往 ASE 的入站流量能够以传入流量的相同方式做出回复。 必须为入站管理请求和入站应用程序请求定义路由。

传入和传出 ASE 的流量必须遵守以下约定

  • 如果使用了防火墙设备,则不支持发往 Azure SQL、存储和事件中心的流量。 此流量必须直接发送到这些服务。 实现此目的的方法是为这三个服务配置服务终结点。
  • 必须定义路由表规则,用于从入站管理流量的来源位置发回这些流量。
  • 必须定义路由表规则,用于从入站应用程序流量的来源位置发回这些流量。
  • 可以使用路由表规则将离开 ASE 的所有其他流量发送到防火墙设备。

ASE with Azure Firewall connection flow

锁定入站管理流量

如果还没有为 ASE 子网分配 NSG,请为其创建一个。 在 NSG 中,将第一个规则设为允许来自端口 454、455 上名为 AppServiceManagement 的服务标记的流量。 若要从公共 IP 管理 ASE,只需设置允许从 AppServiceManagement 标记进行访问的规则。 该服务标记背后的地址仅用于管理 Azure 应用服务。 流经这些连接的管理流量由身份验证证书提供加密和保护。 此通道上的典型流量包括客户发起的命令和运行状况探测等等。

通过门户生成的包含新子网的 ASE 配置了包含 AppServiceManagement 标记的允许规则的 NSG。

ASE 还必须允许端口 16001 上来自负载均衡器标记的入站请求。 端口 16001 上来自负载均衡器的请求在负载均衡器和 ASE 前端之间进行保持连接检查。 如果端口 16001 受到阻止,ASE 将无法正常运行。

在 ASE 中配置 Azure 防火墙

使用 Azure 防火墙锁定现有 ASE 的传出流量的步骤如下:

  1. 为 ASE 子网中的 SQL、存储和事件中心启用服务终结点。 若要启用服务终结点,请转到“网络门户”>“子网”,然后从服务终结点下拉列表中选择“Microsoft.EventHub”、“Microsoft.SQL”和“Microsoft.Storage”。 为 Azure SQL 启用服务终结点后,还必须为应用的所有 Azure SQL 依赖项配置服务终结点。

    select service endpoints

  2. 在 ASE 所在的虚拟网络中创建名为 AzureFirewallSubnet 的子网。 遵循 Azure 防火墙文档中的指导创建 Azure 防火墙。

  3. 在 Azure 防火墙 UI >“规则”>“应用程序规则集合”中,选择“添加应用程序规则集合”。 提供名称、优先级,并设置“允许”。 在“FQDN 标记”部分提供名称,将源地址设置为 *,然后选择“应用服务环境 FQDN 标记”和“Windows 更新”。

    Add application rule

  4. 在 Azure 防火墙 UI >“规则”>“网络规则集合”中,选择“添加网络规则集合”。 提供名称、优先级,并设置“允许”。 在“规则”部分的“IP 地址”下,提供一个名称,选择“任何”作为协议,将源和目标地址设置为 *,并将端口设置为 123。 此规则允许系统使用 NTP 执行时钟同步。 以相同的方式针对端口 12000 创建另一个规则,以帮助诊断任何系统问题。

    Add NTP network rule

  5. 在 Azure 防火墙 UI >“规则”>“网络规则集合”中,选择“添加网络规则集合”。 提供名称、优先级,并设置“允许”。 在“规则”部分中,在“服务标记”下,提供一个名称,选择“任何”作为协议,将 * 设置为源地址,选择服务标记 AzureMonitor,然后将端口设置为 80、443。 此规则允许系统向 Azure Monitor 提供运行状况和指标信息。

    Add NTP service tag network rule

  6. 创建一个路由表,其中需包含针对 AppServiceManagement 服务标记以及 Internet 的下一个跃点的路由。 此路由表条目是必需的,可避免不对称路由问题。 将虚拟设备路由添加到 0.0.0.0/0 的路由表,并将 Azure 防火墙专用 IP 地址用作下一跃点。 你应使用服务标记而不是 IP 地址,以避免在管理地址更改时不得不更新路由表。 但是,如果需要使用管理地址,可以从应用服务环境管理地址下载所使用的云的服务标记参考文件,并基于这些地址创建自己的路由。

  7. 将创建的路由表分配到 ASE 子网。

在防火墙后部署 ASE

在防火墙后部署 ASE 的步骤与使用 Azure 防火墙配置现有 ASE 的步骤相同,不过,需要创建 ASE 子网,然后遵循上述步骤。 若要在现有的子网中创建 ASE,需要根据使用资源管理器模板创建 ASE 文档中所述使用资源管理器模板。

应用程序流量

完成上述步骤后,ASE 可以正常运行。 但仍需根据应用程序的需要配置一些设置。 ASE 中配置了 Azure 防火墙的应用程序存在两个问题。

  • 必须将应用程序依赖项添加到 Azure 防火墙或路由表。
  • 必须为应用程序流量创建路由,以避免非对称路由问题

如果应用程序有依赖项,则需要将这些依赖项添加到 Azure 防火墙。 创建允许 HTTP/HTTPS 流量的应用程序规则,并针对其他方面的控制创建网络规则。

如果你知道应用程序请求流量来自哪个地址范围,可将该范围添加到要分配给 ASE 子网的路由表。 如果地址范围很大或未指定,则你可以使用应用程序网关等网络设备来提供一个要添加到路由表的地址。 有关在 ILB ASE 中配置应用程序网关的详细信息,请阅读将 ILB ASE 与应用程序网关集成

使用应用程序网关只是系统配置方法的一个例子。 如果遵循此路径,则需要将路由添加到 ASE 子网路由表,以便发送到应用程序网关的回复流量直接通过该路由传送。

日志记录

Azure 防火墙可将日志发送到 Azure 存储、事件中心或 Azure Monitor 日志。 若要将应用与支持的任何目标相集成,请转到 Azure 防火墙门户 >“诊断日志”,并为所需目标启用日志。 与 Azure Monitor 日志集成后,可以查看已发送到 Azure 防火墙的任何流量的日志记录。 若要查看被拒绝的流量,请打开 Log Analytics 工作区门户 >“日志”,并输入如下所示的查询

AzureDiagnostics | where msg_s contains "Deny" | where TimeGenerated >= ago(1h)

首次运行应用程序时,如果并不了解所有的应用程序依赖项,则将 Azure 防火墙与 Azure Monitor 日志集成会很有用。 可以通过在 Azure Monitor 中分析日志数据详细了解 Azure Monitor 日志。

在 ASE 中配置第三方防火墙

仅当所要配置的防火墙设备不是 Azure 防火墙时,才需要以下信息。 有关 Azure 防火墙的信息,请参阅前面的部分

在 ASE 中部署第三方防火墙时,请考虑以下依赖项:

  • 应在支持服务终结点的服务中配置服务终结点。
  • IP 地址依赖项适用于非 HTTP/S 流量(TCP 和 UDP 流量)
  • 可将 FQDN HTTP/HTTPS 终结点放在防火墙设备中。
  • 通配符 HTTP/HTTPS 终结点是可以根据许多限定符随 ASE 一起变化的依赖项。
  • 仅当要在 ASE 中部署 Linux 应用时,才需要考虑 Linux 依赖项。 如果不将 Linux 应用部署到 ASE,则不需要将这些地址添加到防火墙。

支持服务终结点的依赖项

终结点
Azure SQL
Azure 存储
Azure 事件中心

IP 地址依赖项

终结点 详细信息
*:123 NTP 时钟检查。 在端口 123 上的多个终结点中检查流量
*:12000 此端口用于某些系统监视活动。 如果被阻止,则有些问题将更难以诊断,但 ASE 会继续运行
40.77.24.27:80 需要使用它监视 ASE 问题并发出警报
40.77.24.27:443 需要使用它监视 ASE 问题并发出警报
13.90.249.229:80 需要使用它监视 ASE 问题并发出警报
13.90.249.229:443 需要使用它监视 ASE 问题并发出警报
104.45.230.69:80 需要使用它监视 ASE 问题并发出警报
104.45.230.69:443 需要使用它监视 ASE 问题并发出警报
13.82.184.151:80 需要使用它监视 ASE 问题并发出警报
13.82.184.151:443 需要使用它监视 ASE 问题并发出警报

使用 Azure 防火墙,可以使用 FQDN 标记自动配置以下内容。

FQDN HTTP/HTTPS 依赖项

终结点
microsoftgraph.chinacloudapi.cn:443
login.live.com:443
login.windows.com:443
login.chinacloudapi.cn:443
login.chinacloudapi.cn:443
*.login.chinacloudapi.cn:443
*.login.microsoft.com:443
client.wns.windows.com:443
definitionupdates.microsoft.com:443
go.microsoft.com:80
go.microsoft.com:443
www.microsoft.com:80
www.microsoft.com:443
wdcpalt.microsoft.com:443
wdcp.microsoft.com:443
ocsp.msocsp.com:443
ocsp.msocsp.com:80
oneocsp.microsoft.com:80
oneocsp.microsoft.com:443
mscrl.microsoft.com:443
mscrl.microsoft.com:80
crl.microsoft.com:443
crl.microsoft.com:80
www.thawte.com:443
crl3.digicert.com:80
ocsp.digicert.com:80
ocsp.digicert.com:443
csc3-2009-2.crl.verisign.com:80
crl.verisign.com:80
ocsp.verisign.com:80
cacerts.digicert.com:80
azperfcounters1.blob.core.chinacloudapi.cn:443
azurewatsonanalysis-prod.core.chinacloudapi.cn:443
global.metrics.nsatc.net:80
global.metrics.nsatc.net:443
az-prod.metrics.nsatc.net:443
antares.metrics.nsatc.net:443
azglobal-black.azglobal.metrics.nsatc.net:443
azglobal-red.azglobal.metrics.nsatc.net:443
antares-black.antares.metrics.nsatc.net:443
antares-red.antares.metrics.nsatc.net:443
prod.microsoftmetrics.com:443
maupdateaccount.blob.core.chinacloudapi.cn:443
clientconfig.passport.net:443
packages.microsoft.com:443
schemas.microsoft.com:80
schemas.microsoft.com:443
management.core.chinacloudapi.cn:443
management.core.chinacloudapi.cn:80
management.chinacloudapi.cn:443
www.msftconnecttest.com:80
shavamanifestcdnprod1.azureedge.net:443
validation-v2.sls.microsoft.com:443
flighting.cp.wd.microsoft.com:443
dmd.metaservices.microsoft.com:80
admin.core.chinacloudapi.cn:443
prod.warmpath.msftcloudes.com:443
prod.warmpath.msftcloudes.com:80
gcs.prod.monitoring.core.chinacloudapi.cn:80
gcs.prod.monitoring.core.chinacloudapi.cn:443
azureprofileruploads.blob.core.chinacloudapi.cn:443
azureprofileruploads2.blob.core.chinacloudapi.cn:443
azureprofileruploads3.blob.core.chinacloudapi.cn:443
azureprofileruploads4.blob.core.chinacloudapi.cn:443
azureprofileruploads5.blob.core.chinacloudapi.cn:443
azperfmerges.blob.core.chinacloudapi.cn:443
azprofileruploads1.blob.core.chinacloudapi.cn:443
azprofileruploads10.blob.core.chinacloudapi.cn:443
azprofileruploads2.blob.core.chinacloudapi.cn:443
azprofileruploads3.blob.core.chinacloudapi.cn:443
azprofileruploads4.blob.core.chinacloudapi.cn:443
azprofileruploads6.blob.core.chinacloudapi.cn:443
azprofileruploads7.blob.core.chinacloudapi.cn:443
azprofileruploads8.blob.core.chinacloudapi.cn:443
azprofileruploads9.blob.core.chinacloudapi.cn:443
azureprofilerfrontdoor.chinacloudapp.cn:443
settings-win.data.microsoft.com:443
maupdateaccount2.blob.core.chinacloudapi.cn:443
maupdateaccount3.blob.core.chinacloudapi.cn:443
dc.services.visualstudio.com:443
gmstorageprodsn1.blob.core.chinacloudapi.cn:443
gmstorageprodsn1.file.core.chinacloudapi.cn:443
gmstorageprodsn1.queue.core.chinacloudapi.cn:443
gmstorageprodsn1.table.core.chinacloudapi.cn:443
rteventservice.trafficmanager.cn:443
ctldl.windowsupdate.com:80
ctldl.windowsupdate.com:443
global-dsms.dsms.core.chinacloudapi.cn:443

通配符 HTTP/HTTPS 依赖项

终结点
gr-prod-*.chinacloudapp.cn:443
gr-prod-*.azurewebsites.chinacloudapi.cn:443
*.management.chinacloudapi.cn:443
*.update.microsoft.com:443
*.windowsupdate.microsoft.com:443
*.identity.chinacloudapi.cn:443
*.ctldl.windowsupdate.com:80
*.ctldl.windowsupdate.com:443
*.prod.microsoftmetrics.com:443
*.dsms.core.chinacloudapi.cn:443
*.prod.warm.ingest.monitor.core.chinacloudapi.cn:443

Linux 依赖项

端点
wawsinfraprodbay063.blob.core.chinacloudapi.cn:443
registry-1.dockerhub.azk8s.cn:443
auth.dockerhub.azk8s.cn:443
production.cloudflare.docker.com:443
download.docker.com:443
us.archive.ubuntu.com:80
download.mono-project.com:80
packages.treasuredata.com:80
security.ubuntu.com:80
oryx-cdn.microsoft.io:443
*.cdn.mscr.io:443
*.data.mcr.microsoft.com:443
mcr.microsoft.com:443
*.data.mcr.microsoft.com:443
packages.fluentbit.io:80
packages.fluentbit.io:443
apt-mo.trafficmanager.cn:80
apt-mo.trafficmanager.cn:443
azure.archive.ubuntu.com:80
azure.archive.ubuntu.com:443
changelogs.ubuntu.com:80
13.74.252.37:11371
13.75.127.55:11371
13.76.190.189:11371
13.80.10.205:11371
13.91.48.226:11371
40.76.35.62:11371
104.215.95.108:11371