Azure 리소스의 규정 준수 데이터 가져오기
Azure Policy의 가장 큰 혜택 중 하나는 구독 및 구독의 데이터 그룹에 있는 리소스에 제공하는 정보 또는 컨트롤입니다. 이 컨트롤은 리소스가 잘못된 위치에 만들어지는 것을 방지하거나, 일반적이고 일관된 태그 사용을 적용하거나, 적절한 구성 및 설정에 대한 기존 리소스를 감사할 수 있습니다. 모든 경우에 Azure Policy는 환경의 준수 상태를 이해할 수 있는 데이터를 생성합니다.
규정 준수 데이터를 검토하기 전에 Azure Policy의 준수 상태를 이해하는 것이 중요합니다.
정책 및 이니셔티브 할당에 의해 생성된 준수 정보에 액세스할 수 있는 여러 가지 방법이 있습니다.
준수를 보고하는 메서드를 살펴보기 전에 호환성 정보가 업데이트되는 시기 및 평가 주기를 트리거하는 빈도 및 이벤트를 살펴보겠습니다.
평가 트리거
완료된 평가 주기의 결과는 PolicyStates
및 PolicyEvents
작업을 통해 Microsoft.PolicyInsights
리소스 공급자에서 사용할 수 있습니다. Azure Policy Insights REST API의 작업에 대한 자세한 내용은 Azure Policy Insights를 참조하세요.
할당된 정책 및 이니셔티브의 평가는 다양한 이벤트의 결과로 발생합니다.
- 정책 또는 이니셔티브는 범위에 새로 할당됩니다. 할당이 정의된 범위에 적용되는 데 약 5분이 걸리고 새로 할당된 정책 또는 이니셔티브에 대해 해당 리소스에 대한 평가 주기가 시작됩니다. 사용된 효과에 따라 리소스는 준수, 비준수, 예외 또는 알 수 없음으로 표시됩니다. 대규모의 리소스에 대해 평가되는 대규모 정책 또는 이니셔티브에는 시간이 걸릴 수 있으므로 평가 주기가 완료될 때 미리 정의된 기대치가 없습니다. 완료되면 업데이트된 준수 결과를 포털 및 SDK(소프트웨어 개발 키트)에서 사용할 수 있습니다.
- 범위에 새로 할당된 정책 또는 이니셔티브는 업데이트됩니다. 이 시나리오에 대한 평가 주기 및 타이밍은 범위에 대한 새 할당과 동일합니다.
- 리소스는 Azure Resource Manager, REST API 또는 지원되는 SDK를 통해 할당된 범위 내에 배포되거나 업데이트됩니다. 이 시나리오에서 효과 이벤트(추가, 감사, 거부, 배포) 및 개별 리소스에 대한 호환 상태 정보는 약 15분 후에 포털 및 SDK에서 사용할 수 있습니다. 이 이벤트는 다른 리소스에 대한 평가로 이어지지 않습니다.
- 구독(리소스 종류
Microsoft.Resources/subscriptions
)은 구독 리소스 종류를 대상으로 하는 할당된 정책 정의를 사용하여 관리 그룹 계층 구조 내에서 만들어지거나 이동됩니다. 구독 지원 효과(감사, auditIfNotExist, deployIfNotExists, 수정), 로깅 및 모든 수정 작업의 평가에는 약 30분이 소요됩니다. - 정책 예외가 생성, 업데이트 또는 삭제됩니다. 이 시나리오에서는 정의된 예외 범위에 대해 해당 할당이 평가됩니다.
- 표준 준수 평가 주기입니다. 24시간마다 한 번씩 할당은 자동으로 다시 계산됩니다. 많은 리소스의 대규모 정책 또는 이니셔티브에는 시간이 걸릴 수 있으므로 평가 주기가 완료되는 시기에 대한 미리 정의된 기대는 없습니다. 작업이 완료되면 업데이트된 준수 결과는 포털 및 SDK에서 지원됩니다.
- 머신 구성 리소스 공급자는 관리되는 리소스를 통해 규정 준수 세부 정보로 업데이트됩니다.
- 주문형 검사입니다.
참고 항목
기본적으로 Azure Policy는 평가할 수 있는 구독 및 리소스 그룹을 제외한 리소스 공급자의 Microsoft.Resources
모든 리소스를 정책 평가에서 제외합니다.
주문형 평가 검사
구독 또는 리소스 그룹에 대한 평가 검사는 REST, Azure CLI, Azure PowerShell, Visual Studio Code용 Azure Policy 확장 또는 Azure Policy 준수 검사 GitHub 작업으로 시작할 수 있습니다. 주문형 검사는 리소스가 할당된 모든 정책에 대해 평가되기 때문에 실행하는 데 시간이 오래 걸리는 비동기 프로세스입니다.
참고 항목
모든 Azure 리소스 공급자가 주문형 평가 검사를 지원하지는 않습니다. 예를 들어 AVNM(Azure Virtual Network Manager)은 현재 수동 트리거 또는 표준 정책 준수 평가 주기(일일 검사)를 지원하지 않습니다.
REST를 사용한 주문형 평가 검사
비동기 프로세스이므로 REST 엔드포인트는 검사가 응답을 완료할 때까지 기다리지 않습니다. 대신, URI를 제공하여 요청된 평가의 상태를 쿼리합니다.
각 REST API URI에는 사용자가 자신의 값으로 대체해야 하는 변수가 있습니다.
-
{resourceGroupName}
: 리소스 그룹의 이름으로 교체합니다. -
{subscriptionId}
: 구독 ID로 대체합니다.
검사는 구독 또는 리소스 그룹에서 리소스의 평가를 지원합니다. 다음 URI 구조를 사용하여 REST API POST 명령으로 범위별 검사를 시작합니다.
다음 명령을 사용하여 구독을 평가합니다. 정책 상태 - 평가 시도 옵션을 사용하여 구독 평가 트리거의 브라우저에서 명령을 실행할 수 있습니다.
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
다음 명령을 사용하여 리소스 그룹을 평가합니다. 정책 상태 - Try it 옵션을 사용하여 리소스 그룹 평가 트리거의 브라우저에서 명령을 실행할 수 있습니다.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
구독 및 리소스 그룹 REST API 호출은 202 수락됨 상태를 반환합니다. 응답 헤더에 포함된 속성은 location
다음과 같은 형식입니다.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01
{ResourceContainerGUID}
는 요청한 범위에 대해 정적으로 생성됩니다. 범위가 이미 주문형 검사를 실행하고 있는 경우 새 검사는 시작되지 않습니다. 대신 새 요청은 상태에 대해 동일한 {ResourceContainerGUID}
location
URI를 제공합니다. URI에 대한 location
REST API GET 명령은 평가가 진행되는 동안 202 Accepted를 반환합니다. 평가 검사가 완료되면 200 OK 상태가 반환됩니다. 완료된 검사의 본문은 다음과 같은 상태가 succeeded
있는 JSON 응답입니다.
Azure CLI를 사용한 주문형 평가 검사
az policy state trigger-scan 명령으로 호환성 검사가 시작됩니다.
기본적으로 az policy state trigger-scan
은 현재 구독의 모든 리소스에 대한 평가를 시작합니다. 특정 리소스 그룹에 대한 평가를 시작하려면 매개 변수를 resource-group
사용합니다. 다음 예제에서는 리소스 그룹에 대한 현재 구독에서 규정 준수 검사를 시작합니다. 리소스 그룹의 이름으로 대체 resourceGroupName
합니다.
az policy state trigger-scan --resource-group "resourceGroupName"
매개 변수를 계속 no-wait
하기 전에 비동기 프로세스가 완료되기를 기다리지 않도록 선택할 수 있습니다.
Azure PowerShell을 사용한 주문형 평가 검사
Start-AzPolicyComplianceScan cmdlet을 사용하여 준수 검사가 시작됩니다.
기본적으로 Start-AzPolicyComplianceScan
은 현재 구독의 모든 리소스에 대한 평가를 시작합니다. 특정 리소스 그룹에 대한 평가를 시작하려면 매개 변수를 ResourceGroupName
사용합니다. 다음 예제에서는 리소스 그룹에 대한 현재 구독에서 규정 준수 검사를 시작합니다. 리소스 그룹의 이름으로 대체 resourceGroupName
합니다.
Start-AzPolicyComplianceScan -ResourceGroupName 'resourceGroupName'
결과 출력을 제공하기 전에 비동기 호출이 완료될 때까지 PowerShell이 기다리게 하거나 백그라운드에서 작업으로 실행되게 할 수 있습니다. PowerShell 작업을 사용하여 백그라운드에서 준수 검사를 실행하려면 매개 변수를 AsJob
사용하고 이 예제와 같이 값을 개체로 $job
설정합니다.
$job = Start-AzPolicyComplianceScan -AsJob
$job
개체를 확인하여 작업 상태를 확인할 수 있습니다. 작업은 Microsoft.Azure.Commands.Common.AzureLongRunningJob
유형입니다.
$job
개체에서 Get-Member
를 사용하여 사용 가능한 속성과 메서드를 확인합니다.
규정 준수 검사를 실행하는 동안 $job
개체 출력을 확인하면 다음과 같은 결과가 출력됩니다.
$job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Long Running O... AzureLongRunni... Running True localhost Start-AzPolicyCompliance...
규정 준수 검사가 완료되면 속성이 State
Completed로 변경됩니다.
Visual Studio Code를 사용한 주문형 평가 검사
Visual Studio Code에 대한 Azure Policy 확장은 특정 리소스에 대한 평가 검사를 실행할 수 있습니다. 이 검색은 Azure PowerShell 및 REST 메서드와 달리 동기 프로세스입니다. 자세한 내용과 단계는 VS Code 확장을 사용한 주문형 평가를 참조하세요.
GitHub Actions를 사용한 주문형 평가 검사
Azure Policy 규정 준수 검사 작업을 사용하면 하나 또는 여러 리소스, 리소스 그룹 또는 구독의 GitHub 워크플로에서 주문형 평가 검사를 트리거하고, 리소스의 규정 준수 상태에 따라 워크플로 경로를 제어할 수 있습니다. 또한 예정된 시간에 실행되어 편리한 시간에 최신 규정 준수 상태를 가져오도록 워크플로를 구성할 수 있습니다. 필요에 따라 GitHub Actions는 추가 분석 또는 보관을 위해 검사한 리소스의 규정 준수 상태에 대한 보고서를 생성할 수도 있습니다.
다음 예제에서는 구독의 규정 준수 검사를 실행합니다.
scopes
구독 ID를 사용합니다.
on:
schedule:
- cron: '0 8 * * *' # runs every morning 8am
jobs:
assess-policy-compliance:
runs-on: ubuntu-latest
steps:
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/aaaa6a6a-bb7b-cc8c-dd9d-eeeeee0e0e0e
자세한 내용 및 워크플로 샘플은 Azure Policy 준수 검사 리포지토리에 대한 GitHub Actions을 참조하세요.
포털
Azure Portal에서는 환경에서 준수 상태를 시각화하고 이해하는 그래픽 환경을 보여줍니다. 정책 페이지에서 개요 옵션은 정책 및 이니셔티브 모두에 사용할 수 있는 준수 범위에 대한 세부 정보를 제공합니다. 준수 상태 및 할당별 개수뿐만 아니라 지난 7일 동안의 준수를 표시하는 차트가 포함됩니다. 준수 페이지에는 차트를 제외한 동일한 정보가 대부분 포함되어 있지만 더 많은 필터링 및 정렬 옵션을 제공합니다.
정책 또는 이니셔티브가 서로 다른 범위에 할당될 수 있으므로 테이블에는 각 할당의 범위 및 할당된 정의의 형식이 포함됩니다. 각 할당의 비준수 리소스 및 비준수 정책 수도 제공됩니다. 테이블에서 정책 또는 이니셔티브를 선택하면 해당하는 특정 배포에 대한 준수를 자세히 살펴봅니다.
리소스 준수 탭의 리소스 목록에는 현재 할당에 대한 기존 리소스의 평가 상태가 표시됩니다. 탭에는 기본적으로 비준수로 표시되지만 필터링할 수 있습니다. 리소스 생성 요청에 의해 트리거되는 이벤트(추가, 감사, 거부, 배포, 수정)는 이벤트 탭에 표시됩니다.
리소스 공급자 모드 리소스의 경우 리소스 규정 준수 탭에서 리소스를 선택하거나 행을 마우스 오른쪽 단추로 클릭하고 규정 준수 세부 정보 보기를 선택하면 구성 요소 규정 준수 세부 정보가 열립니다. 이 페이지에는 이 리소스, 이벤트, 구성 요소 이벤트 및 변경 기록에 할당된 정책을 보기 위한 탭도 있습니다.
리소스 규정 준수 페이지로 돌아가 자세한 세부 정보를 수집하려는 이벤트의 행을 길게 선택(또는 마우스 오른쪽 단추로 클릭)하고 활동 로그 표시를 선택합니다. 활동 로그 페이지가 열리고 할당 및 이벤트에 대한 세부 정보를 보여 주는 검색으로 미리 필터링됩니다. 활동 로그는 해당 이벤트에 대한 추가 컨텍스트 및 정보를 제공합니다.
참고 항목
준수 결과는 Azure Resource Graph 쿼리를 사용하여 포털에서 내보낼 수 있습니다.
명령줄
포털에서 사용할 수 있는 동일한 정보는 REST API, Azure CLI 및 Azure PowerShell을 사용하여 검색할 수 있습니다.
REST API
REST API에 대한 자세한 내용은 Azure Policy 참조를 참조하세요. REST API 참조 페이지에는 브라우저에서 명령을 실행할 수 있는 각 작업에 대해 Try It 옵션이 있습니다. Azure CLI 또는 기본 REST API 클라이언트를 사용하여 명령을 실행할 수도 있습니다.
결과 요약
REST API를 사용하면 컨테이너, 정의 또는 할당별로 요약할 수 있습니다. Azure Policy Insight의 구독에 대한 요약을 사용하여 구독 수준에서 요약의 예는 다음과 같습니다.
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
출력은 구독을 요약하고 요약된 규정 준수는 해당 및 nonCompliantPolicies
속성에 nonCompliantResources
있습니다. 이 요청은 비준수 번호를 구성하는 각 할당과 각 할당에 대한 정의 정보를 포함하여 다른 세부 정보를 제공합니다. 계층 구조의 각 정책 개체는 해당 수준에서 자세한 정보를 얻는 데 사용할 수 있는 개체를 제공합니다 queryResultsUri
.
리소스 쿼리
이전 예제 value.policyAssignments.policyDefinitions.results.queryResultsUri
에서는 특정 정책 정의에 대한 모든 비준수 리소스에 대한 샘플 URI를 제공합니다. 값에서 $filter
ComplianceState는 같음(eq)NonCompliant
PolicyAssignmentId
이고 정책 정의에 대해 지정된 다음 PolicyDefinitionId 자체에 지정됩니다. 필터에 PolicyAssignmentId
포함하는 이유는 범위가 다른 여러 정책 또는 이니셔티브 할당에 있을 수 있기 PolicyDefinitionId
때문입니다. 둘 다 PolicyAssignmentId
PolicyDefinitionId
지정하여 찾고 있는 결과에서 명시적일 수 있습니다.
PolicyStates
이전에는 지난 24시간의 시간 및 기간을 자동으로 설정하는 from
to
데 사용latest
했습니다.
값의 queryResultsUri
예:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2025-01-01 04:28:22Z&$to=2025-02-10 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'
이벤트 보기
리소스가 생성되거나 업데이트되면 정책 평가 결과가 생성됩니다. 생성된 결과를 정책 이벤트라고 합니다. 다음 URI를 사용하여 구독과 관련된 최신 정책 이벤트를 볼 수 있습니다.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
정책 이벤트 쿼리에 대한 자세한 내용은 Azure Policy 이벤트를 참조 하세요.
Azure CLI
Azure Policy에 대한 Azure CLI 명령 그룹은 REST 또는 Azure PowerShell에서 사용할 수 있는 대부분의 작업을 다룹니다. 사용 가능한 명령의 전체 목록은 az policy를 참조하세요.
비준수 리소스 수가 가장 많은 최상위 할당 정책에 대한 상태 요약을 가져옵니다.
az policy state summarize --top 1
가장 최근에 평가된 리소스의 상태 레코드를 가져옵니다. 출력 기본값은 타임스탬프의 내림차순입니다.
az policy state list --top 1
모든 비준수 가상 네트워크 리소스에 대한 세부 정보를 가져옵니다.
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
특정 날짜 이후에 발생한 비준수 가상 네트워크 리소스와 관련된 이벤트를 가져옵니다.
from
ISO 8601 형식의 날짜와 함께 매개 변수를 사용합니다.
az policy event list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2025-02-10T00:00:00Z'
Azure PowerShell
Azure Cloud Shell에서 다음 명령을 실행할 수 있습니다.
비준수 리소스 수가 가장 많은 최상위 할당 정책에 대한 상태 요약을 가져옵니다.
Get-AzPolicyStateSummary -Top 1
가장 최근에 평가된 리소스의 상태 레코드를 가져옵니다. 출력 기본값은 내림차순으로 타임스탬프입니다.
Get-AzPolicyState -Top 1
모든 비준수 가상 네트워크 리소스에 대한 세부 정보를 가져옵니다.
Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
특정 날짜 이후에 발생한 비준수 가상 네트워크 리소스와 관련된 이벤트를 가져옵니다.
From
ISO 8601 형식의 날짜와 함께 매개 변수를 사용합니다.
Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2025-02-10'
출력에는 Azure PowerShell cmdletGet-AzADUser
을 사용하여 특정 사용자를 가져오는 데 사용할 수 있는 속성이 포함 PrincipalOid
됩니다. 이전 명령에서 가져온 값으로 바꿉습니다 {principalOid}
.
(Get-AzADUser -ObjectId {principalOid}).DisplayName
Azure Monitor 로그
활동 Log Analytics 솔루션에서 구독에 연결된 Log Analytics 작업 영역AzureActivity
이 있는 경우 Kusto 쿼리 및 AzureActivity
테이블을 사용하여 새 리소스 및 업데이트된 리소스의 평가에서 비준수 결과를 볼 수도 있습니다. Azure Monitor 로그의 세부 정보를 사용하여 비준수 여부를 감시하도록 경고를 구성할 수 있습니다.
Azure Resource Graph
준수 레코드는 ARG(Azure Resource Graph)에 저장됩니다. ARG 쿼리에서 데이터를 내보내 관심 있는 범위와 정책을 기반으로 사용자 지정 대시보드를 구성할 수 있습니다. ARG를 통해 준수 데이터를 내보내려면 샘플 쿼리를 검토합니다.
다음 단계
- Azure Policy 샘플에서 예제를 검토합니다.
- Azure Policy 정의 구조를 검토합니다.
- 정책 효과 이해를 검토합니다.
- 프로그래밍 방식으로 정책을 만드는 방법을 이해합니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.
- Azure 관리 그룹으로 리소스 구성을 포함하는 관리 그룹을 검토합니다.