使用Azure Policy限制所有ASM资源
Azure策略是管理Azure订阅中的标准策略的绝佳工具。可用于创建、分配和管理策略。 这些策略将在整个资源中强制实施不同的规则和效果,以便这些资源符合公司标准和服务级别协议。Azure Policy 通过评估资源是否符合指定策略来满足此需求。 例如,可以设置一项策略,仅允许环境中有特定 SKU 大小的虚拟机。 实施此策略后,将评估新资源和现有资源的符合性。 通过使用正确的策略类型,可以确保现有资源的符合性。
相信大家都知道Azure 上有两种部署模式,分别为ARM和ASM(又名Classic)。两者对比如下:
l 在Classic模式下,每个资源都是独立的,无法将相关的资源组合在一起,但在ARM模式下可以以组的形式部署、管理和监视解决方案的所有资源,而不是单独处理这些资源。
l ARM可以方便地重复部署用户的解决方案,同时还能保证其部署后的一致性。
l ARM可以对资源组中的所有资源做基于角色的访问控制(RBAC),ARM的访问制控有三种基本权限。
n Owner:所有权限。
n Contributor:有创建和管理资源的权限,但是不是付予别人访问权限。
n Reader:只读。
l ARM可以给用户的任何资源打TAG,提供逻辑上组织资源的能力。
l 可以使用资源模版(JSON)来定义解决方案的架构。支持导入导出功能。模版定义了一组资源的集合,可以一次性部署。
l 可以定义各资源之间的依赖关系,使其按正确的顺序进行部署。
鉴于ARM的上述优点,客户在部署的时候都希望使用ARM的模式进行部署,但是在某些情况下可能会出现运维人员误操作等原因将资源部署成ASM的模式。为了避免此种情况的发生,我们一般会推荐客户使用Azure Policy来限制无法在订阅内创建ASM资源。
下面就让我们来一起看一下如何使用一个非常简单的策略定义来实现限制订阅级别上的所有Azure Service Manager(ASM,又名Classic)资源。
定义JSON文件:
代码语言:javascript复制 {
"if": {
"field": "type",
"like": "Microsoft.Classic*"
},
"then": {
"effect": "Deny"
}
}
应用策略:
定义策略:
代码语言:javascript复制$definition = New-AzureRmPolicyDefinition -Name "restrict-all-asm-resources" -DisplayName "Restrict
All ASM Resources" -description "This policy enables you to restrict ALL Azure
Service Manager (ASM, aka Classic) resources." -Policy '.Restrict-ALL-ASM-Resources.json' -Mode All
应用策略:
代码语言:javascript复制$assignment = New-AzureRMPolicyAssignment -Name 'Restrict
All ASM Resources' -PolicyDefinition $definition -Scope
"/subscriptions/$subscriptionId"
策略应用以后,当我试图创建一个经典的VNet时,无法通过验证: