다음을 통해 공유


빠른 시작: REST API를 사용하여 비규격 리소스를 식별하는 정책 할당 만들기

Azure의 규정 준수를 이해하는 첫 번째 단계는 리소스 상태를 식별하는 것입니다. 이 빠른 시작에서는 REST API를 사용하여 비준수 리소스를 식별하는 정책 할당을 만듭니다. 정책은 리소스 그룹에 할당되고 관리 디스크를 사용하지 않는 가상 머신을 감사합니다. 정책 할당을 만든 후 비준수 가상 머신을 식별합니다.

이 가이드에서는 REST API를 사용하여 Azure 환경 내에서 비규격 리소스를 식별하고 정책 할당을 만듭니다. 이 문서의 예에서는 PowerShell 및 Azure CLI az rest 명령을 사용합니다. Git Bash와 같은 Bash 셸에서 az rest 명령을 실행할 수도 있습니다.

기본 제공 정책 또는 이니셔티브 정의를 할당할 때 버전을 참조하는 것은 선택 사항입니다. 기본 제공 정의의 정책 할당은 기본적으로 최신 버전으로 지정되며 별도로 지정하지 않는 한 자동으로 부 버전 변경 내용을 상속합니다.

필수 조건

  • Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • 최신 버전의 PowerShell 또는 Git Bash와 같은 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: 할당을 만들 정책 정의 ID입니다.
  • nonComplianceMessages: 리소스가 비준수로 평가될 때 사용할 메시지를 설정합니다. 자세한 내용은 할당 비규격 메시지를 참조하세요.

Azure에 연결

Visual Studio Code 터미널 세션에서 Azure에 연결합니다. 구독이 두 개 이상인 경우 명령을 실행하여 구독에 대한 컨텍스트를 설정합니다. <subscriptionID> 를 Azure 구독 ID로 바꿉니다.

az login

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

이 예에서 Azure CLI az Rest 명령을 사용하므로 PowerShell을 사용하는 경우에도 az login을 사용합니다.

정책 할당 만들기

이 예에서는 정책 할당을 만들고 관리 디스크를 사용하지 않는 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 환경에서 규정 비준수 리소스를 식별하는 정책 정의를 할당했습니다.

리소스 준수의 유효성을 검사하는 정책을 할당하는 방법에 대해 자세히 알아보려면 자습서를 계속 진행합니다.