Azure Resource Graph 쿼리 언어 이해
Azure Resource Graph의 쿼리 언어는 다양한 연산자와 함수를 지원합니다. 각각은 KQL(Kusto Query Language)을 기반으로 작동합니다. Resource Graph에서 사용하는 쿼리 언어에 대해 알아보려면 KQL에 대한 자습서로 시작하세요.
이 문서에서는 Resource Graph에서 지원하는 언어 구성 요소에 대해 설명합니다.
Resource Graph 테이블
Resource Graph는 Azure Resource Manager 리소스 종류 및 해당 속성에 관해 저장하는 데이터에 대한 여러 테이블을 제공합니다. Resource Graph 테이블은 join
연산자와 함께 사용하여 관련 리소스 종류에서 속성을 가져올 수 있습니다.
Resource Graph 테이블은 join
버전을 지원합니다.
Resource Graph 테이블 | 다른 테이블을 join 할 수 있나요? |
설명 |
---|---|---|
AdvisorResources | 예 | Microsoft.Advisor 관련 리소스를 포함합니다. |
AlertsManagementResources | 예 | Microsoft.AlertsManagement 관련 리소스를 포함합니다. |
AppServiceResources | 예 | Microsoft.Web 관련 리소스를 포함합니다. |
AuthorizationResources | 예 | Microsoft.Authorization 관련 리소스를 포함합니다. |
AWSResources | 예 | Microsoft.AwsConnector 관련 리소스를 포함합니다. |
AzureBusinessContinuityResources | 예 | Microsoft.AzureBusinessContinuity 관련 리소스를 포함합니다. |
ChaosResources | 예 | Microsoft.Chaos 관련 리소스를 포함합니다. |
CommunityGalleryResources | 예 | Microsoft.Compute 관련 리소스를 포함합니다. |
ComputeResources | 예 | Microsoft.Compute Virtual Machine Scale Sets와 관련된 리소스를 포함합니다. |
DesktopVirtualizationResources | 예 | Microsoft.DesktopVirtualization 관련 리소스를 포함합니다. |
DnsResources | 예 | Microsoft.Network 관련 리소스를 포함합니다. |
EdgeOrderResources | 예 | Microsoft.EdgeOrder 관련 리소스를 포함합니다. |
ElasticsanResources | 예 | Microsoft.ElasticSan 관련 리소스를 포함합니다. |
ExtendedLocationResources | 예 | Microsoft.ExtendedLocation 관련 리소스를 포함합니다. |
FeatureResources | 예 | Microsoft.Features 관련 리소스를 포함합니다. |
GuestConfigurationResources | 예 | Microsoft.GuestConfiguration 관련 리소스를 포함합니다. |
HealthResourceChanges | 예 | Microsoft.Resources 관련 리소스를 포함합니다. |
HealthResources | 예 | Microsoft.ResourceHealth 관련 리소스를 포함합니다. |
InsightsResources | 예 | Microsoft.Insights 관련 리소스를 포함합니다. |
IoTSecurityResources | 예 | Microsoft.IoTSecurity 및 Microsoft.IoTFirmwareDefense 관련 리소스를 포함합니다. |
KubernetesConfigurationResources | 예 | Microsoft.KubernetesConfiguration 관련 리소스를 포함합니다. |
KustoResources | 예 | Microsoft.Kusto 관련 리소스를 포함합니다. |
MaintenanceResources | 예 | Microsoft.Maintenance 관련 리소스를 포함합니다. |
ManagedServicesResources | 예 | Microsoft.ManagedServices 관련 리소스를 포함합니다. |
MigrateResources | 예 | Microsoft.OffAzure 관련 리소스를 포함합니다. |
NetworkResources | 예 | Microsoft.Network 관련 리소스를 포함합니다. |
OrbitalResources | 예 | Microsoft.Orbital 관련 리소스를 포함합니다. |
PatchAssessmentResources | 예 | Azure Virtual Machines 패치 평가 Microsoft.Compute 및 Microsoft.HybridCompute 와 관련된 리소스를 포함합니다. |
PatchInstallationResources | 예 | Azure Virtual Machines 패치 설치 Microsoft.Compute 및 Microsoft.HybridCompute 와 관련된 리소스를 포함합니다. |
PolicyResources | 예 | Microsoft.PolicyInsights 관련 리소스를 포함합니다. |
RecoveryServicesResources | 예 | Microsoft.DataProtection 및 Microsoft.RecoveryServices 관련 리소스를 포함합니다. |
ResourceChanges | 예 | Microsoft.Resources 관련 리소스를 포함합니다. |
ResourceContainerChanges | 예 | Microsoft.Resources 관련 리소스를 포함합니다. |
ResourceContainers | 예 | 관리 그룹(Microsoft.Management/managementGroups ), 구독(Microsoft.Resources/subscriptions ) 및 리소스 그룹(Microsoft.Resources/subscriptions/resourcegroups ) 리소스 종류 및 데이터를 포함합니다. |
리소스 | 예 | 쿼리에 테이블이 정의되지 않은 경우 기본 테이블입니다. 대부분의 Resource Manager 리소스 종류 및 속성이 포함되어 있습니다. |
SecurityResources | 예 | Microsoft.Security 관련 리소스를 포함합니다. |
ServiceFabricResources | 예 | Microsoft.ServiceFabric 관련 리소스를 포함합니다. |
ServiceHealthResources | 예 | Microsoft.ResourceHealth/events 관련 리소스를 포함합니다. |
SpotResources | 예 | Microsoft.Compute 관련 리소스를 포함합니다. |
SupportResources | 예 | Microsoft.Support 관련 리소스를 포함합니다. |
TagsResources | 예 | Microsoft.Resources/tagnamespaces 관련 리소스를 포함합니다. |
리소스 종류가 포함된 테이블 목록을 보려면 Azure Resource Graph 테이블 및 리소스 종류 참조로 이동합니다.
참고 항목
Resources
는 기본 테이블입니다. Resources
테이블을 쿼리하는 동안 join
또는 union
을 사용하지 않는 한 테이블 이름을 제공할 필요가 없습니다. 그러나 권장되는 방법은 항상 쿼리에 초기 테이블을 포함하는 것입니다.
각 테이블에서 사용할 수 있는 리소스 종류를 검색하려면 포털의 Resource Graph 탐색기를 사용합니다. 또는 <tableName> | distinct type
쿼리를 사용하여 해당 환경에 존재하는, 지정된 Resource Graph 테이블이 지원하는 리소스 종류의 목록을 가져올 수 있습니다.
다음 쿼리는 단순한 join
을 보여 줍니다. 쿼리 결과는 열을 함께 혼합하며, 조인된 테이블의 모든 중복 열 이름(이 예에서는 ResourceContainers)에는 1이 추가됩니다. ResourceContainers 테이블에는 구독과 리소스 그룹 모두에 대한 종류가 있으므로 각 종류를 Resources
테이블의 리소스에 조인하는 데 사용할 수 있습니다.
Resources
| join ResourceContainers on subscriptionId
| limit 1
다음 쿼리는 join
의 더 복잡한 사용법을 보여 줍니다. 먼저 쿼리는 project
를 사용하여 Azure Key Vault 자격 증명 모음 리소스 종류에 대해 Resources
에서 필드를 가져옵니다. 다음 단계에서는 join
을 사용하여 ResourceContainers와 결과를 병합합니다. 이 경우의 형식은 첫 번째 테이블의 project
및 조인된 테이블의 project
모두에 있는 속성에 대한 구독입니다. 속성이 이미 Resources
에서 프로젝션되었으므로 필드 이름을 바꾸면 join
이 이를 name1으로 추가하는 것을 방지할 수 있습니다. 쿼리 결과는 키 자격 증명 모음의 유형, 이름, 위치 및 리소스 그룹과 해당 모음이 있는 구독 이름을 표시하는 단일 키 자격 증명 모음입니다.
Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1
참고 항목
project
를 사용하여 join
결과를 제한하는 경우 join
에서 두 테이블의 관계를 설정하기 위해 사용하는 subscriptionId 속성을 project
에 포함해야 합니다.
확장 속성
미리 보기 기능으로서, Resource Graph의 일부 리소스 종류에는 Azure Resource Manager에서 제공하는 속성 이외에도 쿼리에 사용할 수 있는 추가 형식 관련 속성이 있습니다. 확장 속성이라고 하는 이 값의 집합은 properties.extended
의 지원되는 리소스 종류에 있습니다. 확장 속성이 있는 리소스 종류를 표시하려면 다음 쿼리를 사용합니다.
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
예: instanceView.powerState.code
를 기준으로 가상 컴퓨터 수 가져오기:
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
Resource Graph 사용자 지정 언어 요소
공유 쿼리 구문(미리 보기)
미리 보기 기능으로서, 공유 쿼리는 Resource Graph 쿼리에서 직접 액세스할 수 있습니다. 이 시나리오에서는 표준 쿼리를 공유 쿼리로 만들고 다시 사용할 수 있습니다. Resource Graph 쿼리 내에서 공유 쿼리를 호출하려면 {{shared-query-uri}}
구문을 사용합니다. 공유 쿼리의 URI는 해당 쿼리의 설정 페이지에 있는 공유 쿼리의 리소스 ID입니다. 이 예에서 공유 쿼리 URI는 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS
입니다.
이 URI는 다른 쿼리에서 참조하려는 구독, 리소스 그룹 및 공유 쿼리의 전체 이름을 가리킵니다. 이 쿼리는 자습서: 쿼리 만들기 및 공유에서 만든 쿼리와 동일합니다.
참고 항목
공유 쿼리를 참조하는 쿼리는 공유 쿼리로 저장할 수 없습니다.
예 1: 공유 쿼리만 사용:
이 Resource Graph 쿼리의 결과는 공유 쿼리에 저장된 쿼리와 동일합니다.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
예 2: 공유 쿼리를 더 큰 쿼리의 일부로 포함:
이 쿼리는 먼저 공유 쿼리를 사용한 다음 limit
을 사용하여 결과를 추가로 제한합니다.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
지원되는 KQL 언어 요소
Resource Graph는 모든 KQL 데이터 형식, 스칼라 함수, 스칼라 연산자 및 집계 함수의 하위 집합을 지원합니다. Resource Graph는 특정 테이블 형식 연산자를 지원하며, 그 중 일부는 동작이 서로 다릅니다.
지원되는 테이블 형식/최상위 수준 연산자
Resource Graph에서 지원하는 KQL 테이블 형식 연산자와 특정 샘플의 목록은 다음과 같습니다.
KQL | Resource Graph 샘플 쿼리 | 주의 |
---|---|---|
count | 키 자격 증명 모음 계수 | |
distinct | 스토리지를 포함하는 리소스 표시 | |
extend | OS 유형별 가상 머신 개수 계산 | |
join | 구독 이름이 있는 키 자격 증명 모음 | 지원되는 조인 유형: innerunique, inner, leftouter 및 fullouter. 단일 쿼리에서는 세 개의 join 으로 제한되며 그중 하나는 교차 테이블 join 일 수 있습니다. 모든 교차 테이블 join 사용이 Resource와 ResourceContainers 사이에 있는 경우 세 개의 교차 테이블 join 이 허용됩니다. 브로드캐스트 조인과 같은 사용자 지정 조인 전략은 허용되지 않습니다. join 을 사용할 수 있는 테이블은 Resource Graph 테이블을 참조하세요. |
limit | 모든 공용 IP 주소 나열 | take 의 동의어입니다. Skip에서 작동하지 않습니다. |
mvexpand | 레거시 연산자. mv-expand 를 대신 사용합니다. RowLimit. 최댓값은 2,000입니다. 기본값은 128입니다. |
|
mv-expand | 특정 쓰기 위치를 사용하여 Azure Cosmos DB 나열 | RowLimit. 최댓값은 2,000입니다. 기본값은 128입니다. 단일 쿼리의 mv-expand 은 3개로 제한됩니다. |
order | 리소스를 이름별로 나열 | sort 의 동의어 |
parse | 네트워크 인터페이스의 가상 네트워크 및 서브넷 가져오기 | 속성이 있는 경우 parse 를 사용하는 대신 속성에 직접 액세스하는 것이 적합합니다. |
project | 리소스를 이름별로 나열 | |
project-away | 결과에서 열 제거 | |
sort | 리소스를 이름별로 나열 | order 의 동의어 |
summarize | Azure 리소스 개수 계산 | 간소화된 첫 페이지만 |
take | 모든 공용 IP 주소 나열 | limit 의 동의어입니다. Skip에서 작동하지 않습니다. |
top | 이름 및 해당 OS 유형별로 처음 5개의 가상 머신 표시 | |
union | 두 쿼리의 결과를 단일 결과로 결합 | 단일 테이블 허용: | union [kind= inner|outer] [withsource=ColumnName] Table 단일 쿼리에서는 3개의 union 레그로 제한됩니다. union 레그 테이블의 유사 항목 확인은 허용되지 않습니다. 단일 테이블 내에서 사용하거나 Resources 테이블과 ResourceContainers 테이블 간에 사용할 수 있습니다. |
where | 스토리지를 포함하는 리소스 표시 |
단일 Resource Graph SDK 쿼리에는 기본적으로 join
연산자 3개와 mv-expand
연산자 3개로 제한됩니다. 도움말 + 지원을 통해 테넌트에 대한 이 제한을 늘리도록 요청할 수 있습니다.
쿼리 열기 포털 환경을 지원하기 위해 Azure Resource Graph 탐색기는 Resource Graph SDK보다 전역 제한이 높습니다.
참고 항목
한도인 1을 초과하면 테이블을 오른쪽 테이블로 여러 번 참조할 수 없습니다. 그렇게 하면 DisallowedMaxNumberOfRemoteTables 코드와 함께 오류가 발생합니다.
쿼리 범위
쿼리에서 리소스가 반환되는 구독 또는 관리 그룹의 범위는 기본적으로 권한 있는 사용자의 컨텍스트에 따라 구독 목록으로 설정됩니다. 관리 그룹 또는 구독 목록이 정의되지 않은 경우 쿼리 범위는 모든 리소스이며 Azure Lighthouse 위임 리소스를 포함합니다.
쿼리할 구독 또는 관리 그룹 목록을 수동으로 정의하여 결과의 범위를 변경할 수 있습니다. 예를 들어 REST API managementGroups
속성은 관리 그룹의 이름과 다른 관리 그룹 ID를 사용합니다. managementGroups
가 지정되면 지정된 관리 그룹 계층 구조 내 또는 아래에 있는 처음 10,000개 구독의 리소스가 포함됩니다. managementGroups
는 subscriptions
와 동시에 사용할 수 없습니다.
예: ID가 myMG
인 My Management Group
이라는 관리 그룹 계층 구조 내의 모든 리소스를 쿼리합니다.
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
요청 본문
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
AuthorizationScopeFilter
매개 변수를 사용하면 상위 범위에서 상속되는 AuthorizationResources
테이블의 Azure Policy 할당 및 Azure RBAC(Azure 역할 기반 액세스 제어) 역할 할당을 나열할 수 있습니다. AuthorizationScopeFilter
매개 변수는 PolicyResources
및 AuthorizationResources
테이블에 대해 다음 값을 허용합니다.
- AtScopeAndBelow(할당되지 않은 경우 기본값): 할당된 범위 및 모든 자식 범위에 대한 할당을 반환합니다.
- AtScopeAndAbove: 할당된 범위와 모든 부모 범위에 대한 할당을 반환하지만 자식 범위는 반환하지 않습니다.
- AtScopeAboveAndBelow: 할당된 범위, 모든 부모 범위 및 모든 자식 범위에 대한 할당을 반환합니다.
- AtScopeExact: 할당된 범위에 대한 할당만 반환합니다. 부모 또는 자식 범위는 포함되지 않습니다.
참고 항목
AuthorizationScopeFilter
매개 변수를 사용하려면 요청에 2021-06-01-preview 이상의 API 버전을 사용해야 합니다.
예: myMG 관리 그룹 및 테넌트 루트(부모) 범위에서 모든 정책 할당을 가져옵니다.
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
요청 본문 샘플
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
예: mySubscriptionId 구독, 관리 그룹 및 테넌트 루트 범위에서 모든 정책 할당을 가져옵니다.
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
요청 본문 샘플
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
이스케이프 문자
.
또는 $
를 포함하는 일부 속성 이름은 쿼리에서 래핑하거나 이스케이프해야 합니다. 그렇지 않으면 속성 이름이 올바르게 해석되고 올바른 결과를 제공하지 않습니다.
점(
.
): 대괄호를 사용하여 속성 이름['propertyname.withaperiod']
를 묶습니다.odata.type 속성을 래핑하는 예제 쿼리:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
달러 기호(
$
): 속성 이름의 문자를 이스케이프합니다. 사용되는 이스케이프 문자는 Resource Graph를 실행하는 셸에 따라 다릅니다.Bash: 백슬래시(
\
)를 이스케이프 문자로 사용합니다.Bash에서 $type 속성을 이스케이프하는 예제 쿼리:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
cmd: 달러 기호(
$
) 문자를 이스케이프 처리하지 마세요.PowerShell: 백틱(
`
)을 이스케이프 문자로 사용합니다.PowerShell에서 속성 $type을 이스케이프하는 예제 쿼리:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
다음 단계
- Azure Resource Graph 쿼리 언어 초기 쿼리 및 고급 쿼리.
- Azure 리소스 탐색 방법에 대해 자세히 알아봅니다.