Azure 机器配置扩展

机器配置扩展在虚拟机 (VM) 内部执行审核和配置操作。

先决条件

若要使你的 VM 能够通过机器配置服务的身份验证,该 VM 必须有系统分配的托管标识。 可以通过设置 "type": "SystemAssigned" 属性来满足对 VM 的身份要求:

"identity": {
   "type": "SystemAssigned"
}

操作系统

对机器配置扩展的操作系统支持与端到端解决方案的操作系统支持中所述相同。

Internet 连接

通过机器配置扩展安装的代理必须能够访问来宾配置分配列出的内容包,并向机器配置服务报告状态。 VM 可以使用 TCP 端口 443 上的出站 HTTPS 进行连接,或者使用专用网络提供的连接。

若要了解有关专用网络的详细信息,请参阅以下文章:

安装扩展

可以直接从 Azure CLI 或 PowerShell 安装和部署机器配置扩展。 Azure 资源管理器 (ARM)、Bicep 和 Terraform 也有部署模板。 有关部署模板的详细信息,请参阅 Microsoft.GuestConfiguration guestConfigurationAssignments

注意

在以下部署示例中,将 <placeholder> 参数值替换为你的配置的特定值。

部署注意事项

在安装和部署机器配置扩展之前,请查看以下注意事项。

  • 实例名称。 安装机器配置扩展时,扩展的实例名称必须设置为 AzurePolicyforWindowsAzurePolicyforLinux。 前面所述的安全基线定义策略需要这些特定的字符串。

  • 版本。 默认情况下,所有部署都会更新到最新版本。 除非另外指定,否则 autoUpgradeMinorVersion 属性的值默认为 true。 此功能有助于减轻在发布新版本的机器配置扩展时对更新代码的担忧。

  • 自动升级。 机器配置扩展支持 enableAutomaticUpgrade 属性。 当此属性设置为 true 时,有新版本时,Azure 会自动升级到最新版本的扩展。

  • Azure Policy。 若要大规模部署最新版本的机器配置扩展(包括身份要求),请按照创建策略分配以识别不合规资源中的步骤进行操作。 使用 Azure Policy 创建以下分配:

  • 其他属性。 不需要在机器配置扩展上包含任何设置或受保护的设置属性。 代理从 Azure REST API 来宾配置分配资源检索此类信息。 例如,ConfigurationUriModeConfigurationSetting 属性分别按配置进行托管,而不是在 VM 扩展上托管。

Azure CLI

部署适用于 Linux 的扩展:

az vm extension set  --publisher Microsoft.GuestConfiguration --name ConfigurationForLinux --extension-instance-name AzurePolicyforLinux --resource-group <myResourceGroup> --vm-name <myVM> --enable-auto-upgrade true

部署适用于 Windows 的扩展:

az vm extension set  --publisher Microsoft.GuestConfiguration --name ConfigurationforWindows --extension-instance-name AzurePolicyforWindows --resource-group <myResourceGroup> --vm-name <myVM> --enable-auto-upgrade true

PowerShell

部署适用于 Linux 的扩展:

Set-AzVMExtension -Publisher 'Microsoft.GuestConfiguration' -ExtensionType 'ConfigurationForLinux' -Name 'AzurePolicyforLinux' -TypeHandlerVersion 1.0 -ResourceGroupName '<myResourceGroup>' -Location '<myLocation>' -VMName '<myVM>' -EnableAutomaticUpgrade $true

部署适用于 Windows 的扩展:

Set-AzVMExtension -Publisher 'Microsoft.GuestConfiguration' -ExtensionType 'ConfigurationforWindows' -Name 'AzurePolicyforWindows' -TypeHandlerVersion 1.0 -ResourceGroupName '<myResourceGroup>' -Location '<myLocation>' -VMName '<myVM>' -EnableAutomaticUpgrade $true

ARM 模板

部署适用于 Linux 的扩展:

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(parameters('VMName'), '/AzurePolicyforLinux')]",
  "apiVersion": "2020-12-01",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', parameters('VMName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.GuestConfiguration",
    "type": "ConfigurationForLinux",
    "typeHandlerVersion": "1.0",
    "autoUpgradeMinorVersion": true,
    "enableAutomaticUpgrade": true, 
    "settings": {},
    "protectedSettings": {}
  }
}

部署适用于 Windows 的扩展:

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(parameters('VMName'), '/AzurePolicyforWindows')]",
  "apiVersion": "2020-12-01",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', parameters('VMName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.GuestConfiguration",
    "type": "ConfigurationforWindows",
    "typeHandlerVersion": "1.0",
    "autoUpgradeMinorVersion": true,
    "enableAutomaticUpgrade": true, 
    "settings": {},
    "protectedSettings": {}
  }
}

Bicep 模板

部署适用于 Linux 的扩展:

resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' existing = {
  name: 'VMName'
}
resource windowsVMGuestConfigExtension 'Microsoft.Compute/virtualMachines/extensions@2020-12-01' = {
  parent: virtualMachine
  name: 'AzurePolicyforLinux'
  location: resourceGroup().location
  properties: {
    publisher: 'Microsoft.GuestConfiguration'
    type: 'ConfigurationForLinux'
    typeHandlerVersion: '1.0'
    autoUpgradeMinorVersion: true
    enableAutomaticUpgrade: true
    settings: {}
    protectedSettings: {}
  }
}

部署适用于 Windows 的扩展:

resource virtualMachine 'Microsoft.Compute/virtualMachines@2021-03-01' existing = {
  name: 'VMName'
}
resource windowsVMGuestConfigExtension 'Microsoft.Compute/virtualMachines/extensions@2020-12-01' = {
  parent: virtualMachine
  name: 'AzurePolicyforWindows'
  location: resourceGroup().location
  properties: {
    publisher: 'Microsoft.GuestConfiguration'
    type: 'ConfigurationforWindows'
    typeHandlerVersion: '1.0'
    autoUpgradeMinorVersion: true
    enableAutomaticUpgrade: true
    settings: {}
    protectedSettings: {}
  }
}

Terraform 模板

部署适用于 Linux 的扩展:

resource "azurerm_virtual_machine_extension" "gc" {
  name                       = "AzurePolicyforLinux"
  virtual_machine_id         = "<myVMID>"
  publisher                  = "Microsoft.GuestConfiguration"
  type                       = "ConfigurationForLinux"
  type_handler_version       = "1.0"
  auto_upgrade_minor_version = "true"
}

部署适用于 Windows 的扩展:

resource "azurerm_virtual_machine_extension" "gc" {
  name                       = "AzurePolicyforWindows"
  virtual_machine_id         = "<myVMID>"
  publisher                  = "Microsoft.GuestConfiguration"
  type                       = "ConfigurationforWindows"
  type_handler_version       = "1.0"
  auto_upgrade_minor_version = "true"
}

Error messages

下表列出了与启用来宾配置扩展相关的可能错误消息。

错误代码 说明
NoComplianceReport VM 未报告符合性数据。
GCExtensionMissing 缺少机器配置(来宾配置)扩展。
ManagedIdentityMissing 缺少托管标识。
UserIdentityMissing 缺少用户分配的标识。
GCExtensionManagedIdentityMissing 缺少机器配置(来宾配置)扩展和托管标识。
GCExtensionUserIdentityMissing 缺少机器配置(来宾配置)扩展和用户分配的标识。
GCExtensionIdentityMissing 缺少机器配置(来宾配置)扩展、托管标识和用户分配的标识。

后续步骤