通過 Azure Policy 重新掌控 Azure 資源

A common theme in cloud environments today is the ability to define templates, policies, and procedures. These templates then dictate what can be done and verify that what does exist is correct. A service from Microsoft called Azure Policy is a great way to make that happen.

在本文中,您將了解 Azure 政策的工作原理,然後看到如何創建各種政策和糾正措施。

創建 Azure 政策

有多種方法可以創建政策,例如通過 Azure 入口網站、PowerShell、Azure CLI 和 ARM 模板。

Azure 入口網站

如果您喜歡圖形用戶界面或者正在探索選項,從這裡開始是一個很好的政策介紹。該界面簡單,可以讓您一目了然地了解選項。

  1. Azure 入口網站中,搜尋政策
  2. 撰寫部分下,點擊分配
  3. 點擊分配政策
  4. 範圍下的省略號上點擊以選擇要應用政策的訂閱,以及可選的資源組
  5. 政策定義下的省略號上點擊以選擇要定義的政策
  6. 可以使用分配 name下的默認生成名稱,或者輸入一個唯一標識您的政策的名稱
  7. 根據所選的政策填寫任何必要的參數
  8. 最後,創建一個受管理的身份,如果需要,定義其位置
Creating a Policy

PowerShell

幸運的是,PowerShell 可以快速且輕鬆地將 Azure 政策定義分配給政策分配。有兩個先決條件,即需要安裝最新版本的 Azure PowerShell,並註冊 Azure 政策洞察資源提供者。

Register Policy Insights Resource Provider
PS51> Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Assign the Policy
PS51> $resourceGroup = Get-AzResourceGroup -Name '<resourceGroupName>'

PS51> $definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq '<policyName>' }

PS51> New-AzPolicyAssignment -Name '<assignment-name>' -DisplayName '<friendlyName>' -Scope $resourceGroup.ResourceId -PolicyDefinition $definition -listOfResourceTypesAllowed '<parameterValues>'

Azure CLI

如果 PowerShell 不可用或不被首選,那麼使用 Azure CLI 也可以實現大部分相同的功能。如果您無法在所有操作系統上使用 PowerShell,這也可以在跨平台場景中提供幫助。

> az policy assignment create --name '<policyName>' --display-name '<friendlyName>' --scope '<scope>' --policy '<policyDefinitionID>'

Azure 政策範本

Azure 資源管理器範本是另一種創建和分配資源的政策的方式。以下是一個起始範本,您可以使用它來選擇一個要分配給資源群組的政策作為示例。


{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the policy assignment."
      }
   },
    "rgName":{
      "type": "string",
      "defaultValue": "[resourceGroup().name]",
      "metadata": {
        "description": "Specifies the name of the resource group where you want to assign the policy."
      }
},
    "policyDefinitionID": {
      "type": "string",
      "metadata": {
        "description": "Specifies the ID of the policy definition or policy set definition being assigned."
      }
    }
},
  "resources": [
{
      "type": "Microsoft.Authorization/policyAssignments",
"name": "[parameters('policyAssignmentName')]",
"apiVersion": "2018-05-01",
"properties": {
   "scope": "[concat (subscription ( ).id, '/resourceGroups/', parameters('rgName'))]",
   

Azure 政策分配的工作原理

在選擇或創建要應用的政策定義之後,將這些定義分配給影響特定範圍的對象。範圍僅僅定義了政策分配將應用於的對象,例如管理或資源群組。需要注意的是,政策分配會被所有子資源繼承,但您可以根據需要排除子範圍。

示例 Azure 政策

有很多政策定義可供選擇,很難決定應該應用哪個。那麼有哪些選項,何時使用它們以及為什麼使用它們呢?

  • 要求標籤及其值 – 這可以用於任何方式,但一種可能性是用於成本代碼,或者用於識別分佈在多個資源群組中的多個不同資源。
  • 允許的資源類型 – 如果您只想允許特定的資源呢?這可以強制執行該要求,例如只能創建存儲資源。
  • 使用待重新啟動審核 Windows VMs – 也許您想知道哪些 Windows VM 需要待重新啟動,以確保它們不會被遺漏?使用此策略來尋找並可能在時間表上修復它們。
  • 審核診斷設置 – 如果未啟用診斷設置,此策略將找到不符合要求的設置。
  • 虛擬機上的管理埠應該關閉 – 驗證 VM 上的管理埠是否已關閉,這是對安全性有要求的一項重要策略。
  • 應從您的訂閱中刪除已棄用的帳戶 – 尋找在目錄中已被封鎖登錄的所有帳戶,可能需要進行修復。儘管這裡有很多,而且每天還在不斷創建更多,但您還擁有非常強大的能力來創建自己的自定義策略定義。使用簡單的查詢定義模式,您可以創建強大的 if-then 構造,以定義您要應用策略的內容。

如何使 Azure 策略更可重用

參數

其中最有用的工具之一是為策略定義參數。如果您必須為每個策略的每個變化定義唯一的策略,可能會有數百個策略。解決這個問題的好方法是對策略進行參數化。這樣一來,您可以在分配時自定義策略,使一個策略定義適用於許多不同的用例。

倡議

下一個合乎邏輯的步驟是將多個定義收集在一個集合中。這樣您就可以將所有這些不同的定義分配給一個範圍,而不必重複單獨分配每一個定義。

初始化參數

最後,您可以為倡議添加參數,這些參數可以被繼承到個別策略中。這意味著您不必為倡議中包含的每個策略單獨分配參數。這樣可以節省大量時間,因為您只需定義幾個適用於多種不同參數的倡議,即可應用於多種不同方式的多個不同策略。

修復任務

那麼,當您有一個評估但發現資源不符合規範的策略時該怎麼辦?在這種情況下,您可以啟動修復任務來修復問題。這可能非常強大,但如果設置不正確,也可能非常危險。同樣地,有幾種方式可以定義這些任務,可以通過Azure Portal、PowerShell或Azure CLI進行。

Azure Portal

與以前一樣,您可以使用Azure Portal來探索修復任務的創建。如果發現沒有列出任何策略,請確保您既有deployIfNotExists策略,也有評估為非符合的策略,否則它們將不會顯示。

  1. 在Azure Portal中,搜索”Policy”
  2. 點擊左側的”Remediation”
  3. 點擊類型為”deployIfNotExists”且具有”non-compliant”資源的策略
  4. 新的修复任务页面上筛选要修复的资源,以限制任务的适用范围。
  5. 点击修复开始任务本身。

PowerShell

通过PowerShell创建修复任务非常简单。重要的是要记住,您必须使用deployIfNotExists策略。

PS51> Start-AzPolicyRemediation -Name 'remediationTask' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{assignmentID}'

Azure CLI

除了使用PowerShell之外,您还可以使用Azure CLI启动修复任务。对于这个任务,也是一样的。

> az policy remediation create --name remediationTask --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{assignmentID}'

摘要

使用Azure策略的优势在于,对于任何Azure订阅,您都可以定义任意数量的灵活策略来帮助您管理您的环境。此外,通过在如何构建策略、计划和参数方面投入时间、精力和思考,您可以创建一个定义明确且易于修复的设置。

考虑到Azure策略对任何Azure订阅都是免费的,花时间来实施您需要的策略是非常有意义的。考虑到创建和部署这些定义和策略的灵活性,它几乎可以适用于任何事物,并帮助您掌握环境的控制!

Source:
https://adamtheautomator.com/azure-policy/