本文介绍如何在将代码部署到 Azure 应用服务应用时禁用基本身份验证(用户名和密码身份验证)。
应用服务为 FTP 和 Web 部署客户端提供基本身份验证,可以使用 部署凭据进行连接。 这些 API 非常适合浏览站点的文件系统、上传驱动程序和实用工具以及使用 MSBuild 进行部署。
但是,企业通常需要比基本身份验证更安全的部署方法,例如 Microsoft Entra ID 身份验证。 (有关详细信息,请参阅 Azure 应用服务中的部署方法的身份验证类型。Microsoft Entra 使用基于 OAuth 2.0 令牌的授权,它具有许多优势和改进,可帮助缓解基本身份验证问题。 例如,OAuth 访问令牌的生存期有限,特定于颁发令牌的应用程序和资源。 不能重复使用它们。 Microsoft Entra 还允许使用托管标识从其他 Azure 服务进行部署。
禁用基本身份验证
提供了两个基本身份验证控制措施:
- 对于 FTP 部署,基本身份验证由
basicPublishingCredentialsPolicies/ftp
标志(门户中 的 FTP 基本身份验证发布凭据 选项)控制。 - 对于使用基本身份验证的其他部署方法,例如 Visual Studio、本地 Git 和 GitHub,基本身份验证由
basicPublishingCredentialsPolicies/scm
标志(门户中 的 SCM 基本身份验证发布凭据 选项)控制。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择 “配置>常规”设置。
对于 SCM 基本身份验证发布凭据 或 FTP 基本身份验证发布凭据,请选择 “关闭 ”,然后选择“ 保存”。
若要确认 FTP 访问被阻止,请尝试 使用 FTP/FTPS 连接到应用。 应收到“401 未经身份验证”消息。
若要确认 Git 访问被阻止,请尝试 本地 Git 部署。 应收到“身份验证失败”消息。
在没有基本身份验证的情况下部署
禁用基本身份验证时,依赖于基本身份验证的部署方法会停止工作。
下表显示了禁用基本身份验证时各种部署方法的行为方式,以及是否存在任何回退机制。 有关详细信息,请参阅 Azure 应用服务中部署方法的身份验证类型。
部署方法 | 禁用基本身份验证时 |
---|---|
Visual Studio 部署 | 使用 Microsoft Entra 身份验证的部署需要 Visual Studio 2022 版本 17.12 或更高版本。 |
FTP | 无效。 |
本地 Git | 无效。 |
Azure CLI | 在 Azure CLI 2.48.1 或更高版本中,以下命令回退到Microsoft Entra 身份验证:az webapp up 。az webapp deploy 。az webapp log deployment show 。az webapp log deployment list 。az webapp log download 。az webapp log tail 。az webapp browse 。az webapp create-remote-connection 。az webapp ssh 。az functionapp deploy 。az functionapp log deployment list 。az functionapp log deployment show 。az functionapp deployment source config-zip 。 |
Maven 插件或 Gradle 插件 | 有效。 |
使用应用服务中的生成服务的 GitHub | 无效。 |
GitHub 活动 | 使用 基本身份验证 的现有 GitHub Actions 工作流无法进行身份验证。 在 部署中心,断开现有 GitHub 配置的连接,并使用 用户分配的标识 选项创建新的 GitHub Actions 配置。 如果现有的 GitHub Actions 部署是手动配置的,请尝试改用服务主体或 OpenID Connect。 对于 部署中心中的新 GitHub Actions 配置,请使用 用户分配的标识 选项。 |
创建向导中的部署 | 当“基本身份验证”设置为“禁用”且“持续部署”设置为“启用”时,GitHub Actions 将使用“用户分配的标识”选项 (OpenID Connect) 进行配置。 |
使用应用服务中的生成服务的 Azure Repos | 无效。 |
Bitbucket | 无效。 |
使用 AzureWebApp 任务的 Azure Pipelines |
有效。 |
使用 AzureRmWebAppDeployment 任务的 Azure Pipelines |
使用最新 AzureRmWebAppDeployment 任务,获取回退行为。 PublishProfile 连接类型不起作用,因为它使用基本身份验证。 将连接类型更改为 AzureRM . 在非 Windows Azure Pipelines 代理上,身份验证正常运行。 在 Windows 代理上,可能需要修改 任务使用的部署方法 。 当 DeploymentType: 'webDeploy' 被使用并且基本身份验证被禁用时,任务将使用 Microsoft Entra 令牌进行身份验证。 如果不使用 windows-latest 代理,或者使用自托管代理,则还有其他要求。 有关详细信息,请参阅无法从 Windows 代理使用 Microsoft Entra 身份验证将 Web 部署到 Azure 应用服务。其他部署方法有效,例如 zip 部署 或 包运行。 |
创建没有基本身份验证权限的自定义角色
若要防止具有较低特权的用户为任何应用启用基本身份验证,可以创建自定义角色并将用户分配到该角色。
在 Azure 门户中的顶部菜单中,搜索并选择要在其中创建自定义角色的订阅。
在左侧菜单中,选择“ 访问控制”(IAM)>“添加>自定义角色。
根据需要设置 “基本 ”选项卡,然后选择“ 下一步”。
在“ 权限 ”选项卡中,选择“ 排除权限”。
查找并选择 Microsoft Web 应用程序,然后搜索以下操作:
操作 说明 microsoft.web/sites/basicPublishingCredentialsPolicies/ftp
应用服务应用的 FTP 发布凭据 microsoft.web/sites/basicPublishingCredentialsPolicies/scm
应用服务应用的 SCM 发布凭据 microsoft.web/sites/slots/basicPublishingCredentialsPolicies/ftp
应用服务槽的 FTP 发布凭据 microsoft.web/sites/slots/basicPublishingCredentialsPolicies/scm
应用服务槽的 SCM 发布凭据 在这些操作下,选择“写入”框,然后选择“添加”。 此步骤会将操作添加为角色的“NotActions”。
“ 权限 ”选项卡应如以下屏幕截图所示:
选择“查看 + 创建”,然后选择“创建”。
现在可以将此角色分配给组织的用户。
有关详细信息,请参阅 使用 Azure 门户创建或更新 Azure 自定义角色。
监视基本身份验证尝试
所有成功的登录和已尝试的登录都会记录到 Azure Monitor AppServiceAuditLogs
日志类型。 若要审核 FTP 和 Web 部署上的尝试和成功登录,请按照 将日志发送到 Azure Monitor 中的步骤进行操作,并启用 AppServiceAuditLogs
日志类型的传送。
若要确认日志已寄送到所选服务,请尝试通过 FTP 或 Web 部署登录。 以下示例显示了存储帐户日志。
{ "time": "2023-10-16T17:42:32.9322528Z", "ResourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.WEB/SITES/MY-DEMO-APP", "Category": "AppServiceAuditLogs", "OperationName": "Authorization", "Properties": { "User": "$my-demo-app", "UserDisplayName": "$my-demo-app", "UserAddress": "24.19.191.170", "Protocol": "FTP" } }
与身份验证相关的基本策略
Azure Policy 可帮助你强制实施组织标准并大规模评估合规性。 可以使用 Azure Policy 审核仍使用基本身份验证的任何应用,并修正任何不符合标准的资源。 下面是用于为应用服务审核和修正基本身份验证的内置策略:
下面是槽的相应策略:
常见问题解答
为什么我在 Visual Studio 中收到警告,指出基本身份验证已禁用?
Visual Studio 需要基本身份验证才能部署到 Azure 应用服务。 该警告提醒你应用上的配置已更改,无法再部署到该应用。 原因是你自己在应用上禁用了基本身份验证,或者你的组织策略强制为应用服务应用禁用基本身份验证。