Azure Resource Graph 및 PowerShell 생존 가이드.
11436 단어 powershellkqlazure
PowerShell을 사용하여 Azure Resource Graph에 대한 KQL 요청을 관리하는 방법을 살펴보겠습니다.
AZ 리소스 그래프 모듈
AZ PowerShell 모듈에는 포함되지 않았습니다. 당신은 설치해야합니다
Install-Module -Name Az.ResourceGraph -Scope CurrentUser
이 cmdlet을 설치합니다.
마지막 4개의 cmdlet을 사용하면 기록된 쿼리를 관리할 수 있으며 첫 번째 cmdlet은 PowerShell에서 Azure Graph(Resource Graph, Monitor 등)를 직접 쿼리하는 데 사용됩니다.
KQL의 오류 관리
KQL 요청이 구문 오류와 같은 오류를 반환하면 어떻게 됩니까? PowerShell 예외가 아닌 KQL 오류로 출력됩니다. 이 상태에서는 표준 Catch/Try를 사용하여 예외를 캡처하는 것이 불가능해졌습니다.
이를 방지하려면 사용자 지정 예외를 만들어야 합니다. PowerShell에서 사용자 지정 예외를 만들려면 예외 클래스에서 상속된 클래스를 만들어야 합니다.
class AzResourceGraphException : Exception {
[string] $additionalData
AzResourceGraphException($Message, $additionalData) : base($Message) {
$this.additionalData = $additionalData
}
}
그것을 사용하려면
$resourceGraphQuery = "Resource"
Search-AzGraph -Query $resourceGraphQuery -ErrorVariable grapherror -ErrorAction SilentlyContinue
if ($null -ne $grapherror.Length) {
$errorJSON = $grapherror.ErrorDetails.Message | ConvertFrom-Json
throw [AzResourceGraphException]::new($errorJSON.error.details.code, $errorJSON.error.details.message)
}
요청 작성
KQL을 사용해 본 경험이 있다면 KQL 요청이 여러 줄에 걸릴 수 있다는 것을 알고 계실 것입니다. 여러 줄 쿼리는 더 명확하고 읽기 쉬우며 필요할 때 편집할 수 있습니다.
PowerShell로 어떻게 동일한 작업을 수행할 수 있습니까?
here-string을 사용하여 여러 줄 변수를 @""@로 묶을 수 있습니다.
kqlQuery = @"
Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project subscriptionName = name, subscriptionId) on subscriptionId
| where type =~ 'Microsoft.Compute/virtualMachines'
| project VMResourceId = id, subscriptionId, subscriptionName, resourceGroup, resourceName = name, networkInterfaces = (properties.networkProfile.networkInterfaces)
| mv-expand networkInterfaces
| project VMResourceId, subscriptionId, subscriptionName, resourceGroup, resourceName, networkInterfaceId = tostring(networkInterfaces.id)
| join kind=leftouter(
Resources
| where type =~ 'Microsoft.Network/networkInterfaces'
| project id, ipConfigurations = (properties.ipConfigurations)
| mv-expand ipConfigurations
| project id, publicIpAddressId = tostring(ipConfigurations.properties.publicIPAddress.id), privateIp = ipConfigurations.properties.privateIPAddress
| join kind = leftouter (
Resources
| where type =~ 'Microsoft.Network/publicIPAddresses'
| project publicIpId=id, ipAddress=tostring(properties.ipAddress)
) on $left.publicIpAddressId == $right.publicIpId
) on $left.networkInterfaceId == $right.id
| project VMResourceId, subscriptionId, subscriptionName, resourceGroup, resourceName, ipAddress, privateIp
| order by subscriptionId, subscriptionName, resourceGroup, resourceName
"@
제한 사항
KQL로 데이터를 추출한다는 것은 필요한 데이터를 추출하기 위해 여러 테이블을 조인하는 것을 의미하는 경우가 많습니다. 이전 예에서는 3개의 테이블이 조인되었습니다.
하지만 한 쿼리에서 4개 이상의 조인을 사용할 수 없다는 제한이 있습니다. 더 많은 조인을 사용하면 오류가 발생합니다.
또한 기본적으로 데이터 세트의 크기가 제한되어 처음 100개의 결과만 반환됩니다. 더 많은 것을 원하면 –First 매개변수가 필요합니다. 반환할 최대 행 수를 정의하지만 1000개로 제한됩니다. 결과에 1000개 이상의 행이 포함된 경우 페이지 매김을 사용해야 합니다.
쪽수 매기기
쿼리당 1000개 이상의 행을 검색할 수 있지만 페이지 매김을 사용하여 데이터 세트를 검색할 수 있습니다.
기술 중 하나는 –SkipToken 매개 변수를 사용하는 것입니다. 결과의 다음 페이지를 가져오는 데 사용됩니다.
Search-AzGraph에서 반환된 개체에는 SkipToken 속성이 포함되어 있습니다. 문자열인 이 토큰은 이전 쿼리의 결과를 건너뛰기 위해 다음 쿼리에서 사용할 수 있습니다.
작동하려면 결과에 ID가 포함되어야 합니다.
$kqlQuery = @"
Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project subscriptionName = name, subscriptionId) on subscriptionId
| where type =~ 'Microsoft.Compute/virtualMachines'
| project VMResourceId = id, subscriptionName, resourceGroup, name
"@
$batchSize = 1000
$skipResult = 0
[System.Collections.Generic.List[string]]$kqlResult
while ($true) {
if ($skipResult -gt 0) {
$graphResult = Search-AzGraph -Query $kqlQuery -first $batchSize -SkipToken $graphResult.SkipToken
}
else {
$graphResult = Search-AzGraph -Query $kqlQuery -first $batchSize
}
$kqlResult += $graphResult.data
if ($graphResult.data.Count -lt $batchSize) {
break;
}
$skipResult += $skipResult + $batchSize
}
모듈 문서here를 찾을 수 있습니다.
Reference
이 문제에 관하여(Azure Resource Graph 및 PowerShell 생존 가이드.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/omiossec/azure-resource-graph-and-powershell-survival-guide-5a46텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)