빠른 시작: 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 환경에서 규정 비준수 리소스를 식별하는 정책 정의를 할당했습니다.
리소스 준수의 유효성을 검사하는 정책을 할당하는 방법에 대해 자세히 알아보려면 자습서를 계속 진행합니다.