原文:Jason Freeberg, Shubham Dhond
翻译:汪宇杰
导语
App Service 使用网站的发布配置文件中的基本身份验证凭据访问 FTP 和 WebDeploy。这些API非常适合浏览站点的文件系统,上传驱动和应用程序,以及通过MsBuild进行部署。但是,企业通常需要满足安全要求,而宁愿禁用此基本身份验证访问,以便员工只能通过由 Azure Active Directory(AAD)支持的API来访问公司的 App Services。
本文介绍如何禁用基本授权,监控任何登录尝试或成功的登录,以及如何使用Azure策略来确保所有新站点都禁用了基本身份验证。另外,禁用或启用基本身份验证的API由AAD和RBAC支持,因此您可以控制哪些用户或角色能够重新启用站点的基本身份验证。
禁用访问权限
以下各节假定您具有对该站点的所有者级别的访问权限。在编写本文时,相应的CLI命令集正在开发中。
FTP
要禁用对站点的FTP访问,请运行以下CLI命令。将占位符替换为您的资源组和站点名称。
az resource update --resource-group <resource-group> --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<site-name> --set properties.allow=false
替换占位符后,选择文本,然后按 Ctrl S(意思是发送)。在右侧面板上,您可以看到响应代码和正文。要确认FTP访问被阻止,您可以尝试使用FileZilla这样的FTP客户端进行身份验证。要检索发布凭据,请转到网站的欢迎页,然后单击“下载发布配置文件”。使用文件的FTP主机名,用户名和密码进行身份验证,您将得到 401 Unauthenticted 返回。
WebDeploy 和 SCM
要禁用对WebDeploy端口和SCM站点的基本身份验证访问,请运行以下CLI命令。将占位符替换为您的资源组和站点名称。
az resource update --resource-group <resource-group> --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<site-name> --set properties.allow=false
若要确认在WebDeploy上阻止了发布配置文件凭据,请尝试使用 Visual Studio 2019 发布 Web 应用程序。
https://docs.microsoft.com/visualstudio/deployment/quickstart-deploy-to-azure?view=vs-2019
创建自定义RBAC角色
上一节中的 API 支持基于 Azure 角色的访问控制(RBAC),这意味着您可以创建自定义角色来阻止用户使用该 API 并将权限较低的用户分配给该角色,这样他们就无法在任何网站上启用基本身份验证。要配置自定义角色,请按照以下说明进行操作。
- 打开Azure门户
- 打开您要在其中创建自定义角色的订阅
- 在左侧导航面板上,单击访问控制(IAM)
- 单击 添加,然后单击下拉列表中的添加自定义角色
- 提供角色的名称和说明。
- 对于基准权限,您可以克隆组织的现有角色之一,或默认角色之一
- 单击权限选项卡,然后单击排除权限
- 在上下文页面中,单击Microsoft Web Apps。这将打开App Service的所有RBAC操作的列表。
- 找到 microsoft.web/sites/basicPublishingCredentialsPolicies/ftp 和 microsoft.web/sites/basicPublishingCredentialsPolicies/scm,选中写复选框。这会将动作添加为角色的 NotActions。 你也可以在部署槽上关闭这项设置。参考 microsoft.web/sites/slots/basicPublishingCredentialsPolicies/ftp and microsoft.web/sites/slots/basicPublishingCredentialsPolicies/scm
- 点击底部的审核 创建。在权限下,您将看到basicPublishingCredentialsPolicies API列为NotActions。
- 最后,单击创建。您现在可以将此角色分配给组织的用户。
有关设置自定义RBAC角色的更多信息。
https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles-portal#step-2-choose-how-to-start?WT.mc_id=AZ-MVP-5002809
使用Azure Monitor进行审计
所有成功和尝试的登录均记录为Azure Monitor AppServiceAuditLogs日志类型。这意味着您可以使用Azure Monitor的所有功能来根据日志内容存储,查询和警报。
Azure Monitor功能和服务的定价信息
https://azure.microsoft.com/pricing/details/monitor/
要审计 FTP 和WebDeploy 上的尝试登录和成功登录,请单击Web应用程序上的“诊断设置”选项卡。这将打开一个页面,以选择所需的日志类型以及日志的目的地。可以将日志发送到Log Analytics,存储帐户或事件中心。
- 提供诊断设置的名称
- 选择您要捕获的日志类型
- 选择要将日志发送到的服务(服务必须已经创建,您无法从该页面创建它们)
- 单击保存
要确认日志已发送到您选择的服务,请尝试通过 FTP 或 WebDeploy 登录。下面显示了示例存储帐户日志。
{ "time": "2020-07-16T17:42:32.9322528Z", "ResourceId": "/SUBSCRIPTIONS/EF90E930-9D7F-4A60-8A99-748E0EEA69DE/RESOURCEGROUPS/FREEBERGDEMO/PROVIDERS/MICROSOFT.WEB/SITES/FREEBERG-WINDOWS", "Category": "AppServiceAuditLogs", "OperationName": "Authorization", "Properties": { "User": "
使用Azure Policy遵守规范
Azure Policy 可以帮助您强制执行组织标准并大规模评估合规性。使用Azure Policy,可以定义 JSON 格式的策略来更改或拒绝创建 Azure 服务。在这种情况下,您可以使用 Azure Policy 来确保所有新创建的站点都已禁用FTP和/或WebDeploy的发布配置文件身份验证。
请按照以下步骤执行以禁止在任何新创建的站点上发布配置文件身份验证的策略。
- 创建一个新的 Azure Policy 资源
- 单击 Authoring 下的 Definitions
- 点击 Policy Definition
- 选择定义订阅,名称并提供描述
- 在策略规则下,粘贴以下JSON定义
{ "mode": "All", "policyRule": { "if": { "field": "Microsoft.Web/sites/basicPublishingCredentialsPolicies.ftp.allow", "equals": true }, "then": { "effect": "deny" } } }
最后,点击保存。
总结
在本文中,您学习了如何对站点的 FTP 和 WebDeploy 端口禁用基本身份验证。此外,您可以使用 Azure Monitor 审核任何尝试的登录,并使用 Azure Policy 确保任何新站点均符合企业的安全要求。