共用方式為


快速入門:使用 REST API 建立原則指派,以識別不符合規範的資源

了解 Azure 中合規性的第一個步驟是識別您資源的狀態。 在本快速入門中,您將使用 REST API 來建立一個原則指派,以識別不符合規範的資源。 此原則會指派給資源群組,且其會稽核不使用受控磁碟的虛擬機器。 建立原則指派之後,您將識別不符合規範的虛擬機器。

本指南使用 REST API 來建立原則指派,以及識別 Azure 環境中不符合規範的資源。 本文中的範例會使用 PowerShell 和 Azure CLI az rest 命令。 您也可以從 Bash 殼層 (例如 Git Bash) 執行 az rest 命令。

指派內建原則或計畫定義時,您可以選擇參考版本。 除非另有指定,否則內建定義的原則指派會預設為最新版本,並自動繼承次要版本變更。

必要條件

  • 如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶
  • 最新版本的 PowerShell 或 Bash 殼層 (例如 Git Bash)。
  • 最新版的 Azure CLI
  • Visual Studio Code \(英文\)。
  • 其中至少有一個虛擬機器不使用受控磁碟的資源群組。

檢閱 REST API 語法

有兩個元素可執行 REST API 命令:REST API URI 和要求本文。 如需詳細資訊,請移至原則指派 - 建立

以下範例顯示了用於建立原則定義的 REST API URI 語法。

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope:範圍可決定對哪些資源或資源群組強制執行原則指派。 此範圍可包含管理群組到個別資源。 以下列其中一種模式取代 {scope}
    • 管理群組:/providers/Microsoft.Management/managementGroups/{managementGroup}
    • 訂用帳戶:/subscriptions/{subscriptionId}
    • 資源群組:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • 資源:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName:為您的指派建立原則指派名稱。 該名稱會包含在原則指派的 policyAssignmentId 屬性中。

以下範例是用於建立要求本文檔案的 JSON。

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName:原則指派的顯示名稱。
  • description:可用來新增原則指派的相關內容。
  • policyDefinitionId:要用於建立指派的原則定義識別碼。
  • nonComplianceMessages:設定當資源被評估為不符合規範時要使用的訊息。 如需詳細資訊,請參閱指派不符合規範訊息

連接到 Azure

從 Visual Studio Code 終端機工作階段中連線到 Azure。 如果您有多個訂用帳戶,請執行命令來設定您訂用帳戶的內容。 使用您的 Azure 訂用帳戶識別碼來取代 <subscriptionID>

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

即使您使用的是 PowerShell,也請使用 az login,因為範例使用 Azure CLI az rest 命令。

建立原則指派

在本範例中,您會建立一個原則指派,並且指派稽核不是使用受控磁碟的 VM 定義。

需要要求本文才能建立指派。 將下列 JSON 儲存在一個名為 request-body.json 的檔案中。

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

若要在現有的資源群組範圍中建立您的原則指派,請將下列 REST API URI 與要求本文檔案一起使用。 請將 {subscriptionId}{resourceGroupName} 取代為您的值。 該命令會在您的殼層中顯示 JSON 輸出。

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

在 PowerShell 中,需要使用反引號 (`) 來逸出 at sign (@) 以指定檔名。 在像 Git Bash 這樣的 Bash 殼層中,省略反引號。

如需詳細資訊,請移至原則指派 - 建立

識別不符合規範的資源

新原則指派的合規性狀態需要幾分鐘的時間才會生效,而且其會提供原則狀態的相關結果。 您可以使用 REST API 來顯示此原則指派不符合規範的資源,且輸出採用 JSON 格式。

若要識別不符合規範的資源,請執行下列命令。 將 {subscriptionId}{resourceGroupName} 取代為您在建立原則指派時所使用的值。

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

filter 可查詢被評估為不符合您透過原則指派所建立名為 audit-vm-managed-disks 的原則定義規範的資源。 再次注意,反引號是用來在篩選條件中逸出貨幣符號 ($)。 對於 Bash 用戶端,反斜線 (\) 是常見的逸出字元。

您的結果類似下列範例:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

如需詳細資訊,請移至原則狀態 - 列出資源群組的查詢結果

清除資源

若要移除原則指派,請使用以下命令。 將 {subscriptionId}{resourceGroupName} 取代為您在建立原則指派時所使用的值。 該命令會在您的殼層中顯示 JSON 輸出。

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

您可以使用以下命令來驗證原則指派是否已刪除。 您的殼層中會顯示一則訊息。

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

如需詳細資訊,請移至原則指派 - 刪除原則指派 - 取得

下一步

在這個快速入門中,您指派原則定義以識別 Azure 環境中的不相容資源。

若要深入了解如何指派驗證資源合規性的原則,請繼續進行教學課程。