前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Azure Policy 定义Azure资源合规性

使用 Azure Policy 定义Azure资源合规性

作者头像
李珣
发布2022-05-07 19:24:10
6220
发布2022-05-07 19:24:10
举报
文章被收录于专栏:李珣李珣

在云的使用过程中,大多数情况下管理云和使用资源的是两拨拨通的人员。在这种情况下,管理员除了使用RBAC的访问控制来限制不同的用户创建资源的权限外,也希望所有的用户在创建资源的时候都遵循相应的标准,从而满足企业IT运维的合规性。

一般情况下,很多企业当面临这种问题的时候可能会通过以下方式强制实施标准:不允许团队直接创建 Azure 资源,而是让 IT 团队定义和部署所有基于云的资产。 这通常是众多本地解决方案中的一种,但这会降低团队的灵活性和创新能力。 而 Azure 会提供几个可用于强制实施和验证标准的工具,同时仍允许云的使用人员在云中创建和拥有自己的资源。

Azure Policy 是 Azure 中的一项服务,用于定义、分配和管理环境中的资源标准。 它可以防止创建不允许使用的资源,确保新资源应用特定设置,并对现有资源运行评估以扫描不合规的情况。

Azure Policy 附带了许多内置的策略和计划定义,用户可以在存储、网络、计算、安全中心和监视等类别下使用这些定义。

假设我们允许组织中的任何人创建虚拟机 (VM)。 我们希望控制成本,因此 Azure 租户的管理员定义了一个策略,禁止创建任何具有 4 个以上 CPU 的 VM。 一旦实施该策略,Azure Policy 就会阻止任何人在允许的SKU 列表之外创建新的 VM。 此外,如果你尝试更新现有 VM,该服务会根据策略对其进行检查。 最后,Azure Policy 将审核组织中的所有现有 VM,确保策略得到实施。 它可以审核不合规的资源、更改资源属性或停止创建资源。

若要创建并实施 Azure Policy,需要先创建策略定义。 每种策略定义在其特定的条件下将被强制执行。 并且,在满足条件时将出现随附效果。 若要应用策略我们需要完成如下步骤:

·         创建策略定义

·         将定义分配给资源作用域

·         查看策略执行结果

创建策略定义:

策略定义是一个用于描述要评估的内容以及要采取的操作的JSON文件。例如,可以限制整个订阅内不允许创建ASM类型的Azure资源、在资源的创建过程中强制对资源添加tag等。管理员可以使用门户中的某个预定义策略,也可以创建自己的策略(修改现有策略或从头开始创建新策略)

如下是一个限制订阅中创建ASM资源的策略:

代码语言:javascript
复制
{
     "if": {
         "field": "type",
         "like": "Microsoft.Classic*"
     },
     "then": {
         "effect": "Deny"
     }
}

将定义分配给资源作用域

一旦完成了策略的定义以后,就需要分配它们。策略分配是指在特定的作用域内分配策略定义以供执行。此作用域的范围是从完整订阅到资源组。 策略分配由所有子资源继承。 这意味着,如果将策略应用到资源组,则会将其应用到该资源组内的所有资源。 但是,可以从策略分配中排除子作用域。 例如,可以为整个订阅强制实施策略,然后排除几个选定的资源组。

可通过 Azure 门户、PowerShell 或 Azure CLI 来分配上述任意策略。 分配策略定义时,需要提供所有已定义的参数。

查看策略执行结果

Azure Policy 首先评估通过 Azure 资源管理器创建或更新资源的请求。 Policy 为应用于该资源的所有分配创建一个列表,然后根据每个定义评估该资源。 如果该资源违反策略,Policy 会处理多个结果,然后将请求转交给相应的资源提供程序,以免进行任何不必要的处理。

Azure Policy 中的每个策略定义都有单一效果。 该效果决定了在匹配关联的策略规则时发生的情况。 发生该情况时,Azure Policy 会根据分配的效果采取特定操作。

策略效果

解释

Deny

资源创建/更新因策略而失败。

Disabled

忽略(禁用)该策略规则。 通常用于测试。

Append

在创建或更新期间向请求的资源添加其他参数/字段。 一个常见示例是在成本中心等资源上添加标记,或者为存储资源指定允许的 IP。

Audit\AuditIfNotExists

评估不合规资源时在活动日志中创建警告事件,但不会停止请求。

DeployIfNotExists

在满足特定条件时执行模板部署。 例如,如果对数据库启用了 SQL 加密,它可以在创建 DB 之后运行模板,以特定方式对其进行设置。

在进行了策略分配以后,最简单的方法是在门户中查看,因为它提供了一个很好的图形概览供你浏览。

聊了这么多,下面就通过两个示例来看下如何使用Azure Policy来限制Azure资源:

使用Policy限制创建ASM资源:

定义策略:

代码语言:javascript
复制
{
 "if": {
      "field": "type",
      "like": "Microsoft.Classic*"
 },
 "then": {
      "effect": "Deny"
 }
}
$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
使用 Azure Policy 定义Azure资源合规性_json
使用 Azure Policy 定义Azure资源合规性_json

应用策略:

代码语言:javascript
复制
$assignment =
New-AzureRMPolicyAssignment -Name 'Restrict All ASM Resources'
-PolicyDefinition $definition -Scope "/subscriptions/$subscriptionId"
使用 Azure Policy 定义Azure资源合规性_json_02
使用 Azure Policy 定义Azure资源合规性_json_02

查看策略执行效果:

策略应用以后,当我试图创建一个经典的VNet时,无法通过验证:

使用 Azure Policy 定义Azure资源合规性_microsoft_03
使用 Azure Policy 定义Azure资源合规性_microsoft_03

使用Policy来审核Azure资源的Tag设定:

定义策略 

代码语言:javascript
复制
 {
    "if": {
      "not" : {
        "field" : "tags",
        "containsKey" : "Owner"
      }
    },
    "then" : {
      "effect" : "deny"
    }
  } 
$policy = New-AzureRmPolicyDefinition -Name resourceOwnerTagPolicyDefinition -Description "Policy
to deny resource creation if no resourceOwner tag is provided" -Policy "c:policiesResourceOwnerTagPolicy.json"
使用 Azure Policy 定义Azure资源合规性_microsoft_04
使用 Azure Policy 定义Azure资源合规性_microsoft_04

应用策略

代码语言:javascript
复制
New-AzureRmResourceGroup -Name PolicyRG -Location "southeastasia"
使用 Azure Policy 定义Azure资源合规性_作用域_05
使用 Azure Policy 定义Azure资源合规性_作用域_05
代码语言:javascript
复制
New-AzureRmPolicyAssignment -Name resourceOwnerTagPolicyAssignment -PolicyDefinition $policy -Scope /subscriptions/SubscriptionID
/resourceGroups/PolicyRG
使用 Azure Policy 定义Azure资源合规性_json_06
使用 Azure Policy 定义Azure资源合规性_json_06

查看策略的执行结果

使用 Azure Policy 定义Azure资源合规性_microsoft_07
使用 Azure Policy 定义Azure资源合规性_microsoft_07

策略应用以后,当我试图去创建一个没有添加resourceOwner Tag的虚拟机时,无法通过验证:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档