你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如果想要阻止用户在 Windows VM 上使用或安装某些扩展,可以使用 PowerShell 创建 Azure Policy 定义以限制资源组中的 VM 扩展。
本教程在 Cloud Shell 中使用 Azure PowerShell,后者已不断更新到最新版本。
创建规则文件
若要限制可以安装哪些扩展,需要使用规则来提供用于识别扩展的逻辑。
此示例展示如何通过在 Azure Cloud Shell 中创建规则文件来拒绝“Microsoft. Compute”发布的扩展,但如果本地 PowerShell 中工作,也可以创建本地文件并将路径 ($home/clouddrive) 替换为计算机上本地文件的路径。
在 Cloud Shell 中,使用任何文本编辑器创建文件
$home/clouddrive/rules.json
。将以下 .json 内容复制并粘贴到文件中并保存:
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Compute/virtualMachines/extensions"
},
{
"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
"equals": "Microsoft.Compute"
},
{
"field": "Microsoft.Compute/virtualMachines/extensions/type",
"in": "[parameters('notAllowedExtensions')]"
}
]
},
"then": {
"effect": "deny"
}
}
创建参数文件
还需要一个参数文件,以创建一个用于传入要阻止的扩展列表的结构。
本示例演示如何在 Cloud Shell 中为 VM 创建参数文件,但如果在本地使用 PowerShell,也可以创建本地文件并将路径 ($home/clouddrive) 替换为计算机上本地文件的路径。
在 Cloud Shell 中,使用任何文本编辑器创建文件
$home/clouddrive/parameters.json
。将以下 .json 内容复制并粘贴到文件中并保存:
{
"notAllowedExtensions": {
"type": "Array",
"metadata": {
"description": "The list of extensions that will be denied.",
"displayName": "Denied extension"
}
}
}
创建策略
策略定义是用于存储想要使用的配置的对象。 策略定义使用规则和参数文件定义策略。 使用 New-AzPolicyDefinition cmdlet 创建策略定义。
策略规则和参数是在 cloud shell 中创建并存储为 .json 文件的文件。 根据需要替换示例 -Policy
和 -Parameter
文件路径。
$definition = New-AzPolicyDefinition `
-Name "not-allowed-vmextension-windows" `
-DisplayName "Not allowed VM Extensions" `
-description "This policy governs which VM extensions that are explicitly denied." `
-Policy 'C:\Users\ContainerAdministrator\clouddrive\rules.json' `
-Parameter 'C:\Users\ContainerAdministrator\clouddrive\parameters.json'
分配策略
此示例使用 New-AzPolicyAssignment 将策略分配给资源组。 myResourceGroup 资源组中创建的任何 VM 将不能安装 VM 访问代理扩展或自定义脚本扩展。
使用 Get-AzSubscription | Format-Table cmdlet 获取你的订阅 ID,以替换此示例中的订阅 ID。
$scope = "/subscriptions/<subscription id>/resourceGroups/myResourceGroup"
$assignment = New-AzPolicyAssignment `
-Name "not-allowed-vmextension-windows" `
-Scope $scope `
-PolicyDefinition $definition `
-PolicyParameter '{
"notAllowedExtensions": {
"value": [
"VMAccessAgent",
"CustomScriptExtension"
]
}
}'
$assignment
测试策略
若要测试策略,请尝试使用 VM 访问扩展。 以下命令应失败并显示消息“Set-AzVMAccessExtension:策略不允许使用资源 'myVMAccess'”。
Set-AzVMAccessExtension `
-ResourceGroupName "myResourceGroup" `
-VMName "myVM" `
-Name "myVMAccess" `
-Location EastUS
在门户中,密码更改将失败并显示消息“由于违反策略,模板部署失败”。
删除分配
Remove-AzPolicyAssignment -Name not-allowed-vmextension-windows -Scope $scope
删除策略
Remove-AzPolicyDefinition -Name not-allowed-vmextension-windows
后续步骤
有关详细信息,请参阅 Azure Policy。