将虚拟机(VM)映像发布到 Azure 市场时,Azure 团队会对其进行验证,以确保它可启动、安全且与 Azure 兼容。 如果 VM 映像未通过任何高质量的测试,则不会发布它。 你会收到一条描述问题的错误消息。
本文介绍 VM 映像发布期间常见的错误消息以及相关解决方案。
注意
如果对本文有疑问或改进建议,请联系 合作伙伴中心支持。
VM 扩展失败
检查映像是否支持 VM 扩展。
若要启用 VM 扩展,请执行以下操作:
选择 Linux VM。
转到 诊断设置。
通过更新 存储帐户来启用基矩阵。
选择 保存。
验证 VM 扩展是否已正确激活:
在 VM 中,选择 VM 扩展 选项卡,然后验证 Linux 诊断扩展的状态。
检查预配状态。
- 如果状态 预配成功,则通过扩展测试用例。
- 如果状态 预配失败,则扩展测试用例失败,并且需要设置强化标志。
显示预配成功的
如果 VM 扩展失败,请参阅 使用 Linux 诊断扩展监视指标和日志, 启用它。 如果不希望启用 VM 扩展,请联系支持团队,并要求他们禁用它。
VM 预配问题
检查以确保在提交产品/服务之前严格遵循 VM 预配过程。
预配问题可能包括以下失败方案:
错误 | 原因 | 溶液 |
---|---|---|
虚拟硬盘无效(VHD) | 如果 VHD 页脚中的指定 Cookie 值不正确,则 VHD 被视为无效。 | 重新创建映像并提交请求。 |
Blob 类型无效 | VM 预配失败,因为使用的 Blob 是块类型,而不是页类型。 | 重新创建图像作为页面类型并提交请求。 |
预配超时或未正确通用 | VM 通用化存在问题。 | 使用通用化重新创建映像并提交请求。 |
注意
如果配置失败,因为 VM 映像需要部署自定义 ARM 模板,请启用 要求自定义 ARM 模板进行部署 复选框,合作伙伴中心的技术配置 页。 它可帮助认证团队针对此请求采取适当的作,而不会使请求出现预配问题失败。
VHD 规范
Conectix Cookie 和其他 VHD 规范
“conectix”字符串是 VHD 规范的一部分,在标识文件创建者的 VHD 页脚中定义为 8 字节 Cookie。 Microsoft创建的所有 VHD 文件都具有此 Cookie。
VHD 格式化的 Blob 应采用以下格式的 512 字节页脚:
硬盘页脚字段 | 大小(字节) |
---|---|
饼干 | 8 |
特征 | 4 |
文件格式版本 | 4 |
数据偏移量 | 8 |
时间戳 | 4 |
Creator 应用程序 | 4 |
Creator 版本 | 4 |
Creator 主机 OS | 4 |
原始大小 | 8 |
当前大小 | 8 |
磁盘几何图形 | 4 |
磁盘类型 | 4 |
校验和 | 4 |
唯一 ID | 16 |
已保存状态 | 1 |
保留 | 427 |
VHD 规范
若要确保顺利发布体验,请确保 VHD 满足以下条件:
- Cookie 包含字符串“conectix”。
- 磁盘类型为 Fixed。
- VHD 的虚拟大小至少为 20 MB。
- VHD 对齐。 虚拟大小必须是 1 MB 的倍数。
- VHD Blob 长度等于虚拟大小加上 VHD 页脚长度(512)。
下载 VHD 规范。
适用于 Windows 的软件符合性
如果 Windows 映像请求因软件符合性问题而被拒绝,则可能是因为你创建了装有 SQL Server 实例的 Windows 映像。 相反,必须从 Azure 市场获取相关的 SQL Server 版本基础映像。
不要创建自己的 Windows 映像,其中安装了 SQL Server。 使用 Azure 市场中批准的 SQL Server 基础映像(Enterprise/Standard/web)。
如果尝试安装 Visual Studio 或任何 Office 许可的产品,请联系支持团队,获取事先批准。
有关选择已批准的基础的详细信息,请参阅 从已批准的基础创建虚拟机。
Linux 测试用例
下表列出了工具包运行的 Linux 测试用例。 测试验证在说明中声明。
测试用例 | 说明 |
---|---|
Bash 历史记录 | 创建 VM 映像之前,应清除 Bash 历史记录文件。 |
Linux 代理版本 | 必须安装 azure Linux 代理的最低支持版本或更高版本 。 |
所需的内核参数 | 验证是否已为x86_64设置以下内核参数:console=ttyS0 earlyprintk=ttyS0。 验证是否已为 Arm64 设置以下内核参数:console=ttyAMA0 earlyprintk=ttyAMA0。 |
在 OS 磁盘上交换分区 | 验证是否未在 OS 磁盘上创建交换分区。 |
OS 磁盘上的根分区 | 为 OS 磁盘创建单个根分区。 |
OpenSSL 版本 | OpenSSL 版本应为 v0.9.8 或更高版本。 |
Python 版本 | 强烈建议使用 Python 2.6 或更高版本。 |
客户端活动间隔 | 将 ClientAliveInterval 设置为 180。 在应用程序需要时,它可以从 30 设置为 235。 如果要为最终用户启用 SSH,则必须按说明设置此值。 |
OS 体系结构 | 仅支持 64 位操作系统。 |
自动更新 | 标识是否启用了 Linux 代理自动更新。 |
Windows 测试用例
下表列出了工具包运行的 Windows 测试用例以及测试验证的说明:
测试用例 | 说明 |
---|---|
OS 体系结构 | Azure 仅支持 64 位操作系统。 |
用户帐户依赖项 | 应用程序执行不应依赖于管理员帐户。 |
故障转移群集 | 尚不支持 Windows Server 故障转移群集功能。 应用程序不应依赖于此功能。 |
IPV6 | Azure 环境中尚不支持 IPv6。 应用程序不应依赖于此功能。 |
DHCP | 尚不支持动态主机配置协议服务器角色。 应用程序不应依赖于此功能。 |
远程访问 | 尚不支持远程访问(直接访问)服务器角色。 应用程序不应依赖于此功能。 |
Rights Management Services | Rights Management Services。 尚不支持服务器角色。 应用程序不应依赖于此功能。 |
Windows 部署服务 | Windows 部署服务。 尚不支持服务器角色。 应用程序不应依赖于此功能。 |
BitLocker 驱动器加密 | 操作系统硬盘不支持 BitLocker 驱动器加密,但它可能在数据磁盘上使用。 |
Internet 存储名称服务器 | 尚不支持 Internet 存储名称服务器功能。 应用程序不应依赖于此功能。 |
多路径 I/O | 多路径 I/O。 尚不支持此服务器功能。 应用程序不应依赖于此功能。 |
网络负载均衡 | 网络负载均衡。 尚不支持此服务器功能。 应用程序不应依赖于此功能。 |
对等名称解析协议 | 对等名称解析协议。 尚不支持此服务器功能。 应用程序不应依赖于此功能。 |
SNMP 服务 | 尚不支持简单网络管理协议(SNMP)服务功能。 应用程序不应依赖于此功能。 |
Windows Internet 名称服务 | Windows Internet 名称服务。 尚不支持此服务器功能。 应用程序不应依赖于此功能。 |
无线 LAN 服务 | 无线 LAN 服务。 尚不支持此服务器功能。 应用程序不应依赖于此功能。 |
如果遇到上述测试用例出现任何故障,请参阅解决方案表中的 说明 列。 有关详细信息,请联系支持团队。
常见测试用例错误
有关运行测试用例时可能看到的常见错误,请参阅下表:
测试用例 | 错误 | 溶液 |
---|---|---|
Linux 代理版本测试用例 | 必须安装 Azure Linux 代理的最低支持版本或更高版本。 | 更新 Linux 代理版本。 有关详细信息,请参阅 Linux 代理版本 更新页。 |
Bash 历史记录测试用例 | 如果提交的图像中 Bash 历史记录的大小超过 1 KB,则会发生错误。 大小限制为 1 KB,以确保 Bash 历史记录文件不包含任何潜在的敏感信息。 | 通过将 VHD 装载到另一个工作 VM 并进行更改,将大小减小到 1 KB 或更少,从而解决此错误。 例如,删除 .bash_history 文件。 |
必需的内核参数测试用例 | 如果未将 console 的值设置为 ttyS0 ,则会收到此错误。 通过运行以下命令来检查它:cat /proc/cmdline 。 |
将 console 的值设置为 ttyS0 ,然后重新提交请求。 |
ClientAlive 间隔测试用例 | 如果工具包为测试用例提供了失败的结果,则 ClientAliveInterval 存在不适当的值。 |
将 ClientAliveInterval 的值设置为小于或等于 235,然后重新提交请求。 |
smoke_test | 当映像因内核崩溃而无法启动或重新启动时收到错误。 可以从错误说明中获取内核崩溃的一些调用跟踪信息。 若要查看整个调用跟踪和串行日志,可以使用映像在 Azure 中部署 VM,并在 Azure 门户中检查 VM 资源的串行控制台。 | 在 Azure 中创建 VM 时,可以从 Azure 门户下载串行控制台日志。 有关详细信息,请参阅适用于 Linux 的串行控制台。 |
verify_dns_name_resolution | 此测试用例通过运行以下命令来检查 DNS 名称解析:ping bing.com -c 5 -i 0.5 -O。 如果无法 ping 公共 Web 地址 bing.com,则会发生错误。 | 有关详细信息,请参阅 Azure DNS 添加正确的设置。 |
verify_no_pre_exist_users | 检测到用户密码或密钥时,检测到用户 XXXX 的密码 错误。 | 检查 /etc/shadow 文件,查看其是否具有用户密码。 如果是这样,则必须删除密码,并按照错误消息删除 {user's home directory}/.ssh/authorized_keys 文件。 |
validate_netvsc_reload | 收到错误 失败。SSHException:SSH 会话未处于活动状态, 如果 VM 在运行以下命令后无法连接。 如果运行 modprobe -r hv_netvsc; modprobe hv_netvsc; ip link set eth0 down; ip link set eth0 up;dhclient -r eth0; dhclient eth0 命令后从 VM 找到内核崩溃,则会收到错误 发现 xx 节点的内核崩溃。 |
检查串行控制台,查看在上一命令运行期间是否发生了任何错误。 有关详细信息,请参阅 网络虚拟网络客户端(NetVSC)。 |
数据磁盘大小验证
未批准大小大于 1,023 GB 的数据磁盘请求。 此规则适用于 Linux 和 Windows。
重新提交大小小于或等于 1,023 GB 的请求。
OS 磁盘大小验证
有关 OS 磁盘大小的限制,请参阅以下规则。 提交任何请求时,请验证 OS 磁盘大小是否在 Linux 或 Windows 的限制范围内。
操作系统 | 建议的 VHD 大小 |
---|---|
Linux | 1 GB 到 1,023 GB |
窗户 | 30 GB 到 250 GB |
由于 VM 允许访问基础操作系统,因此请确保 VHD 大小足以容纳 VHD。 磁盘在停机的情况下无法扩展。 使用 30 GB 到 50 GB 的磁盘大小。
VHD 大小 | 实际占用大小 | 溶液 |
---|---|---|
>500 tebibytes (TiB) | n/a | 请联系支持团队以获取异常批准。 |
250-500 TiB | >200 gb(GiB)与 blob 大小的差异 | 请联系支持团队以获取异常批准。 |
注意
较大的磁盘大小会产生更高的成本,并在安装和复制过程中导致延迟。 由于这种延迟和成本,支持团队可能会寻求异常审批的理由。
适用于 Windows 的 WannaCry 修补程序验证测试
若要防止与 WannaCry 病毒相关的潜在攻击,请确保使用最新的修补程序更新所有 Windows 映像请求。
可以从 C:\windows\system32\drivers\srv.sys
或 srv2.sys
验证映像文件版本。
下表显示了最低修补版本的 Windows Server:
操作系统 | 版本 |
---|---|
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 | 那 |
注意
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 | 待定 | |
RHEL-SAP 7.5 | 待定 | |
SLES | SLES11SP4(包括 SAP) | 3.0.101-108.95.2 |
SLES12SP1 for SAP | 3.12.74-60.64.115.1 | |
SLES12SP2 for SAP | 4.4.121-92.114.1 | |
SLES12SP3 | 4.4180-4.31.1 (kernel-azure) | |
SLES12SP3 for SAP | 4.4.180-94.97.1 | |
SLES12SP4 | 4.12.14-6.15.2 (kernel-azure) | |
SLES12SP4 for SAP | 4.12.14-95.19.1 | |
SLES15 | 4.12.14-5.30.1 (kernel-azure) | |
SLES15 for SAP | 4.12.14-5.30.1 (kernel-azure) | |
SLES15SP1 | 4.12.14-5.30.1 (kernel-azure) | |
神谕 | 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 稳定版 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 backports | 4.9.168-1+deb9u3 | |
stretch (安全性) | 4.9.168-1+deb9u3 | |
Debian GNU/Linux 10 (buster) | Debian 6.3.0-18+deb9u1 | |
布斯特, sid (伸展后港) | 4.19.37-5 |
图像大小应为 MB 的倍数
Azure 上的所有 VHD 必须具有与 1 兆字节(MB)的倍数对齐的虚拟大小。 如果 VHD 不符合建议的虚拟大小,则请求可能会被拒绝。
从原始磁盘转换为 VHD 时,请遵循准则。 确保原始磁盘大小是 1 MB 的倍数。 有关详细信息,请参阅 非授权分发的信息。
VM 访问被拒绝
VM 上运行测试用例的 访问被拒绝 问题可能是由于权限不足。
检查是否为运行自测试用例的帐户启用了适当的访问权限。 启用访问以运行测试用例(如果未启用)。 如果不想启用访问权限,可以与支持团队共享自测试用例结果。
若要使用 SSH 禁用的映像提交请求,以进行认证过程:
在映像上运行 azure VM 的
最新认证测试工具。 提出
支持票证。 请确保附加工具包报表并提供产品/服务详细信息: - 产品/服务名称
- 发布者名称
- 计划 ID/SKU 和版本
重新提交认证请求。
注意
如果要发布已禁用或受限 SSH 的锁定 VM 映像,请在合作伙伴中心的“技术配置”页中启用“远程桌面或 SSH 已禁用”复选框。 它告知认证团队,此配置是按设计进行的,并在映像上执行正确的验证,而不会对映像进行限制访问失败。
下载失败
有关使用共享访问签名 (SAS) URL 下载 VM 映像时出现的任何问题,请参阅下表。
错误 | 原因 | 溶液 |
---|---|---|
找不到 Blob | VHD 可能会被删除或从指定位置移动。 | |
正在使用的 Blob | VHD 由另一个内部进程使用。 正在发布时修改 VHD 的源 Blob 存储。 | 使用 SAS URL 下载 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 分区),我们强烈建议 将 OS 磁盘的前 2,048 个扇区(1 MB)保留为空。 此要求是允许 Azure 将重要元数据添加到映像(示例包括用于改善客户启动时间的元数据、计费和其他详细信息)。 如果已 已批准的基础映像 并且映像具有有效的计费标记,则建议使用最佳做法。 但是,如果映像没有有效的计费标记,则如果 OS 磁盘的前 1 MB 不为空,发布可能会失败。
如果要生成没有任何有效计费标记的映像,请确保 OS 磁盘的前 2,048 个扇区(1 MB)为空。 否则,发布会失败。 此要求仅适用于 OS 磁盘(而非数据磁盘)。 如果要从已批准的基础生成映像,则它已为前 1 MB 空。 因此,无需单独处理它。
若要在 OS 磁盘中保留前 1 MB 可用,请完成下一部分中的步骤。
如何在空 VHD(2,048 扇区,每个扇区 512 字节)的开头保留 1 MB 的可用空间。
这些步骤仅适用于 Linux。
创建任何类型的 Linux VM,例如 Ubuntu、CentOS 或其他。 填写必填字段,然后选择“下 一步:磁盘”。
为 VM 创建非托管磁盘。 使用默认值,或者为 OS 磁盘大小、OS 磁盘类型和 加密类型等字段指定任何值。
创建 VM 后,在左窗格中,选择 磁盘。
显示如何为 V M 选择磁盘的屏幕截图
将 VHD 作为数据磁盘附加到 VM,以便创建分区表。
选择 附加现有磁盘:
查找 VHD 存储帐户。
选择 容器,然后选择 VHD。
选择“确定”
。 VHD 将添加为数据磁盘 LUN 0。
重启 VM。
重启 VM 后,使用 Putty 或其他客户端登录到 VM,并运行
sudo -i
命令以获取根访问权限。在 VHD 上创建分区。
输入
fdisk /dev/sdb
命令。若要查看 VHD 中的现有分区列表,请输入
p
。输入
d
以删除 VHD 中可用的所有现有分区。 如果需要,可以跳过此步骤。输入
n
以创建新分区,并为(主分区)选择p
。输入 2048 作为 第一个扇区 值。 可以将 最后一个扇区保留为默认值。
重要
任何现有数据都将擦除到 2,048 个扇区(每个扇区 512 个字节)。 在创建新分区之前备份 VHD。
键入
w
以确认分区的创建。可以通过运行命令
n fdisk /dev/sdb
并键入p
来验证分区表。 使用 2,048 偏移值创建分区。
从 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,可以使用
sysreptool
通用化 Windows 映像。有关
sysreptool
工具的详细信息,请参阅 系统准备(Sysprep)概述。
DataDisk 错误
有关与数据磁盘相关的错误的解决方案,请使用下表:
错误 | 原因 | 溶液 |
---|---|---|
DataDisk- InvalidUrl: |
提交产品/服务时,可能会出现此错误,因为逻辑单元号(LUN)无效。 | 验证数据磁盘的 LUN 编号序列是否位于合作伙伴中心。 |
DataDisk- NotFound: |
此错误可能是因为数据磁盘未位于指定的 SAS URL。 | 验证数据磁盘是否位于指定的 SAS URL。 |
远程访问问题
如果未为 Windows 映像启用远程桌面协议 (RDP) 选项,则会出现此错误。
在提交 Windows 映像之前启用对 Windows 映像的 RDP 访问。
Bash 历史记录失败
如果提交的图像中的 Bash 历史记录的大小超过 1 KB,则会看到此错误。 大小限制为 1 KB,以限制文件包含潜在的敏感信息。
删除 Bash 历史记录:
部署 VM,然后在 Azure 门户中选择“运行命令” 选项。
选择第一个选项 RunShellScript,然后运行命令:
cat /dev/null > ~/.bash_history && history -c
。命令成功运行后,重启 VM。
通用化 VM、获取映像 VHD 并停止 VM。
重新提交通用映像。
网络虚拟设备验证
在市场映像认证期间,使用任何 VM 产品/服务通用的测试以及下表中列出的 NVA 测试用例来验证作为网络虚拟设备(NVA)的 VM 产品/服务。 这些 NVA 特定验证的目标是验证 NVA 映像与 SDN 堆栈的协调程度。
测试用例 | 运行测试用例的步骤 | 溶液 |
---|---|---|
VHD 访问 | 确保提供正确的 VHD SAS URL。 权限设置为允许访问,NVA 映像 通用化。 | 验证 NVA 映像和提供的 URL。 |
NVA 部署 | 使用 NVA 和一个 NIC 部署 VM。 验证部署是否已在 20 分钟内完成。 | 如果部署未在 20 分钟内完成,请验证 NVA 映像。 |
NVA 重新启动 | 使用 NVA 和一个 NIC 部署 VM。 然后,转到 Azure 门户中的 VM,然后在左侧窗格中的 “支持 + 故障排除”部分下,选择“重新部署 + 重新应用 并重新部署 VM。 重新部署完成后,请验证 VM 的状态是否 正在运行,并且可以使用 Netcat 命令访问 NIC 端口 22。 | 如果 VM 在重新启动后未启动,则 NVA 映像可能存在问题。 如果 Netcat 测试失败,则可能是因为即使 VM 正在运行,NIC 在重新启动后也未能出现。 等待几分钟,然后重试。 如果在 20 分钟后仍失败,则 NVA 映像可能存在问题 |
NVA 重新部署 | 使用 NVA 和一个 NIC 部署 VM。 然后,重新部署 VM。 验证 VM 的状态是否 运行,并且可以使用 Netcat 命令访问 NIC 端口 22。 | 如果重新部署未在 15 分钟内完成,则 NVA 映像可能存在问题。 如果 Netcat 测试失败,则可能是因为即使 VM 正在运行,NIC 在重新启动后也未能出现。 等待几分钟,然后重试。 如果在 20 分钟后仍失败,则 NVA 映像可能存在问题 |
高可用性 | 使用 NVA 和一个 NIC 部署 VM。 不应将公共 IP 附加到 NIC,或者如果附加公共 IP,则 SKU 应为标准,IP 分配方法应为静态。 在同一虚拟网络中,使用以下配置设置 Azure 内部 负载均衡器。 - 使用标准 SKU 的负载均衡器 - 使用专用 IP 分配方法作为动态的前端 IP - 使用 TCP 的运行状况探测,端口 22 的重试间隔为 15 秒 - 将协议作为 所有 并启用浮动 IP 设置为 False 的负载均衡规则。 - 指向 NVA VM 的后端池。 设置准备就绪后,使用 Netcat 命令验证 NVA VM 是否可以在负载均衡器中访问。 |
如果 NVA 在负载均衡器中无法访问,请验证 VM、负载均衡器和 HA 端口功能的设置。 如果一切准确,则 NVA 映像可能存在问题。 |
VNET 对等互连 | 使用 NVA 映像部署虚拟机 VM1,在虚拟网络 VNET1 中使用一个 NIC。 在另一个虚拟网络 VNET2 中,使用任何 Linux 映像(例如 ubuntu)部署虚拟机 VM2,其中一个 NIC 和 VM 设置作为动态 IP 分配方法和基本 SKU。 在 VNET1 和 VNET2 之间创建 VNET 对等互连,发到远程虚拟网络的流量 配置为 “允许”(默认) 设置准备就绪后,使用 Netcat 命令验证 VM2 中是否可以访问 NVA VM1 上的 NIC 的专用 IP。 |
如果 NVA VM1 无法从 VM2 访问,请验证是否已正确配置 VNET 对等互连,然后重试。 如果它仍然不起作用,则 NVA 映像可能存在问题。 |
加速网络(AN) | 使用 NVA 和 1 已启用 AN 的 NIC部署 VM。 可以在创建 VM 时或在创建 VM 后的 NIC 属性上启用 AN。 验证 VM 是否已启动并运行。 | 如果部署失败,请验证 NVA 映像是否支持加速网络。 |
多 NIC 基本 | 使用具有动态 IP 分配方法和基本 SKU 的 NVA 和 3 个 NIC 部署 VM。 获取所有 NIC 的专用 IP 和 MAC 地址(请参阅 查看网络接口 以获取说明)。 然后,重新部署 VM,并验证所有 NIC 的专用 IP 和 MAC 地址是否与重新部署前保持相同。 | 如果重新部署后所有 NIC 的专用 IP 和 MAC 地址发生更改,则 NVA 映像可能存在问题。 |
网络中断 | 使用 NVA 和一个 NIC 部署 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 上的防火墙等软件。 在这种情况下,请下载 认证测试工具 并在 合作伙伴中心支持提交报告。
自定义模板。 某些发布者发布需要自定义 Azure 资源管理器 (ARM) 模板来部署 VM 的 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 产品/服务中的 TLS 相关漏洞
本部分介绍如何在使用某个 VM 映像发现与 TLS 相关的漏洞时提供新的 VM 映像。 它仅适用于发布到 Azure 市场的 Azure VM 产品/服务。
修正步骤
若要解决这些漏洞,请执行以下步骤:
禁用 TLS 1.0 和 1.1 协议的使用,并确保 VM 映像支持 TLS 1.2 或更高版本。 这可以通过在 VM 映像中设置相应的注册表项或配置设置来实现。
对于 Linux,请使用以下命令手动测试并确保禁用这些版本:
TLS 1.0 :
openssl s_client -connect ip:port -tls1
TLS 1.1 :
openssl s_client -connect ip:port -tls1_1
对于 Windows,请参阅官方 TLS 注册表设置文档 更新注册表项。 使用以下 PowerShell 命令配置 TLS 设置:
路径 | 名字 | 价值 |
---|---|---|
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client | “已启用” | 0 |
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server | “已启用” | 0 |
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client | “已启用” | 0 |
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server | “已启用” | 0 |
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client | “已启用” | 1 |
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server | “已启用” | 1 |
启用更高版本(可选)
如果要启用更高版本(例如 TLS 1.3),请使用这些版本的相应路径和值重复前面的步骤。
具有有限访问权限或需要自定义模板的 VM 映像
锁定 (或) SSH 禁用的产品/服务
使用 SSH 禁用(适用于 Linux)或 RDP 禁用(对于 Windows)发布的映像被视为锁定的 VM。 有一些特殊的业务方案,因为发布者只允许对少数用户进行受限访问。
在验证检查期间,锁定的 VM 可能不允许执行某些认证命令。
自定义模板
一般情况下,在单个 VM 产品/服务下发布的所有映像都遵循标准 ARM 模板进行部署。 但是,在某些情况下,发布者可能需要在部署 VM 时进行自定义(例如,要配置的多个 NIC)。
根据以下方案(非exhaustive),发布者使用自定义模板来部署 VM:
- VM 需要额外的网络子网。
- 要插入 ARM 模板的更多元数据。
- 执行 ARM 模板所必备的命令。
VM 扩展
Azure 虚拟机(VM)扩展是小型应用程序,用于在 Azure VM 上提供部署后配置和自动化任务。 例如,如果虚拟机需要软件安装、防病毒保护或在其中运行脚本,则可以使用 VM 扩展。
Linux VM 扩展验证需要满足以下条件才能成为映像的一部分:
- 必须安装 受支持的最低版本 Azure Linux 代理或更高版本。
- 高于 2.6+ 的 Python 版本
有关详细信息,请参阅 VM 扩展。
验证图像完整性
如果要创建映像并从映像中创建光盘以验证映像的完整性,则保留前 1 MB 用于优化性能,最后 512 个字节是为 VHD 页脚保留的。 因此,在验证映像的完整性时忽略它们。
相关内容
- 配置 VM 产品/服务属性
- 活动市场奖励
- 如果有改进问题或反馈,请联系 合作伙伴中心支持人员