将来宾配置包分配给多台计算机的最佳方法是使用 Azure Policy。 也可以将来宾配置包分配给单台计算机。
内置配置和自定义配置
若要将来宾配置包分配给单台计算机,请修改以下示例。 有一种情况。
使用指向已发布的包的链接,将自定义配置应用于计算机。
扩展其他资源类型
在以下每个部分,示例都包含一个名称以 Microsoft.Compute/virtualMachines 开头的类型属性。 来宾配置资源提供程序 Microsoft.GuestConfiguration 是必须引用父类型的扩展资源。
将以下“<>”字段替换为特定于你的环境的值:
- <vm_name>:配置将应用到的计算机资源的名称
 - <configuration_name>:要应用的配置的名称
 - <vm_location>:将在其中创建来宾配置分配的 Azure 区域
 - <Url_to_Package.zip>:对于自定义内容包,为指向 .zip 文件的 HTTPS 链接
 - <SHA256_hash_of_package.zip>:对于自定义内容包,使用 .zip 文件的 SHA256 哈希
 
使用 Azure 资源管理器模板分配配置
可以部署包含来宾配置分配资源的 Azure 资源管理器模板。
以下示例分配自定义配置。
{
    "apiVersion": "2020-06-25",
    "type": "Microsoft.Compute/virtualMachines/providers/guestConfigurationAssignments",
    "name": "<vm_name>/Microsoft.GuestConfiguration/<configuration_name>",
    "location": "<vm_location>",
    "dependsOn": [
        "Microsoft.Compute/virtualMachines/<vm_name>"
    ],
    "properties": {
        "guestConfiguration": {
            "name": "<configuration_name>",
            "contentUri": "<Url_to_Package.zip>",
            "contentHash": "<SHA256_hash_of_package.zip>",
            "assignmentType": "ApplyAndMonitor"
        }
    }
}
以下示例分配 AzureWindowBaseline 内置配置。
{
    "apiVersion": "2020-06-25",
    "type": "Microsoft.Compute/virtualMachines/providers/guestConfigurationAssignments",
    "name": "<vm_name>/Microsoft.GuestConfiguration/<configuration_name>",
    "location": "<vm_location>",
    "dependsOn": [
        "Microsoft.Compute/virtualMachines/<vm_name>"
    ],
    "properties": {
        "guestConfiguration": {
            "name": "AzureWindowsBaseline",
            "version": "1.*",
            "assignmentType": "ApplyAndMonitor",
            "configurationParameter": [
            {
                "name": "Minimum Password Length;ExpectedValue",
                "value": "16"
            },
            {
                "name": "Minimum Password Length;RemediateValue",
                "value": "16"
            },
            {
                "name": "Maximum Password Age;ExpectedValue",
                "value": "75"
            },
            {
                "name": "Maximum Password Age;RemediateValue",
                "value": "75"
            }
        ]
        }
    }
}
使用 Bicep 分配配置
可以使用 Azure Bicep 来部署来宾配置分配。
以下示例分配自定义配置。
resource myVM 'Microsoft.Compute/virtualMachines@2021-03-01' existing = {
  name: '<vm_name>'
}
resource myConfiguration 'Microsoft.GuestConfiguration/guestConfigurationAssignments@2020-06-25' = {
  name: '<configuration_name>'
  scope: myVM
  location: resourceGroup().location
  properties: {
    guestConfiguration: {
      name: '<configuration_name>'
      contentUri: '<Url_to_Package.zip>'
      contentHash: '<SHA256_hash_of_package.zip>'
      version: '1.*'
      assignmentType: 'ApplyAndMonitor'
    }
  }
}
以下示例分配 AzureWindowBaseline 内置配置。
resource myWindowsVM 'Microsoft.Compute/virtualMachines@2021-03-01' existing = {
  name: '<vm_name>'
}
resource AzureWindowsBaseline 'Microsoft.GuestConfiguration/guestConfigurationAssignments@2020-06-25' = {
  name: 'AzureWindowsBaseline'
  scope: myWindowsVM
  location: resourceGroup().location
  properties: {
    guestConfiguration: {
      name: 'AzureWindowsBaseline'
      version: '1.*'
      assignmentType: 'ApplyAndMonitor'
      configurationParameter: [
        {
          name: 'Minimum Password Length;ExpectedValue'
          value: '16'
        }
        {
          name: 'Minimum Password Length;RemediateValue'
          value: '16'
        }
        {
          name: 'Maximum Password Age;ExpectedValue'
          value: '75'
        }
        {
          name: 'Maximum Password Age;RemediateValue'
          value: '75'
        }
      ]
    }
  }
}
使用 Terraform 分配配置
重要
Terraform 提供程序 azurerm_policy_virtual_machine_configuration_assignment 未更新,还不支持 assignmentType 属性,仅支持执行审核的配置。
另请注意,我们应在必要时在提供商资源中添加 environment  = "china"。
provider "azurerm" {
  ....
  environment  = "china"
  subscription_id = "<your_subscription_id>"
  ....
  features {}
}
以下示例分配自定义配置。
resource "azurerm_virtual_machine_configuration_policy_assignment" "<configuration_name>" {
  name               = "<configuration_name>"
  location           = azurerm_windows_virtual_machine.example.location
  virtual_machine_id = azurerm_windows_virtual_machine.example.id
  configuration {
    name            = "<configuration_name>"
    contentUri      =  '<Url_to_Package.zip>'
    contentHash     =  '<SHA256_hash_of_package.zip>'
    version         = "1.*"
    assignmentType  = "ApplyAndMonitor
  }
}
以下示例分配 AzureWindowBaseline 内置配置。
resource "azurerm_virtual_machine_configuration_policy_assignment" "AzureWindowsBaseline" {
  name               = "AzureWindowsBaseline"
  location           = azurerm_windows_virtual_machine.example.location
  virtual_machine_id = azurerm_windows_virtual_machine.example.id
  configuration {
    name    = "AzureWindowsBaseline"
    version = "1.*"
    parameter {
      name  = "Minimum Password Length;ExpectedValue"
      value = "16"
    }
    parameter {
      name  = "Minimum Password Length;RemediateValue"
      value = "16"
    }
    parameter {
      name  = "Minimum Password Age;ExpectedValue"
      value = "75"
    }
    parameter {
      name  = "Minimum Password Age;RemediateValue"
      value = "75"
    }
  }
}
后续步骤
- 阅读来宾配置概述。
 - 设置自定义来宾配置包开发环境。
 - 为来宾配置创建包项目。
 - 从开发环境测试包项目。
 - 发布包项目,以便计算机可以访问它。
 - 使用 
GuestConfiguration模块创建 Azure Policy 定义,用于大规模管理环境。 - 使用 Azure 门户分配自定义策略定义。
 - 了解如何查看来宾配置策略分配的合规性详细信息。