Azure kaynakları için günlükleri sorgulama
Azure İzleyici Log Analytics'te sorgular genellikle çalışma alanı bağlamında yürütülür. Çalışma alanı birçok kaynak için veri içerebilir ve bu da belirli bir kaynağın verilerini yalıtma sürecini zorlaştırır. Kaynaklar ayrıca birden çok çalışma alanına veri gönderebilir. Bu deneyimi basitleştirmek için REST API, Azure kaynaklarının doğrudan günlükleri için sorgulanmasına izin verir.
Yanıt biçimi
Azure kaynak sorguları, Log Analytics çalışma alanını hedefleyen sorgularla aynı yanıt şeklini oluşturur.
URL biçimi
Tam tanımlayıcısı olan bir Azure kaynağını göz önünde bulundurun:
/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>
Bu kaynağın doğrudan API uç noktasına yönelik günlükleri için bir sorgu aşağıdaki URL'ye gider:
https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query
ARM aracılığıyla aynı kaynağa yapılan bir sorgu aşağıdaki URL'yi kullanır:
https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview
Temelde, bu URL tam Azure kaynağı ve uzantı sağlayıcısıdır: /providers/microsoft.insights/logs
.
Tablo erişimi ve RBAC
Kaynak sağlayıcısı, microsoft.insights
günlüklere erişimi tablo düzeyinde denetlemek için yeni bir işlem kümesi sunar. Bu işlemler adlı tableName
tablo için aşağıdaki biçime sahiptir.
microsoft.insights/logs/<tableName>/read
Bu izin, belirtilen tablolara ve özelliğin actions
belirtilen tablolara notActions
izin vermesine izin vermek için özelliği kullanılarak rollere eklenebilir.
Çalışma alanına erişim denetimi
Azure kaynak sorguları Log Analytics çalışma alanlarını olası veri kaynakları olarak arar. Ancak, yöneticiler RBAC rolleri aracılığıyla çalışma alanına erişimi kilitleyebilir. Varsayılan olarak, API yalnızca kullanıcının erişim izinlerine sahip olduğu çalışma alanlarından sonuçlar döndürür.
Çalışma alanı yöneticileri mevcut RBAC'leri bozmadan Azure kaynak sorgularını kullanabilir. Çalışma alanı üzerindeki boole özelliği, okuma izni olan kullanıcıların belirli bir Azure kaynağının günlüklerini görüntülemesine olanak tanır ancak bu günlükleri içeren çalışma alanını sorgulamaz.
Bu, çalışma alanı düzeyinde Tablolara erişimin kapsamını belirleme eylemidir:
microsoft.operationalinsights/workspaces/query/<tableName>/read
Hata yanıtları
Aşağıda, Belirtik davranışın açıklamasıyla birlikte Azure kaynaklarını sorgularken karşılaşılan yaygın hata senaryolarının kısa bir listesi yer alır.
Azure kaynağı yok
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"
}
}
}
Kaynağa erişim yok
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"
}
}
}
Kaynaktan günlük yok veya bu günlükleri içeren çalışma alanı için izin yok
Veri ve izinlerin kesin birleşimine bağlı olarak, yanıt sonuç veri içermeyen bir 200 içerir veya söz dizimi hatası (4xx hatası) oluşturur.
Kısmi erişim
Kullanıcının belirli bir kaynağın günlüklerine erişmek için kısmi izinlere sahip olabileceği bazı senaryolar vardır. Kullanıcıda aşağıdakilerden biri eksikse bu durum geçerli olur:
- Azure kaynağının günlüklerini içeren çalışma alanına erişim.
- Sorgudaki tablo başvurusuna erişim.
Kullanıcının sessizce filtrelenmiş erişim iznine sahip olmadığı veri kaynaklarıyla normal bir yanıt görürler. Kullanıcının Bir Azure kaynağına, temel Log Analytics çalışma alanlarına ve belirli tablolara erişimi hakkındaki bilgileri görmek için üst bilgiyi Prefer: include-permissions=true
isteklerle birlikte ekleyin. Bu, yanıt JSON'unun aşağıdaki örneğe benzer bir bölüm içermesine neden olur:
{
"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"
}
]
}
}
Yük, resources
iki VM'yi sorgulama girişimini açıklar. VM1, WS1 çalışma alanına veri gönderirken, VM2 iki çalışma alanına veri gönderir: WS2 ve WS3. Ayrıca, kullanıcının kaynak için veya SecurityBaseline
tablolarını sorgulama SecurityEvent
izni yoktur.
Yük, dataSources
kullanıcının hangi çalışma alanlarını sorgulayabileceğinizi açıklayarak sonuçları daha fazla filtreler. Burada kullanıcının WS3'i sorgulama izni yoktur ve WS1 dışında filtrelenmiş başka bir tablo vardır.
Böyle bir sorguda hangi verilerin döndürüleceğini net bir şekilde belirtmek için:
- Tablolar hariç WS1'de VM1 için günlükler. Çalışma alanından özel.
- WS2'de SecurityEvent ve SecurityBaseline hariç VM2 günlükleri.