关于 azure-app-service-security
azure-app-service-security 是为 Azure App Service 上的 Web 应用和 API 规划安全控制的指导技能,涵盖身份、机密、网络暴露、传输安全和监控。
主要功能
- 01托管身份与最小权限访问
- 02Easy Auth 登录配置
- 03Key Vault 机密引用
- 04专用终结点与 VNet 集成
- 05HTTPS、TLS 和 WAF 加固
- 06日志与 Defender 监控
适用场景
- 01加固 App Service Web 应用或 API
- 02通过专用终结点限制入站访问
- 03用 Key Vault 引用替换明文应用机密
- 04检查 WAF 后方的公网应用暴露
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vinayaklatthe/ microsoft-security-skills --skill azure-app-service-security安装后在 Claude Code 中输入/azure-app-service-security确认已加载。
详细介绍
Azure App Service 安全
Azure App Service 将 Web 应用和 API 托管为托管式 PaaS。保护它的安全意味着消除配置中的机密信息、尽可能移除公网暴露、强制使用现代传输协议,并在必须公开时将其置于 WAF 后方。
适用场景
加固托管在 Azure App Service 上的 Web 应用和 API。使用此技能规划 Web App / API App 的身份、网络、机密信息和传输安全状况。
此技能不适用于仅使用 Azure Functions 的场景(平台类似,但彼此独立)、AKS 工作负载或托管在 VM 上的 Web 应用。
根据暴露模式选择配置
| 暴露模式 | 入站 | 出站 | 前端 |
|---|---|---|---|
| 仅限内部的应用(内联网、供 VNet 工作负载使用的 API) | 专用终结点,禁用公共访问 | VNet 集成到 Spoke | 内部 Application Gateway |
| 公共 Web 应用,包含敏感数据 | 公共访问 + 仅允许访问限制指向 WAF | VNet 集成 | 配置为 Prevention 模式的 Front Door 或带 WAF 的 App Gateway |
| 基础公共 Web 应用 | 公共访问,默认配置 | 无 / VNet 集成 | 带 WAF 的 App Gateway |
| 供合作伙伴使用的 API | 专用终结点 + 前置 APIM | VNet 集成 | APIM(若 APIM 公开,则为其配置 WAF) |
| 后台工作进程 / 无入站流量 | 禁用公共访问 | VNet 集成 | 无 |
经验法则:如果不需要连接互联网,请使用专用终结点并禁用公共网络访问。如果确实需要连接互联网,请在前方部署配置为 Prevention 模式的 Front Door / 带 WAF 的 App Gateway,并限制应用仅接受来自 WAF 的 IP 范围或服务标记的流量。
方案
-
启用托管标识 — 默认使用系统分配的托管标识。为其授予 Azure SQL(
SQL DB Contributor不合适——应使用 AAD 身份验证和包含用户)、Storage(Storage Blob Data Reader)、Key Vault(Key Vault Secrets User)上的最小权限角色。 验证:应用具有托管标识;配置中没有嵌入密码的 SQL / Storage 连接字符串。 -
使用 Easy Auth 登录 — 使用内置的 App Service 身份验证(Easy Auth) 和 Microsoft Entra ID 实现 OIDC 登录,无需编写身份验证代码。配置重定向 URI、令牌存储,并设置
requireAuthentication = true以限制对整个应用的访问。 验证:匿名请求会返回 302 并重定向到 Entra 登录页面;经过身份验证的请求会返回 200,并包含用户的主体声明。 -
通过 Key Vault 引用管理机密 — 将机密存储在 Key Vault 中;在应用设置中使用
@Microsoft.KeyVault(SecretUri=...)引用。无需更改代码;托管标识会在启动时或刷新时读取机密。 验证:应用设置中的Key Vault Reference显示为 Resolved;配置中没有明文机密。 -
网络隔离 — 对出站流量使用 VNet 集成(以便应用访问专用终结点,以及通过网关访问本地网络)。对敏感应用使用入站 专用终结点。使用专用终结点时,请禁用公共访问。 验证:应用的出站 IP 位于集成子网中;从公共互联网向仅限专用终结点的应用进行入站测试,结果为 403 / 连接被拒绝。
-
强化传输安全 — 强制启用 仅 HTTPS,最低 TLS 版本为 1.2(建议使用 TLS 1.3),禁用 FTP(仅使用 FTPS 或部署中心),并在适当情况下启用 HSTS。 验证:HTTP 请求会 301 重定向到 HTTPS;
httpsOnly = true;minTlsVersion = "1.2"或更高;如果不需要 FTP,则设置ftpsState = "Disabled"。 -
对外公开时在前端部署 WAF — 使用 Front Door(全球)或带有 WAF 的 App Gateway(区域),并设为 防护模式。通过 访问限制,使用 WAF 的服务标记(
AzureFrontDoor.Backend)或 IP 范围以及X-Azure-FDID标头,将 App Service 的入站流量限制为仅允许来自 WAF 的流量。 验证:直接请求 App Service URL 时返回 403;通过 WAF FQDN 请求时返回 200。 -
监视并启用 Defender — 将诊断日志发送到 Log Analytics,在计划上启用 Defender for App Service,并使用 App Insights 收集应用遥测数据。针对异常身份验证失败设置警报。
防护措施
- 对敏感应用使用专用终结点移除公共入站访问;对公共应用配合使用 WAF。 直接暴露于互联网且未使用 WAF 的应用会持续遭受扫描。
- 使用托管标识和 Key Vault 引用,消除配置中的机密。 应用设置中的连接字符串迟早会成为审计发现。
- 强制启用仅 HTTPS 和新式 TLS;禁用旧版协议和 FTP。 TLS 1.0 / 1.1 和 FTP 会立即导致审计不通过。
- Easy Auth 不能取代授权。 它负责身份验证;对于敏感操作,仍需在代码中检查角色 / 声明。
- 访问限制是后门上的锁。 如果不将 App Service 限制为仅允许来自 WAF 的 IP / FDID 标头,攻击者就能直接访问 App Service URL,绕过 WAF。
- Defender for App Service 能捕获 AV 无法发现的问题。 上传 Webshell、应用行为异常——请在计划上启用 Defender。
常见反模式
- “在应用设置中以明文形式存储连接字符串”——任何拥有该应用读取者权限的人都能看到。使用 Key Vault 引用。
- “将带 WAF 的公共 App Service URL 视为‘稍后推荐添加’”——攻击者从第一天起就能绕过 WAF。启用 WAF 时,收紧访问限制。
- “为旧版部署启用 FTP”——凭据以明文传输。使用 FTPS 或部署中心。
- “因为一个旧版回调而关闭仅限 HTTPS”——修复回调,不要降低整个应用的安全性。
- *“Easy Auth + ‘允许对 /api/ 匿名访问’”**——这会让防护形同虚设。对所有请求进行身份验证;在应用内部进行授权。
- “集成 VNet,却不禁用公共访问”——你增强了安全性,却没有关闭旧入口。
示例提示词
使用 Easy Auth、托管标识和 TLS 加固 Azure App Service Web 应用。如何通过专用终结点和 VNet 集成锁定 App Service?使用 Key Vault 引用存储 App Service 密钥,而不是使用纯文本应用设置。在 App Service 前部署带 WAF 的 Front Door,并锁定后门。禁用 FTP、强制仅使用 HTTPS,并将最低 TLS 版本设为 1.2。检查我的 App Service 网络和身份验证配置,找出安全漏洞。
Microsoft Learn
- App Service 安全性:https://learn.microsoft.com/azure/app-service/overview-security
- Easy Auth:https://learn.microsoft.com/azure/app-service/overview-authentication-authorization
- Key Vault 引用:https://learn.microsoft.com/azure/app-service/app-service-key-vault-references
- 网络功能:https://learn.microsoft.com/azure/app-service/networking-features
- 专用终结点:https://learn.microsoft.com/azure/app-service/networking/private-endpoint
- 访问限制:https://learn.microsoft.com/azure/app-service/app-service-ip-restrictions
- TLS / HTTPS:https://learn.microsoft.com/azure/app-service/configure-ssl-bindings
- Defender for App Service:https://learn.microsoft.com/azure/defender-for-cloud/defender-for-app-service-introduction