Azure 리소스에 대한 로그 쿼리
Azure Monitor Log Analytics에서 쿼리는 일반적으로 작업 영역의 컨텍스트에서 실행됩니다. 작업 영역에는 많은 리소스에 대한 데이터가 포함될 수 있으므로 특정 리소스에 대한 데이터를 격리하기가 어렵습니다. 리소스는 또한 여러 작업 영역에 데이터를 보낼 수 있습니다. 이 환경을 간소화하기 위해 REST API는 로그에 대해 직접 Azure 리소스를 쿼리할 수 있도록 허용합니다.
응답 형식
Azure 리소스 쿼리는 Log Analytics 작업 영역을 대상으로 하는 쿼리와 동일한 응답 모양을 생성합니다.
URL 형식
정규화된 식별자가 있는 Azure 리소스를 고려합니다.
/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>
직접 API 엔드포인트에 대한 이 리소스의 로그의 쿼리는 다음 URL로 이동합니다.
https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query
ARM을 통한 동일한 리소스에 대한 쿼리는 다음 URL을 사용합니다.
https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview
기본적으로 이 URL은 정규화된 Azure 리소스와 확장 공급자를 더한 것입니다. /providers/microsoft.insights/logs
테이블 액세스 및 RBAC
microsoft.insights
리소스 공급자는 테이블 수준에서 로그에 대한 액세스를 제어하기 위한 새로운 작업 세트를 노출합니다. 이러한 작업은 이름이 tableName
인 테이블에 대해 다음과 같은 형식을 갖습니다.
microsoft.insights/logs/<tableName>/read
이 사용 권한은 지정된 테이블과 notActions
속성이 actions
지정된 테이블을 허용하지 않도록 허용하기 위해 속성을 사용하여 역할에 추가할 수 있습니다.
작업 영역 액세스 제어
Azure 리소스 쿼리는 Log Analytics 작업 영역을 가능한 데이터 원본으로 살펴봅니다. 그러나 관리자는 RBAC 역할을 통해 작업 영역에 대한 액세스를 잠글 수 있습니다. 기본적으로 API는 사용자가 액세스할 수 있는 권한이 있는 작업 영역의 결과만 반환합니다.
작업 영역 관리자는 기존 RBAC를 중단하지 않고 Azure 리소스 쿼리를 사용할 수 있습니다. 작업 영역의 부울 속성을 사용하면 읽기 권한이 있는 사용자가 특정 Azure 리소스에 대한 로그를 볼 수 있지만 해당 로그가 포함된 작업 영역을 쿼리할 수는 없습니다.
작업 영역 수준에서 테이블에 대한 액세스 범위를 지정하는 작업입니다.
microsoft.operationalinsights/workspaces/query/<tableName>/read
오류 응답
다음은 증상 동작에 대한 설명과 함께 Azure 리소스를 쿼리할 때 발생하는 일반적인 오류 시나리오의 간략한 목록입니다.
Azure 리소스가 없습니다.
HTTP/1.1 404 Not Found
{
"error": {
"message": "The resource /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-rg/providers/microsoft.storage/storageaccounts/exampleResource was not found",
"code": "ResourceNotFoundError"
}
}
}
리소스에 대한 액세스 권한 없음
HTTP/1.1 403 Forbidden
{
"error": {
"message": "The provided credentials have insufficient access to perform the requested operation",
"code": "InsufficientAccessError",
"innererror": {
"code": "AuthorizationFailedError",
"message": "User '92eba38a-70da-42b0-ab83-ffe82cce658f' does not have access to read logs for this resource"
}
}
}
리소스의 로그가 없거나 해당 로그가 포함된 작업 영역에 대한 권한이 없습니다.
데이터와 사용 권한의 정확한 조합에 따라 응답에 결과 데이터가 없는 200이 포함되거나 구문 오류(4xx 오류)가 throw됩니다.
부분 액세스
사용자에게 특정 리소스의 로그에 액세스할 수 있는 부분 권한이 있을 수 있는 몇 가지 시나리오가 있습니다. 사용자가 누락된 경우는 다음과 같습니다.
- Azure 리소스에 대한 로그가 포함된 작업 영역에 액세스합니다.
- 쿼리의 테이블 참조에 대한 액세스 권한입니다.
사용자에게 자동으로 필터링된 액세스 권한이 없는 데이터 원본을 사용하여 일반적인 응답을 볼 수 있습니다. Azure 리소스, 기본 Log Analytics 작업 영역 및 특정 테이블에 대한 사용자의 액세스에 대한 정보를 보려면 요청이 포함된 헤더 Prefer: include-permissions=true
를 포함합니다. 이렇게 하면 응답 JSON에 다음 예제와 같은 섹션이 포함되도록 합니다.
{
"permissions": {
"resources": [
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.Compute/virtualMachines/VM1",
"dataSources": [
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS1"
]
},
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.Compute/virtualMachines/VM2",
"denyTables": [
"SecurityEvent",
"SecurityBaseline"
],
"dataSources": [
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS2",
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS3"
]
}
],
"dataSources": [
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS1",
"denyTables": [
"Tables.Custom"
]
},
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS2"
}
]
}
}
resources
페이로드는 두 개의 VM을 쿼리하려는 시도를 설명합니다. VM1은 WS1 작업 영역으로 데이터를 보내고, VM2는 WS2 및 WS3, 두 작업 영역에 데이터를 보냅니다. 또한 사용자에게 리소스에 대한 테이블 또는 SecurityBaseline
쿼리 SecurityEvent
권한이 없습니다.
dataSources
페이로드는 사용자가 쿼리할 수 있는 작업 영역을 설명하여 결과를 추가로 필터링합니다. 여기서는 사용자에게 WS3을 쿼리할 수 있는 권한이 없고 WS1에서 필터링된 다른 테이블이 없습니다.
이러한 쿼리를 통해 반환되는 데이터를 명확하게 명시하려면 다음을 수행합니다.
- 테이블을 제외한 WS1의 VM1에 대한 로그입니다. 작업 영역에서 사용자 지정합니다.
- WS2에서 SecurityEvent 및 SecurityBaseline을 제외한 VM2에 대한 로그입니다.