在 Azure IaaS VM(.NET 应用程序)上检测是否 运行

Detect whether running on Azure IaaS VM (.NET Application)

我看过很多与我认为应该是一个相对简单的任务相关的帖子。作为我们许可标准的一部分,我们会检测我们是否处于虚拟化环境中 运行。然而,我们使用的一些标识符可能会因 VM 的重新分配而发生变化,因此我们开始研究用 Azure 唯一 ID (UUID) 替换其中的一些标识符。但是为了做到这一点,我们需要更改我们的许可代码以正确检测我们 运行 在 azure 环境中。我看过许多与使用 Azure SDK 和 RoleEnvironment 有关的帖子,但我相信这在 运行 在托管 IaaS VM 上(在复制必需的 DLL 时)不起作用。

所以理想情况下,我们希望在 .NET 应用程序中有一种方法,而不依赖于 Azure SDK,我们可以正确识别 Azure VM 而不是标准 VM。这可能包括注册表项、WMI 查找等。

我会注意到在 Microsoft Script Detect Windows Azure Virtual Machine 的 technet 网站上找到的现有解决方案,但是因为我们的代码 运行 被推广到适用于所有类型的环境,所以这并不实用.

Azure 实例元数据服务提供有关 运行 可用于管理和配置虚拟机的虚拟机实例的信息。这包括 SKU、网络配置和即将进行的维护活动等信息。有关可用信息类型的详细信息,请参阅元数据类别。

Azure 的实例元数据服务是一个 REST 端点,所有通过 Azure 资源管理器创建的 IaaS VM 都可以访问它。该端点位于一个众所周知的不可路由 IP 地址 169.254.169.254,只能从 VM 内部访问。

https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service