你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 应用服务上的托管实例(预览版)是一个计划范围内的托管选项,适用于需要操作系统 (OS) 自定义、可选专用网络以及与 Azure 资源的安全集成的 Windows Web 应用。 本文介绍如何在以下关键领域配置托管实例:
- 托管标识
- 配置(安装)脚本
- 存储装载
- 注册密钥
- 远程桌面协议 (RDP) 访问
重要
托管实例为预览版,适用于选定区域中的 Windows Web 应用,并且仅限于 Pv4 和 Pmv4 定价计划。 稍后将在等多区域推出。 不支持 Linux 和容器。
(向应用服务计划)添加托管标识
计划级托管标识为平台层发生的基础结构操作提供身份验证支持,例如在启动期间访问 Azure 存储的配置(安装)脚本、从 Key Vault 拉取机密的注册表适配器以及向 Azure 文件存储进行身份验证的存储装载。 这些组件是计划内多个应用使用的共享资源。 例如,计划级标识允许托管实例对基础结构组件进行一次验证,而各应用为特定于应用的资源(例如数据库和应用程序机密)保留自己的标识。
在以下场景中,需要应用服务计划的托管标识:
- 从 Azure 存储安全地访问和检索配置脚本。
- 访问密钥库以提供用于存储装载和注册表项适配器的凭据和值。
请参阅管理用户分配的托管标识,以创建托管标识。
将托管标识添加到托管实例计划:
- 在 Azure 门户中转到你的托管实例。
- 选择“标识”>“用户分配的”。
- 选择 + 添加。
- 选择“订阅”和“托管标识”。
- 选择“添加”,将标识添加到计划中。
添加配置(安装)脚本
配置(安装)脚本在实例启动时运行,以应用持久的自定义。 示例包括注册组件对象模型 (COM)、安装 Microsoft/Windows Installer (MSI)、配置 Internet Information Services(IIS 服务器)、更改 ACL、启用 Windows 功能以及设置环境变量。
使用配置(安装)脚本需满足以下条件:
- 一个分配给应用服务计划的托管标识
- 一个存储帐户以及包含配置(安装)脚本包 (zip) 的 Blob 容器。
- 一个根目录包含
Install.ps1(入口点)的 zip 文件 -
存储帐户、容器或资源组上的
Storage Blob Data Reader角色
添加配置脚本:
在 Azure 门户中转到托管实例应用服务计划。
选择“配置”>“常规设置”。
在“配置脚本”部分,开始配置脚本。
设置 价值 存储帐户 选择存储帐户 集装箱 输入容器的名称 Zip 文件 输入 zip 文件的名称 价值 验证此值是否正确 选择“应用”以保存更改。
配置脚本最佳做法
- 使脚本具有幂等性(安装前检查)。
- 防范破坏性操作(避免修改受保护的 Windows 系统目录)。
- 错开大量安装,以减少启动延迟。
最小 zip 结构的示例:
Install.ps1
myInstallerfileNameGoesHere.msi
config.xml
示例配置脚本:
# Install Components, for example Crystal Reports, Control Library, Database Driver
$ComponentInstaller = "myInstallerFileNameGoesHere.msi"
try {
$Component = Join-Path $PSScriptRoot $ComponentInstaller
Start-Process $Component -ArgumentList "/q" -Wait -ErrorAction Stop
} catch {
Write-Error "Failed to install ${ComponentInstaller}: $_"
exit 1
}
配置存储装载
存储装载提供可供应用访问的持久性外部存储(例如 Azure 文件存储)。 用于需要共享文件系统访问的旧代码,而不用于机密(使用 Key Vault)。 虽然本地(临时)存储也可用,但永久性更改需要存储装载。
需要满足以下条件才能配置存储装载:
- 托管标识(用于密钥库访问)
- Key Vault 机密(凭据源)
配置存储装载:
- 在 Azure 门户中转到你的托管实例。
- 选择“配置”>“装载”。
- 选择“+ 新建存储装载”。
提供以下详细信息以配置存储装载:
| 设置 | 价值 |
|---|---|
| Name | 输入装载名称 |
| 存储类型 | Azure 文件存储、自定义存储或本地存储(临时存储) |
| 存储帐户 | 选择或输入存储帐户 |
| 文件共享 | 选择文件共享 |
| 价值 | 选择密钥保管库 |
| 机密 | 选择密钥保管库机密 |
| 装载驱动器号 | 选择驱动器号路径 |
可以将外部存储装载到托管实例。 装载的存储在重启后持久且可从应用的文件系统访问。
使用 Azure 文件存储配置存储装载
配置 Azure 文件存储的存储装载:
- 创建一个 Azure 存储帐户和一个 Azure 文件存储共享。
- 将连接凭据作为机密存储在 Key Vault 中。
支持的机密内容:(例如:
DefaultEndpointsProtocol=...;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net) - 在托管实例中添加装载(Azure 门户或 ARM/Bicep/Terraform)。
小窍门
通过 Azure RBAC 和 共享 ACL 强制实施共享级权限,以提高安全性。
使用自定义 UNC 配置存储装载
使用装载来访问托管在其他位置的 SMB 共享(本地、虚拟机或非 Microsoft)。 确保有网络连接(虚拟网络集成/专用终结点/防火墙)。
- 如果需要凭据,请使用以下格式将其存储在 Key Vault 机密中:
username=<user>,password=<password>- 避免域管理员帐户,使用最低特权服务标识。
- 在托管实例中添加装载。
配置注册表项
部分应用程序依赖于从 Windows 注册表读取的值。 使用注册表项适配器,可以创建注册表项,并使用 Azure Key Vault 中的机密作为值。
需要满足以下条件才能配置注册表项:
- 托管标识(用于密钥库访问)
- Key Vault 机密(凭据源)
配置注册表项:
转到“配置”>“注册表项”。
选择 + 添加。
设置 价值 路径 输入注册表路径 保管库 输入现有保管库名称 机密 选择或输入密钥保管库机密 类型 字符串或 DWORD 选择“添加”,添加注册表项。
注意
修改系统关键型注册表路径时要谨慎。 不正确的更改可能会影响实例的稳定性。
配置 RDP (Bastion) 访问
快速入门:自动部署 Azure Bastion 可让你通过远程桌面协议(RDP)安全地连接到 VM 实例。 通过 Azure Bastion 提供的 RDP 适用于暂时性诊断(日志检查、快速验证)。 如果打算通过门户使用 Bastion,则将 Bastion 资源升级到标准定价层,然后选择“本机客户端支持和基于 IP 连接”。
需要以下资源才能进行 Bastion/RDP 访问:
- 托管实例必须集成虚拟网络
- 目标虚拟网络上的 Azure Bastion 主机
- 必须允许端口 3389 从 Bastion 子网 NSG 到应用服务计划子网 NSG
配置 Bastion:
- 转到“配置”>“Bastion/RDP”。
- 验证“虚拟网络”是否已连接。
- 选择“允许远程桌面(通过 Bastion)”。
注意
不要只通过 RDP 来应用手动安装程序或配置更改。 回收或创建配置偏移时,更改将丢失。
常见问题 (FAQ)
- Azure 应用服务上的托管实例上运行的是什么操作系统 (OS)?
- 我可以启用更多 Windows 角色和功能吗?
- Azure 应用服务上的托管实例接收平台和应用程序堆栈定期更新吗?
- Azure 应用服务上的托管实例上安装了哪些编程语言?
- 配置(安装)脚本有什么限制?
- 在什么权限级别执行配置(安装)脚本?
- 操作员在使用 Bastion 连接实例时,拥有哪些角色权限?
- 如何使用我的配置(安装)脚本或注册表/存储适配器来排查出现的故障?
- Azure 应用服务上的托管实例辅助角色实例的可寻址内存是什么?
- 我应该使用哪一个 Azure 存储服务来上传配置(安装)脚本?
- 配置(安装)脚本的命名和格式是否存在限制?
- 可上传为 zip 文件的一部分的依赖项有大小限制吗?
- 在应用服务计划适配器上添加或删除托管实例是否会重启计划实例?
- 我的托管实例计划有多个实例,我可以只重启一个实例吗?
- 应用服务计划上的托管实例有多个 Web 应用程序,我可以只重启一个 Web 应用程序吗?
- 我可以在应用服务计划上的托管实例中将托管标识分配给 Web 应用程序吗?
- 我可以为应用服务计划上的托管实例创建的适配器存在数量限制吗?
Azure 应用服务上的托管实例上运行的是什么操作系统 (OS)?
Windows Server 2022。
我可以启用更多 Windows 角色和功能吗?
可以,通过配置脚本启用。 但是,即使从 Windows Server 的未来版本中移除的功能仍将在托管实例中可用。
Azure 应用服务上的托管实例接收平台和应用程序堆栈定期更新吗?
接收。实例接收例行的平台更新和维护。 预安装的应用程序堆栈也会定期更新。 你需要维护通过配置(安装)脚本安装的任何组件。
Azure 应用服务上的托管实例上安装了哪些编程语言?
Microsoft .NET Framework 3.5、4.8 以及 Microsoft .NET 8.0。 如果需要其他运行时,你可以使用配置脚本进行安装。 这些内容不会由平台维护,必须手动更新。
配置(安装)脚本有什么限制?
配置(安装)脚本可安装依赖项,启用角色和功能,以及自定义操作系统。 但是,破坏性作(例如删除 Windows\System32)不受支持,并且可能导致实例不稳定。
在什么权限级别执行配置(安装)脚本?
使用管理员权限执行配置(安装)脚本,以允许安装和配置系统级组件。
操作员在使用 Bastion 连接实例时,拥有哪些角色权限?
通过 Bastion 连接的操作员在会话期间具有管理员权限。
如何使用我的配置(安装)脚本或注册表/存储适配器来排查出现的故障?
若要执行故障排除,请查看配置(安装)脚本的日志。 可以在实例(而不是 Web 应用)的 C:\InstallScripts\Script\Install.log 中找到它们。 也可以将应用服务控制台日志发送给 Azure Monitor 和 Log Analytics。
可以在计算机的根目录中找到适配器日志,或者它们已记录在应用服务平台日志中。
Azure 应用服务上托管实例的辅助角色实例的可寻址内存是什么?
Azure 应用服务上托管实例的辅助角色实例的可寻址内存因所选定价计划而异。 下表列出了 Azure 应用服务上托管实例的辅助角色实例的可寻址内存。 请务必考虑你是否有一个配置脚本,用于安装更多组件、服务等。这些资源会影响 Web 应用可使用的内存量。
| 定价计划 | 核心数 | 内存 (MB) |
|---|---|---|
| P0v4 | 1 | 2048 |
| P1v4 | 2 | 5952 |
| P2v4 | 4 | 13440 |
| P3v4 | 8 | 28672 |
| P1Mv4 | 2 | 13440 |
| P2Mv4 | 4 | 28672 |
| P3Mv4 | 8 | 60160 |
| P4Mv4 | 16 | 121088 |
| P5Mv4 | 32 | 246016 |
我应该使用哪一个 Azure 存储服务来上传配置(安装)脚本?
使用 Azure 存储 Blob 服务来上传脚本和需要的依赖项。
配置(安装)脚本的命名和格式是否存在限制?
是,脚本必须命名为 Install.ps1。 仅支持 PowerShell。 确保将配置(安装)脚本和依赖项作为一个 .zip 文件上传。
上传为 zip 文件一部分的依赖项有大小限制吗?
不强制实施大小限制。 请记住,依赖项的总大小会影响实例预配时间。
在应用服务计划适配器上添加或删除托管实例是否会重启计划实例?
是,添加或编辑托管实例计划适配器(配置脚本/存储/注册表)会重启基础实例,并影响计划中部署的所有 Web 应用。 请记住,实例重启会删除通过 RDP 会话执行的所有更改。 始终使用配置(安装)脚本来保留依赖项安装或需要的其他配置更改。
我的托管实例计划有多个实例,我可以只重启一个实例吗?
可以,浏览到托管实例,在左侧菜单中选择“实例”。 然后选择实例名称旁的“重启”。
应用服务计划上的托管实例有多个 Web 应用程序,我可以只重启一个 Web 应用程序吗?
可以,浏览到应用的“概述”页面,然后选择“重启”。
我可以在应用服务计划上的托管实例中将托管标识分配给 Web 应用程序吗?
是的,你可以向托管实例中的 Web 应用程序分配不同的托管标识。 请遵循托管标识指南
我可以为应用服务计划上的托管实例创建的适配器存在数量限制吗?
没有,存储或注册表适配器无数量限制。 你只能为应用服务计划上的托管实例创建一个配置(安装)脚本适配器。 适配器数量的增加可能会影响托管实例的预配时间。