Auditování operací řídicí roviny služby Azure Cosmos DB
PLATÍ PRO: NoSQL MongoDB Cassandra Skřítek Stůl
Řídicí rovina ve službě Azure Cosmos DB je služba RESTful, která umožňuje provádět různorodou sadu operací s účtem služby Azure Cosmos DB. Zveřejňuje veřejný model prostředků (například databázi, účet) a různé operace koncovým uživatelům za účelem provádění akcí s modelem prostředků. Operace řídicí roviny zahrnují změny účtu nebo kontejneru Azure Cosmos DB. Například operace, jako je vytvoření účtu služby Azure Cosmos DB, přidání oblasti, aktualizace propustnosti, převzetí služeb při selhání oblasti, přidání virtuální sítě atd. jsou některé operace řídicí roviny. Tento článek vysvětluje, jak auditovat operace řídicí roviny ve službě Azure Cosmos DB. Operace řídicí roviny můžete spouštět v účtech služby Azure Cosmos DB pomocí Azure CLI, PowerShellu nebo webu Azure Portal, zatímco pro kontejnery můžete použít Azure CLI nebo PowerShell.
Tady je několik ukázkových scénářů, ve kterých je užitečné auditování operací řídicí roviny:
Chcete získat upozornění, když se změní pravidla brány firewall pro váš účet služby Azure Cosmos DB. Výstraha se vyžaduje k vyhledání neoprávněných úprav pravidel, které řídí zabezpečení sítě vašeho účtu služby Azure Cosmos DB, a provedení rychlé akce.
Chcete získat upozornění, pokud je přidána nebo odebrána nová oblast z vašeho účtu služby Azure Cosmos DB. Přidání nebo odebrání oblastí má vliv na požadavky na fakturaci a suverenitu dat. Tato výstraha vám pomůže zjistit náhodné přidání nebo odebrání oblasti ve vašem účtu.
Chcete získat další podrobnosti z diagnostických protokolů o tom, co se změnilo. Například došlo ke změně virtuální sítě.
Zakázání přístupu k zápisu metadat založených na klíčích
Před auditem operací řídicí roviny ve službě Azure Cosmos DB zakažte přístup k zápisu metadat založených na klíčích ve vašem účtu. Pokud je zakázaný přístup k zápisu metadat založených na klíčích, klienti připojující se k účtu služby Azure Cosmos DB prostřednictvím klíčů účtu nemají přístup k účtu. Přístup k zápisu disableKeyBasedMetadataWriteAccess
můžete zakázat nastavením vlastnosti na true. Po nastavení této vlastnosti se změny jakéhokoli prostředku můžou provést od uživatele se správnou rolí a přihlašovacími údaji Azure.
disableKeyBasedMetadataWriteAccess
Pokud klienti založené na sadě SDK spustí operace vytvoření nebo aktualizace, vrátí se chyba Operace POST u prostředku ContainerNameorDatabaseName není povolená prostřednictvím koncového bodu služby Azure Cosmos DB. Pro svůj účet musíte zapnout přístup k takovým operacím nebo provádět operace vytváření a aktualizace prostřednictvím Azure Resource Manageru, Azure CLI nebo Azure PowerShellu. Pokud chcete přepnout zpět, nastavte disableKeyBasedMetadataWriteAccess na false pomocí Azure CLI. Místo hodnoty true nezapomeňte změnit hodnotu disableKeyBasedMetadataWriteAccess
na false.
Při vypnutí přístupu k zápisu metadat zvažte následující body:
Vyhodnoťte a ujistěte se, že vaše aplikace nevolá metadata, která mění výše uvedené prostředky (například vytvoření kolekce, aktualizace propustnosti atd.) pomocí klíčů sady SDK nebo účtu.
Pokud
disableKeyBasedMetadataWriteAccess
je nastavená hodnota true, zablokují se operace metadat vydané sadou SDK. K provedení těchto operací můžete také použít Azure Portal, Azure CLI, Azure PowerShell nebo nasazení šablon Azure Resource Manageru.
Povolení diagnostických protokolů pro operace řídicí roviny
Diagnostické protokoly můžete povolit pro operace řídicí roviny pomocí webu Azure Portal. Po povolení budou diagnostické protokoly zaznamenávat operaci jako dvojici počátečních a úplných událostí s příslušnými podrobnostmi. Například RegionFailoverStart a RegionFailoverComplete dokončí událost převzetí služeb při selhání oblasti.
Pomocí následujících kroků povolte protokolování operací řídicí roviny:
Přihlaste se k webu Azure Portal a přejděte k účtu služby Azure Cosmos DB.
Otevřete podokno Nastavení diagnostiky a zadejte název protokolů, které se mají vytvořit.
Jako typ protokolu vyberte ControlPlaneRequests a vyberte možnost Odeslat do Log Analytics.
Volitelně můžete diagnostické protokoly odesílat do služby Azure Storage, Azure Event Hubs, Azure Monitoru nebo třetí strany.
Protokoly můžete také uložit do účtu úložiště nebo streamovat do centra událostí. Tento článek ukazuje, jak odesílat protokoly do log Analytics a pak je dotazovat. Po povolení může trvat několik minut, než se diagnostické protokoly projeví. Všechny operace řídicí roviny prováděné po tomto bodu lze sledovat. Následující snímek obrazovky ukazuje, jak povolit protokoly řídicí roviny:
Zobrazení operací řídicí roviny
Po zapnutí protokolování můžete pomocí následujících kroků sledovat operace pro konkrétní účet:
Přihlaste se k portálu Azure.
V levém navigačním panelu otevřete kartu Monitorování a vyberte podokno Protokoly . Otevře uživatelské rozhraní, ve kterém můžete snadno spouštět dotazy s tímto konkrétním účtem v oboru. Spuštěním následujícího dotazu zobrazte protokoly řídicí roviny:
AzureDiagnostics | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="ControlPlaneRequests" | where TimeGenerated >= ago(1h)
Následující snímky obrazovky zachycují protokoly při změně úrovně konzistence pro účet služby Azure Cosmos DB. Hodnota
activityId_g
z výsledků se liší od ID aktivity operace:Následující snímky obrazovky zachycují protokoly při vytvoření prostoru klíčů nebo tabulky účtu Cassandra a při aktualizaci propustnosti. Protokoly řídicí roviny pro operace vytvoření a aktualizace databáze a kontejneru se protokolují samostatně, jak je znázorněno na následujícím snímku obrazovky:
Identifikace identity přidružené ke konkrétní operaci
Pokud chcete provést další ladění, můžete pomocí časového razítka operace identifikovat konkrétní operaci v protokolu activityId_g
aktivit. Časové razítko se používá pro některé klienty Resource Manageru, u kterých id aktivity není explicitně předáno. Protokol aktivit poskytuje podrobnosti o identitě, se kterou byla operace inicializována. Následující snímek obrazovky ukazuje, jak pomocí activityId_g
operace přidružené k ní v protokolu aktivit najít:
Operace řídicí roviny pro účet služby Azure Cosmos DB
Níže jsou uvedené operace řídicí roviny, které jsou k dispozici na úrovni účtu. Většina operací se sleduje na úrovni účtu. Tyto operace jsou k dispozici jako metriky ve službě Azure Monitor:
- Přidaná oblast
- Oblast byla odebrána.
- Odstraněný účet
- Oblast, u které došlo k převzetí služeb při selhání
- Vytvořený účet
- Odstraněná virtuální síť
- Aktualizované nastavení sítě účtu
- Aktualizace nastavení replikace účtu
- Aktualizovaly se klíče účtu.
- Aktualizace nastavení zálohování účtu
- Aktualizované nastavení diagnostiky účtu
Operace řídicí roviny pro databázi nebo kontejnery
Následují operace řídicí roviny dostupné na úrovni databáze a kontejneru. Tyto operace jsou k dispozici jako metriky ve službě Azure Monitor:
- Vytvořenou databázi SQL
- Databáze SQL Byla aktualizována.
- Aktualizace propustnosti databáze SQL
- Odstraněná databáze SQL
- Vytvořený kontejner SQL
- Aktualizace kontejneru SQL
- Aktualizace propustnosti kontejneru SQL
- Odstraněný kontejner SQL
- Vytvoření prostoru klíčů Cassandra
- Aktualizace prostoru klíčů Cassandra
- Aktualizace propustnosti prostoru klíčů Cassandra
- Odstraněný prostor klíčů Cassandra
- Vytvoření tabulky Cassandra
- Aktualizována tabulka Cassandra
- Aktualizace propustnosti tabulky Cassandra
- Odstraněná tabulka Cassandra
- Vytvořená databáze Gremlin
- Databáze Gremlin byla aktualizována.
- Aktualizace propustnosti databáze Gremlin
- Odstraněná databáze Gremlin
- Vytvořený graf Gremlin
- Graf Gremlin byl aktualizován
- Aktualizace propustnosti grafu Gremlin
- Odstraněný graf Gremlin
- Vytvoření databáze Mongo
- Databáze Mongo byla aktualizována.
- Aktualizace propustnosti databáze Mongo
- Odstraněná databáze Mongo
- Vytvořenou kolekci Mongo
- Aktualizace kolekce Mongo
- Aktualizace propustnosti kolekce Mongo
- Odstraněná kolekce Mongo
- Vytvoření tabulky AzureTable
- Tabulka AzureTable byla aktualizována.
- Aktualizace propustnosti tabulky AzureTable
- Odstraněná tabulka AzureTable
Operace s diagnostickými protokoly
Následují názvy operací v diagnostických protokolech pro různé operace:
- RegionAddStart, RegionAddComplete
- RegionRemoveStart, RegionRemoveComplete
- AccountDeleteStart, AccountDeleteComplete
- RegionFailoverStart, RegionFailoverComplete
- AccountCreateStart, AccountCreateComplete
- AccountUpdateStart, AccountUpdateComplete
- VirtualNetworkDeleteStart, VirtualNetworkDeleteComplete
- DiagnosticLogUpdateStart, DiagnosticLogUpdateComplete
Pro operace specifické pro rozhraní API má operace název s následujícím formátem:
- ApiKind + ApiKindResourceType + OperationType
- ApiKind + ApiKindResourceType + "Propustnost" + operationType
Příklad
- CassandraKeyspacesCreate
- CassandraKeyspacesUpdate
- CassandraKeyspacesThroughputUpdate
- SqlContainersUpdate
Vlastnost ResourceDetails obsahuje celý text prostředku jako datovou část požadavku a obsahuje všechny vlastnosti požadované k aktualizaci.
Dotazy diagnostického protokolu pro operace řídicí roviny
Tady je několik příkladů, jak získat diagnostické protokoly pro operace řídicí roviny:
AzureDiagnostics
| where Category startswith "ControlPlane"
| where OperationName contains "Update"
| project httpstatusCode_s, statusCode_s, OperationName, resourceDetails_s, activityId_g
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where TimeGenerated >= todatetime('2020-05-14T17:37:09.563Z')
| project TimeGenerated, OperationName, apiKind_s, apiKindResourceType_s, operationType_s, resourceDetails_s
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersUpdate"
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersThroughputUpdate"
Dotaz na získání id aktivity a volajícího, který inicioval operaci odstranění kontejneru:
(AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName == "SqlContainersDelete"
| where TimeGenerated >= todatetime('9/3/2020, 5:30:29.300 PM')
| summarize by activityId_g )
| join (
AzureActivity
| parse HTTPRequest with * "clientRequestId\": \"" activityId_g "\"" *
| summarize by Caller, HTTPRequest, activityId_g)
on activityId_g
| project Caller, activityId_g
Dotaz na získání aktualizací indexu nebo ttl Potom můžete porovnat výstup tohoto dotazu s dřívější aktualizací, abyste viděli změnu v indexu nebo ttl.
AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where OperationName == "SqlContainersUpdate"
| project resourceDetails_s
output:
{id:skewed,indexingPolicy:{automatic:true,indexingMode:consistent,includedPaths:[{path:/*,indexes:[]}],excludedPaths:[{path:/_etag/?}],compositeIndexes:[],spatialIndexes:[]},partitionKey:{paths:[/pk],kind:Hash},defaultTtl:1000000,uniqueKeyPolicy:{uniqueKeys:[]},conflictResolutionPolicy:{mode:LastWriterWins,conflictResolutionPath:/_ts,conflictResolutionProcedure:}