当你将虚拟机 (VM) 映像发布到 Azure 市场时,Azure 团队会对映像进行验证,以确保它可启动、与 Azure 兼容并且是安全的。 如果 VM 映像未通过任何高质量测试,则不会发布该映像。 你将收到一条说明此问题的错误消息。
本文介绍 VM 映像发布过程中的常见错误消息,以及相关解决方案。
注意
如果你对本文有疑问或想提出改进建议,请联系合作伙伴中心支持。
VM 扩展失败
查看映像是否支持 VM 扩展。
启用 VM 扩展:
选择 Linux VM。
转到“诊断设置”。
通过更新“存储帐户”启用基础映像矩阵。
选择“保存”。
验证 VM 扩展是否已正确激活:
在 VM 中,选择“VM 扩展”选项卡,然后验证“Linux 诊断扩展”的状态 。
检查预配状态。
- 如果状态为“预配成功”,说明已通过扩展测试用例。
- 如果状态为“预配失败”,说明扩展测试用例失败,需要设置强化标志。
如果 VM 扩展失败,请参阅使用 Linux 诊断扩展监视指标和日志以启用该扩展。 如果不希望启用 VM 扩展,请联系支持团队,要求其禁用该扩展。
VM 预配问题
在提交产品/服务之前,请检查并确保已严格遵循 VM 预配流程。 若要查看用于预配 VM 的 JSON 格式,请参阅测试虚拟机映像。
预配问题可能包括以下故障场景:
方案 | 错误 | Reason | 解决方案 |
---|---|---|---|
1 | 虚拟硬盘 (VHD) 无效 | 如果 VHD 页脚中指定的 cookie 值不正确,VHD 将被视为无效。 | 重新创建映像并提交请求。 |
2 | Blob 类型无效 | VM 预配失败,原因是使用的 blob 是块类型而不是页类型。 | 将映像重新创建为页类型并提交请求。 |
3 | 预配超时或未正确泛化 | VM 泛化出现问题。 | 重新创建泛化映像并提交请求。 |
注意
如果预配因 VM 映像需要自定义 ARM 模板进行部署而失败,请勾选合作伙伴中心的“技术配置”页中的“需要自定义 ARM 模板进行部署”复选框。 这样,认证团队就可以针对此请求采取适当的措施,而不会让它因预配问题而无法通过认证。
VHD 规范
Conectix cookie 和其他 VHD 规范
“conectix”字符串是 VHD 规范的一部分。 它在 VHD 页脚中定义为 8 字节 cookie,用于标识文件创建器。 Azure 创建的所有 VHD 文件都有此 Cookie。
VHD 格式的 Blob 应具有以下格式的 512 字节页脚:
硬盘页脚字段 | 大小(字节) |
---|---|
Cookie | 8 |
功能 | 4 |
文件格式版本 | 4 |
数据偏移 | 8 |
时间戳 | 4 |
创建器应用程序 | 4 |
创建器版本 | 4 |
创建器主机操作系统 | 4 |
原始大小 | 8 |
当前大小 | 8 |
磁盘几何 | 4 |
磁盘类型 | 4 |
校验和 | 4 |
唯一 ID | 16 |
保存状态 | 1 |
保留 | 427 |
VHD 规范
若要确保发布体验流畅,请确保 VHD 满足以下条件:
- Cookie 包含字符串“conectix”。
- 磁盘类型是固定的。
- VHD 的虚拟大小至少为 20 MB。
- VHD 已对齐。 虚拟大小必须是 1 MB 的倍数。
- VHD Blob 长度等于虚拟大小加上 VHD 页脚长度 (512)。
下载 VHD 规范。
Windows 的软件合规性
如果 Windows 映像请求因软件合规性问题而被拒绝,说明你可能使用了安装的 SQL Server 实例创建了 Windows 映像。 但你需要从 Azure 市场获取相关的 SQL Server 版本基础映像。
请勿使用其上安装的 SQL Server 创建自己的 Windows 映像。 应使用 Azure 市场中已批准的 SQL Server 基础映像(企业/标准/Web)。
如果你正在尝试安装 Visual Studio 或任何 Office 许可的产品,请联系支持团队以获得预先批准。
有关选择批准的基础映像的详细信息,请参阅通过批准的基础映像创建虚拟机。
工具包测试用例执行失败
Microsoft 认证工具包可帮助运行测试用例,并验证 VHD 或映像是否与 Azure 环境兼容。
下载 Microsoft 认证工具包。
Linux 测试用例
下表列出了工具包将运行的 Linux 测试用例。 描述中说明了测试验证。
方案 | 测试用例 | 描述 |
---|---|---|
1 | Bash 历史记录 | 应在创建 VM 映像之前清除 Bash 历史记录文件。 |
2 | Linux 代理版本 | 必须安装最低受支持版本的 Azure Linux 代理或更高版本。 |
3 | 必需的内核参数 | 验证是否已设置以下内核参数: console=ttyS0 earlyprintk=ttyS0 |
4 | OS 磁盘上的交换分区 | 验证是否未在 OS 磁盘上创建交换分区。 |
5 | OS 磁盘上的根分区 | 为 OS 磁盘创建一个根分区。 |
6 | OpenSSL 版本 | OpenSSL 版本应为 v0.9.8 或更高版本。 |
7 | Python 版本 | 强烈建议使用 Python 2.6 或更高版本。 |
8 | 客户端活动间隔 | 将 ClientAliveInterval 设置为 180。 可设置为 30 至 235,具体取决于应用程序需要。 如果要为最终用户启用 SSH,必须按照说明设置此值。 |
9 | 操作系统体系结构 | 仅支持 64 位操作系统。 |
10 | 自动更新 | 确定是否已启用 Linux 代理自动更新。 |
常见的测试用例错误
有关运行测试用例时可能会看到的常见错误,请参阅下表:
方案 | 测试用例 | 错误 | 解决方案 |
---|---|---|---|
1 | Linux 代理版本测试用例 | 必须安装最低受支持版本的 Azure Linux 代理或更高版本。](https://learn.microsoft.com/troubleshoot/azure/virtual-machines/support-extensions-agent-version) | 更新 Linux 代理版本。 有关详细信息,请访问 Linux 代理版本更新页。 |
2 | Bash 历史记录测试用例 | 如果提交的映像中的 Bash 历史记录大小超过 1 KB,则会发生错误。 大小限制为 1 KB,以确保 Bash 历史记录文件不包含任何可能敏感的信息。 | 解决方法是将 VHD 装载到另一台工作 VM,并进行更改以将大小减小到 1 KB 或更少。 例如,删除 .bash_history 文件。 |
3 | 必需的内核参数测试用例 | 当 console 的值未设置为 ttyS0 时,会收到此错误。 运行以下命令进行检查:cat /proc/cmdline |
将 console 的值设置为 ttyS0 ,然后重新提交请求。 |
4 | ClientAlive 间隔测试用例 | 如果工具包指示此测试用例结果失败,则说明 ClientAliveInterval 的值不恰当。 |
将 ClientAliveInterval 的值设置为小于或等于 235,然后重新提交请求。 |
5 | smoke_test | 当映像由于内核崩溃而无法启动或重启时,你将收到错误。 可以从“错误说明”中获取内核崩溃的一些调用跟踪信息。 如果你要查看整个调用跟踪和串行日志,可以使用映像在 Azure 中部署一个 VM,并在 Azure 门户中检查 VM 资源的“串行控制台”。 | 在 Azure 中创建 VM 时,可以从 Azure 门户下载串行控制台日志(有关串行控制台的更多详细信息,请参阅 https://learn.microsoft.com/troubleshoot/azure/virtual-machines/serial-console-linux) |
6 | verify_dns_name_resolution | 此测试用例通过执行 ping bing.com -c 5 -i 0.5 -O 命令检查 DNS 名称解析。 如果无法 ping 通公共 Web 地址“bing.com”,则会发生错误。 | 请参考 https://docs.azure.cn/virtual-machines/linux/azure-dns 添加正确的设置 |
7 | verify_no_pre_exist_users | 检测到某些用户的密码或检测到某些用户的密钥时,你将收到错误“检测到用户 XXXX 的密码” | 检查 /etc/shadow 文件是否包含某个用户的密码,如果是,则需要删除该密码,并按照错误消息中的说明删除“{用户主目录}/.ssh/authorized_keys”文件 |
8 | validate_netvsc_reload | 如果在运行以下命令后 无法连接 VM,你将收到错误 “失败。SSHException: SSH 会话不处于活动状态。” 如果运行以下命令后在 VM 中发现内核崩溃, 你将收到错误“在 xx 节点中发现内核崩溃”:“modprobe -r hv_netvsc; modprobe hv_netvsc;ip link set eth0 down; ip link set eth0 up;dhclient -r eth0; dhclient eth0” | 检查串行控制台,查看在运行上述命令期间是否发生了任何错误。 可以访问 https://learn.microsoft.com/windows-hardware/drivers/network/sr-iov-synthetic-data-path 以了解有关网络虚拟服务客户端 (NetVSC) 的更多详细信息。 |
Windows 测试用例
下表列出了工具包将运行的 Windows 测试用例,以及测试验证的描述:
方案 | 测试事例 | 描述 |
---|---|---|
1 | 操作系统体系结构 | Azure 仅支持 64 位操作系统。 |
2 | 用户帐户依赖项 | 应用程序的执行不应依赖于管理员帐户。 |
3 | 故障转移群集 | 目前不支持 Windows Server 故障转移群集功能。 应用程序不应依赖于此功能。 |
4 | IPV6 | Azure 环境目前不支持 IPv6。 应用程序不应依赖于此功能。 |
5 | DHCP | 目前不支持动态主机配置协议服务器角色。 应用程序不应依赖于此功能。 |
6 | 远程访问 | 目前不支持远程访问(直接访问)服务器角色。 应用程序不应依赖于此功能。 |
7 | 权限管理服务 | 权限管理服务。 目前不支持该服务器角色。 应用程序不应依赖于此功能。 |
8 | Windows 部署服务 | Windows 部署服务。 目前不支持该服务器角色。 应用程序不应依赖于此功能。 |
9 | BitLocker 驱动器加密 | BitLocker 驱动器加密在操作系统硬盘上不受支持,但它可在数据磁盘上使用。 |
10 | Internet 存储名称服务器 | 目前不支持 Internet 存储名称服务器功能。 应用程序不应依赖于此功能。 |
11 | 多路径 I/O | 多路径 I/O。 此服务器功能目前不受支持。 应用程序不应依赖于此功能。 |
12 | Network Load Balancing | 网络负载均衡。 目前不支持此服务器功能。 应用程序不应依赖于此功能。 |
13 | 对等名称解析协议 | 对等名称解析协议。 目前不支持此服务器功能。 应用程序不应依赖于此功能。 |
14 | SNMP 服务 | 目前上不支持简单网络管理协议 (SNMP) 服务功能。 应用程序不应依赖于此功能。 |
15 | Windows Internet 名称服务 | Windows Internet 名称服务。 目前不支持此服务器功能。 应用程序不应依赖于此功能。 |
16 | 无线 LAN 服务 | 无线 LAN 服务。 目前不支持此服务器功能。 应用程序不应依赖于此功能。 |
如果前面有测试用例失败,请参阅表中的“描述”列,获取该解决方案。 有关详细信息,请联系支持团队。
数据磁盘大小验证
大于 1023 GB 的数据磁盘请求不会获得批准。 本规则同时适用于 Linux 和 Windows。
重新提交小于或等于 1023 GB 的请求。
OS 磁盘大小验证
有关 OS 磁盘大小的限制,请参阅以下规则。 提交任何请求时,验证 OS 磁盘大小是否在 Linux 或 Windows 的限制范围内。
OS | 建议的 VHD 大小 |
---|---|
Linux | 1 GB 到 1023 GB |
Windows | 30 GB 到 250 GB |
因为 VM 允许访问基础操作系统,所以请确保 VHD 大小对于该 VHD 而言足够大。 如果不停机,磁盘无法进行扩展。 使用 30 GB 到 50 GB 的磁盘大小。
VHD 大小 | 实际占用的大小 | 解决方案 |
---|---|---|
>500 tebibytes (TiB) | 不适用 | 请联系支持团队以获取例外批准。 |
250-500 TiB | 与 Blob 大小的差异 >200 gibibytes (GiB) | 请联系支持团队以获取例外批准。 |
注意
磁盘越大,成本就越高,并且大型数据磁盘会导致在设置和复制过程中出现延迟。 由于这种延迟和成本,支持团队可能会要求提供例外批准的理由。
Windows 的 WannaCry 修补程序验证测试
若要防范与 WannaCry 病毒相关的潜在攻击,请确保使用最新的修补程序更新所有 Windows 映像请求。
可从 C:\windows\system32\drivers\srv.sys
或 srv2.sys
验证映像文件版本。
下表显示了 Windows Server 的最低修补版本:
(OS) | Version |
---|---|
Windows Server 2008 R2 | 6.1.7601.23689 |
Windows Server 2012 | 6.2.9200.22099 |
Windows Server 2012 R2 | 6.3.9600.18604 |
Windows Server 2016 | 10.0.14393.953 |
Windows Server 2019 | NA |
注意
Windows Server 2019 没有任何强制性版本要求。
SACK 漏洞修补程序验证
提交 Linux 映像时,你的请求可能会因为内核版本问题而被拒绝。
将内核更新为已批准的版本,然后重新提交请求。 可在下表中查找已批准的内核版本。 版本号应等于或大于此处列出的编号。
如果你的映像没有安装以下任一内核版本,请使用正确的修补程序更新它。 在用以下必需的修补程序更新映像后,请向支持团队请求所需批准:
- CVE-2019-11477
- CVE-2019-11478
- CVE-2019-11479
OS 系列 | 版本 | 内核 |
---|---|---|
Ubuntu | 14.04 LTS | 4.4.0-151 |
14.04 LTS | 4.15.0-1049-*-azure | |
16.04 LTS | 4.15.0-1049 | |
18.04 LTS | 4.18.0-1023 | |
18.04 LTS | 5.0.0-1025 | |
18.10 | 4.18.0-1023 | |
19.04 | 5.0.0-1010 | |
19.04 | 5.3.0-1004 | |
RHEL 和 Cent OS | 6.10 | 2.6.32-754.15.3 |
7.2 | 3.10.0-327.79.2 | |
7.3 | 3.10.0-514.66.2 | |
7.4 | 3.10.0-693.50.3 | |
7.5 | 3.10.0-862.34.2 | |
7.6 | 3.10.0-957.21.3 | |
7.7 | 3.10.0-1062.1.1 | |
8.0 | 4.18.0-80.4.2 | |
8.1 | 4.18.0-147 | |
“7-RAW”(7.6) | ||
“7-LVM”(7.6) | 3.10.0-957.21.3 | |
RHEL-SAP 7.4 | TBD | |
RHEL-SAP 7.5 | TBD | |
SLES | SLES11SP4(包括 SAP) | 3.0.101-108.95.2 |
适用于 SAP 的 SLES12SP1 | 3.12.74-60.64.115.1 | |
适用于 SAP 的 SLES12SP2 | 4.4.121-92.114.1 | |
SLES12SP3 | 4.4180-4.31.1 (kernel-azure) | |
适用于 SAP 的 SLES12SP3 | 4.4.180-94.97.1 | |
SLES12SP4 | 4.12.14-6.15.2 (kernel-azure) | |
适用于 SAP 的 SLES12SP4 | 4.12.14-95.19.1 | |
SLES15 | 4.12.14-5.30.1 (kernel-azure) | |
适用于 SAP 的 SLES15 | 4.12.14-5.30.1 (kernel-azure) | |
SLES15SP1 | 4.12.14-5.30.1 (kernel-azure) | |
Oracle | 6.10 | UEK2 2.6.39-400.312.2 UEK3 3.8.13-118.35.2 RHCK 2.6.32-754.15.3 |
7.0-7.5 | UEK3 3.8.13-118.35.2 UEK4 4.1.12-124.28.3 RHCK 遵循上述 RHEL |
|
7.6 | RHCK 3.10.0-957.21.3 UEK5 4.14.35-1902.2.0 |
|
CoreOS Stable 2079.6.0 | 4.19.43* | |
Beta 2135.3.1 | 4.19.50* | |
Alpha 2163.2.1 | 4.19.50* | |
Debian | jessie(安全性) | 3.16.68-2 |
jessie 向后移植 | 4.9.168-1+deb9u3 | |
stretch(安全性) | 4.9.168-1+deb9u3 | |
Debian GNU/Linux 10 (buster) | Debian 6.3.0-18+deb9u1 | |
buster、sid(延伸向后移植) | 4.19.37-5 |
映像大小应为兆字节的倍数
Azure 上的所有 VHD 必须已将虚拟大小调整为 1 MB 的倍数。 如果 VHD 不符合建议的虚拟大小,你的请求可能会被拒绝。
将原始磁盘转换为 VHD 时,请遵循指导原则。 确保原始磁盘大小为 1 MB 的倍数。 有关详细信息,请参阅有关未认可分发版的信息。
VM 访问被拒绝
在 VM 上运行测试用例时出现的访问被拒绝问题可能是由于权限不足引起的。
检查是否已为运行自测试用例的帐户启用了正确的访问权限。 如果未启用,请启用运行测试用例所需的访问权限。 如果不希望启用访问权限,可以将自测试用例结果分享给支持团队。
通过禁用 SSH 的映像来提交请求以进行认证:
在映像上运行适用于 Azure VM 的最新认证测试工具。
提交一个支持票证。 确保附加了工具包报告并提供产品/服务详细信息:
- 产品名称
- 发布者名称
- 规划 ID/SKU 和版本
重新提交认证请求。
注意
如果要发布已禁用或限制 ssh 的锁定 VM 映像,请勾选合作伙伴中心的“技术配置”页中的“远程桌面或 SSH 已禁用”复选框。 这样就会告知认证团队这是设计使然,该团队就会对映像进行正确的验证,而不会因为访问受限问题而让其无法通过认证。
下载失败
使用共享访问签名 (SAS) URL 下载 VM 映像时如果出现问题,可参考下表。
错误 | Reason | 解决方案 |
---|---|---|
找不到 Blob | VHD 可能已被删除或已从指定位置移走。 | |
Blob 正在使用中 | VHD 被另一个内部进程使用。 发布过程中会修改 VHD 的源 Blob 存储。 | 使用 SAS URL 下载 VHD 时,VHD 不应处于已使用状态。 此外,在发布正在进行时,请不要使用/更改 VHD。 |
SAS URL 无效 | VHD 关联的 SAS URL 不正确。 | 获取正确的 SAS URL。 |
签名无效 | VHD 关联的 SAS URL 不正确。 | 获取正确的 SAS URL。 |
HTTP 条件性标头 | SAS URL 无效。 | 获取正确的 SAS URL。 |
VHD 名称无效 | 检查 VHD 名称中是否存在任何特殊字符,如百分号 % 或引号 " 。 |
通过删除特殊字符来重命名 VHD 文件。 |
VM 映像必须具有 1 MB 可用空间
如果要将映像发布到 Azure(使用 GPT 分区),我们强烈建议将操作系统磁盘的前 2,048 个扇区 (1 MB) 保留为空。 该要求使 Azure 能够将重要元数据添加到映像(示例中包含的元数据可以缩短客户的启动时间,改善计费和其他细节)。 请注意,如果已在使用批准的基础映像,并且映像具有有效的计费标记,则建议使用此方法。 但是,如果映像没有有效的计费标记,则如果操作系统磁盘的前 1 MB 不为空,发布可能会失败。
如果要构建自己的映像,且该映像不包含任何有效的计费标记,请确保操作系统磁盘的前 2,048 个扇区 (1 MB) 为空。 否则,你的发布将失败。 此要求仅适用于 OS 磁盘(而非数据磁盘)。 如果要从批准的基础映像来构建映像,该映像的前 1 MB 将为空。 因此,无需单独处理。
若要在操作系统磁盘中保留前 1 MB 的可用空间,请完成下一部分中的步骤。
如何在空的 VHD 上保留前 1 MB 的可用空间(2,048 个扇区,每个扇区 512 个字节)
这些步骤仅适用于 Linux。
创建任意类型的 Linux VM,如 Ubuntu、CentOS 等。 填写必填字段,然后选择“下一步: 磁盘“。
为 VM 创建非托管磁盘。 使用默认值,或者为“操作系统磁盘大小”、“操作系统磁盘类型”和“加密类型”等字段指定任意值。
创建 VM 后,在左窗格中选择“磁盘”。
将 VHD 作为数据磁盘附加到 VM 以创建分区表。
选择“附加现有磁盘”:
查找你的 VHD 存储帐户。
选择“容器”,然后选择 VHD。
选择“确定”。
VHD 将添加为数据磁盘 LUN 0。
重启 VM。
重启 VM 后,使用 Putty 或其他客户端登录到 VM,并运行
sudo -i
命令以获取根访问权限。在 VHD 上创建分区。
输入
fdisk /dev/sdb
命令。若要从 VHD 查看现有分区列表,请输入
p
。输入
d
以删除 VHD 中所有可用的现有分区。 如果不需要,可以跳过此步骤。输入
n
以创建新分区,并选择p
作为主分区。输入 2048 作为第一个扇区值。 可保留最后一个扇区作为默认值。
重要
2048 个扇区之前的扇区中的所有现有数据都将被擦除(每个扇区 512 个字节)。 创建新分区之前请先备份 VHD。
键入
w
以确认创建分区。可通过运行命令
n fdisk /dev/sdb
并键入p
来验证分区表。 你将看到创建的分区的偏移值为 2048。
从 VM 中分离 VHD 并删除 VM。
默认凭据
切勿将默认凭据与已提交的 VHD 一起发送。 添加默认凭据会使 VHD 更容易受到安全威胁的攻击。 请改为在提交 VHD 时创建自己的凭据。
DataDisk 映射不正确
当提交的请求包含多个未按顺序排列的数据磁盘时,可能会出现映射问题。 例如,三个数据磁盘的编号顺序必须是 0、1、2。 任何其他顺序都被视为映射问题。
使用正确的数据磁盘顺序重新提交请求。
OS 映射不正确
创建映像时,它可能被映射到或被分配了错误的 OS 标签。 例如,在创建映像时,如果选择 Windows 作为 OS 名称的一部分,那么 OS 磁盘在安装时应仅附带 Windows。 这一要求也适用于 Linux。
VM 未泛化
如果要重复使用从 Azure 市场获取的所有映像,则必须泛化操作系统 VHD。
对于 Linux,以下过程将泛化 Linux VM,并将其重新部署为单独的 VM。
在 SSH 窗口中,输入以下命令:
sudo waagent -deprovision+user
。对于 Windows,通过使用 来泛化 Windows 映像。
有关
sysreptool
工具的详细信息,请参阅sysreptool
。
DataDisk 错误
有关与数据磁盘相关的错误的解决方案,请使用下表:
错误 | Reason | 解决方案 |
---|---|---|
DataDisk- InvalidUrl: |
此错误可能是由于提交产品/服务时逻辑单元号 (LUN) 无效所导致的。 | 验证合作伙伴中心是否存在数据磁盘的该 LUN 编号序列。 |
DataDisk- NotFound: |
出现此错误的原因可能是数据磁盘未位于指定的 SAS URL。 | 验证数据磁盘是否位于指定的 SAS URL。 |
远程访问问题
如果没有为 Windows 映像启用远程桌面协议 (RDP) 选项,则会出现此错误。
提交 Windows 映像之前为其启用 RDP 访问。
Bash 历史记录失败
如果提交的映像中的 Bash 历史记录大小超过 1 KB,则会出现此错误。 大小限制为 1 KB,以限制文件包含敏感信息的可能性。
删除 Bash 历史记录:
部署 VM,并选择 Azure 门户上的“运行命令”选项。
选择第一个选项 RunShellScript,然后运行以下命令:。
成功运行该命令后,重启 VM。
泛化 VM,获取映像 VHD,然后停止 VM。
重新提交泛化映像。
网络虚拟设备验证
在市场映像认证期间,作为网络虚拟设备 (NVA) 的 VM 产品/服务使用适用于任何 VM 产品/服务的通用测试,以及下表中列出的 NVA 测试用例进行验证。 这些特定于 NVA 的验证的目标是验证 NVA 映像与 SDN 堆栈的协调情况。
测试用例 | 运行测试用例的步骤 | 解决方案 |
---|---|---|
VHD 访问 | 确保提供了 VHD 的正确 SAS URL,将权限设置为“允许访问”,并且 NVA 映像已通用化。 | 验证 NVA 映像和提供的 URL。 |
NVA 部署 | 使用具有 1 个 NIC 的 NVA 部署 VM。 验证部署是否在 20 分钟内完成。 | 如果部署未在 20 分钟内完成,则验证 NVA 映像。 |
NVA 重启 | 使用具有 1 个 NIC 的 NVA 部署 VM。 然后,在 Azure 门户中转到该 VM,在左侧窗格中的“支持 + 故障排除”部分下,单击“重新部署 + 重新应用”,重新部署 VM。 重新部署完成后,验证 VM 的状态是否为“正在运行”,使用 Netcat 命令验证是否可访问 NIC 端口 22。 | 如果重启后 VM 未启动,可能是 NVA 映像存在问题。 如果 Netcat 测试失败,可能是因为在重启后,即使 VM 正在运行,NIC 仍无法启动。 等待几分钟,稍后重试。 如果 20 分钟后仍然失败,可能是 NVA 映像存在问题 |
NVA 重新部署 | 使用具有 1 个 NIC 的 NVA 部署 VM。 然后,重新部署 VM。 验证 VM 的状态是否为“正在运行”,使用 Netcat 命令验证是否可访问 NIC 端口 22。 | 如果重新部署未在 15 分钟内完成,可能是 NVA 映像存在问题。 如果 Netcat 测试失败,可能是因为在重启后,即使 VM 正在运行,NIC 仍无法启动。 等待几分钟,稍后重试。 如果 20 分钟后仍然失败,可能是 NVA 映像存在问题 |
高可用性 | 使用具有 1 个 NIC 的 NVA 部署 VM。 不应将公共 IP 附加到 NIC,或者如果附加了公共 IP,则 SKU 应该是标准的,并且 IP 分配方法应该是静态的。 在同一虚拟网络中,使用下面的配置设置一个 Azure 内部负载均衡器。 - 使用标准 SKU 的负载均衡器 - 使用动态的专用 IP 分配方法的前端 IP - 使用 TCP 的运行状况探测,重试间隔为 15 秒的端口 22 - 使用协议“全部”并且“启用浮动 IP”设置为“False”的负载均衡规则。 - 指向 NVA VM 的后端池。 设置完成后,使用 Netcat 命令验证 NVA VM 是否可通过负载均衡器访问。 |
如果无法通过负载均衡器访问 NVA,请验证 VM、负载均衡器和 HA 端口功能的设置。 如果所有设置都正确无误,可能是 NVA 映像存在问题。 |
VNET 对等互连 | 使用 NVA 映像部署虚拟机 VM1,在虚拟网络 VNET1 中使用 1 个 NIC。 在另一个虚拟网络 VNET2 中,使用任何 Linux 映像(例如 ubuntu)来部署虚拟机 VM2,使它具有 1个 NIC,VM 设置为“动态 IP 分配方法”和基本 SKU。 在 VNET1 与 VNET2 之间创建 VNET 对等互连,并将“到远程虚拟网络的流量”配置为“允许”(默认值) 设置完成后,使用 Netcat 命令验证是否可从 VM2 访问 NVA VM1 上的 NIC 的专用 IP。 |
如果无法从 VM2 访问 NVA VM1,请验证 VNET 对等互连是否已正确配置,然后重试。 如果仍不起作用,则 NVA 映像可能存在问题。 |
加速网络 (AN) | 使用 NVA 和 1 个启用了 AN 的 NIC来部署 VM。 可以在创建 VM 时在 NIC 上启用 AN,也可以在创建 VM 后在 NIC 属性上启用。 验证 VM 是否已启动并正在运行。 | 如果部署失败,请验证 NVA 映像是否支持加速网络。 |
多 NIC 基本 | 使用具有 3 个 NIC 的 NVA,通过动态 IP 分配方法和基本 SKU 部署 VM。 获取所有 NIC 的专用 IP 和 MAC 地址(有关说明,请参阅查看网络接口)。 然后,重新部署 VM,并验证所有 NIC 的专用 IP 和 MAC 地址在重新部署之前是否保持不变。 | 如果重新部署后所有 NIC 的专用 IP 和 MAC 地址发生更改,则 NVA 映像可能存在问题。 |
网络中断 | 使用具有 1 个 NIC 的 NVA 部署 VM。 然后,创建并应用网络安全组 (NSG),以阻止到 NVA VM 的所有流量。 然后,验证 VM 的状态是否为“正在运行”。 | 如果在应用 NSG 后 VM 关闭,则 NVA 映像可能存在问题。 |
有关详细信息或问题,请提交 Azure 支持案例。
Netcat 概述:
Netcat 是一个命令,它能够在两台计算机之间建立 TCP 或 UDP 连接,这意味着它可以通过打开的端口进行写入和读取。 在 NVA 验证过程中,我们从与 NVA VM 位于同一虚拟网络中的 VM 执行 Netcat 命令,以测试是否可以访问 TCP 端口 22。 命令语法为 nc <destination_ip_address> <destination_port>
,其中
- destination_ip_address 是分配给 VM NIC 的专用 IP 地址,
- destination_port 是 NVA 上的端口号。 我们在 NVA 测试用例中使用了 22。
例如: nc 192.168.1.1 22
针对所选测试请求 VM 映像例外
发布者可以为 VM 认证期间执行的几个测试请求例外。 在发布者提供了证据来支持请求的情况下,一般很少会允许例外。 认证团队保留随时拒绝或批准例外的权利。
本节介绍发布者请求例外的一般情况以及请求例外的方式。
例外情况
发布者通常在下列情况下请求例外:
一个或多个测试用例的例外。 联系合作伙伴中心支持以请求测试用例的例外。
锁定的 VM/无根访问权限。 有少数发布者存在这样的情况:由于其 VM 上安装了防火墙之类的软件,因此需要锁定 VM。 对于这种情况,请下载已认证的测试工具,并在合作伙伴中心支持处提交报告。
自定义模板。 某些发布者发布的 VM 映像需要自定义 Azure 资源管理器 (ARM) 模板来部署 VM。 对于这种情况,请在合作伙伴中心支持处提交自定义模板,以便认证团队可以使用该模板进行验证。
要提供的例外情况信息
联系合作伙伴中心支持,为其中某种情况请求例外,并提供以下信息:
发布者 ID。 键入合作伙伴中心门户发布者 ID。
产品/服务 ID/名称。 输入产品/服务 ID 或名称。
SKU/计划 ID。 键入 VM 产品/服务计划 ID 或 SKU。
版本。 输入需要例外的 VM 产品/服务版本。
异常类型。 从测试、锁定的 VM 或自定义模板中选择。
请求原因。 包含请求例外的原因,以及有关免除测试的任何信息。
时间线。 输入所需例外的结束日期。
附件。 附加重要证据文档:
- 对于锁定的 VM,请附加测试报告。
- 对于自定义模板,请提供自定义 ARM 模板作为附件。
如果未包含这些附件,请求将被拒绝。
解决 VM 产品/服务中的漏洞或攻击
本节介绍在某个 VM 映像中发现漏洞或攻击时如何提供新的 VM 映像。 这仅适用于发布到 Azure 市场的 Azure VM 产品/服务。
注意
不能从计划中删除最后一个 VM 映像,也不能停止销售产品/服务的最后一个计划。
执行下列操作之一:
- 如果有新的 VM 映像并用来替换易受攻击的 VM 映像,请参阅提供固定的 VM 映像。
- 如果没有新的 VM 映像来替换计划中唯一的 VM 映像,或者已完成该计划,请停止分发计划。
- 如果不打算替换该产品/服务中的唯一 VM 映像,建议停止分发该产品/服务。
提供固定的 VM 映像
若要提供固定的 VM 映像来替换有漏洞或易受攻击的 VM 映像,请执行以下操作:
- 提供新的 VM 映像来解决安全漏洞或攻击。
- 删除具有安全漏洞或易受攻击的 VM 映像。
- 重新发布产品/服务。
提供新的 VM 映像来解决安全漏洞或攻击
若要完成这些步骤,请为要添加的 VM 映像准备技术资产。 有关详细信息,请参阅使用已批准的基础映像创建虚拟机或使用自己的映像创建虚拟机,以及为 VM 映像生成 SAS URI。
登录合作伙伴中心。
在“主页”上,选择“市场产品/服务”磁贴。
在“产品/服务别名”列中,选择产品/服务。
选择“计划概览”选项卡,然后选择适当的计划。
在“技术配置”选项卡的“VM 映像”下,选择“+ 添加 VM 映像” 。
注意
一次只能向一个计划添加一个 VM 映像。 若要添加多个 VM 映像,请先发布第一个 VM 映像,然后再添加下一个 VM 映像。
在出现的框中,提供新的磁盘版本和虚拟机映像。
选择“保存草稿”。
接下来,删除具有安全漏洞的 VM 映像。
删除具有安全漏洞或易受攻击的 VM 映像
- 登录合作伙伴中心。
- 在“主页”上,选择“市场产品/服务”磁贴。
- 在“产品/服务别名”列中,选择产品/服务。
- 选择“计划概览”选项卡,然后选择适当的计划。
- 在“技术配置”选项卡的“VM 映像”下,在要删除的 VM 映像旁边选择“删除 VM 映像” 。
- 在对话框中,选择“继续”。
- 选择“保存草稿”。
接下来,重新发布产品/服务。
重新发布产品/服务
- 选择“查看和发布”。
- 如果需要向认证团队提供任何信息,请将信息添加到“认证说明”框中。
- 选择“发布”。
若要完成发布过程,请参阅查看和发布产品/服务。
具有有限访问权限或需要自定义模板的 VM 映像
锁定的(或)禁用了 SSH 的产品/服务
在禁用 SSH(对于 Linux)或禁用 RDP(对于 Windows)的情况下发布的映像将被视为锁定的 VM。 有一些特殊的业务方案,出于其特殊性,发布者不向任何用户/只向少数用户提供有限的访问权限。
在验证检查期间,锁定的 VM 可能不允许执行某些认证命令。
自定义模板
通常,在单个 VM 产品/服务下发布的所有映像都将遵循标准 ARM 模板进行部署。 但在某些情况下,发布者在部署 VM 时可能需要进行自定义(例如配置多个 NIC)。
根据以下方案(非详尽),发布者将使用自定义模板部署 VM:
- VM 需要额外的网络子网。
- ARM 模板中要插入其他元数据。
- 执行 ARM 模板前作为先决条件的命令。
VM 扩展
Azure 虚拟机 (VM) 扩展是小型应用程序,可在 Azure VM 上提供部署后配置和自动化任务。 例如,如果某个虚拟机需要安装软件、防病毒保护或运行脚本,便可以使用 VM 扩展。
Linux VM 扩展验证要求映像包含以下内容:
- 必须安装最低受支持版本的 Azure Linux 代理或更高版本。](https://learn.microsoft.com/troubleshoot/azure/virtual-machines/support-extensions-agent-version)
- 高于 2.6 的 Python 版本
有关详细信息,请访问 VM 扩展。
验证映像完整性
如果你正在创建映像并从该映像创建光盘以验证映像完整性,请注意,前 1MB 保留用于优化性能,最后 512 字节保留用于 VHD 脚注。 因此请在验证映像完整性时忽略这些字节。
后续步骤
- 配置 VM 产品/服务属性
- 如果你有疑问或想提供改进反馈,请联系合作伙伴中心支持