Sdílet prostřednictvím


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:

  1. Přihlaste se k webu Azure Portal a přejděte k účtu služby Azure Cosmos DB.

  2. Otevřete podokno Nastavení diagnostiky a zadejte název protokolů, které se mají vytvořit.

  3. Jako typ protokolu vyberte ControlPlaneRequests a vyberte možnost Odeslat do Log Analytics.

  4. 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:

Povolení protokolování žádostí řídicí roviny

Zobrazení operací řídicí roviny

Po zapnutí protokolování můžete pomocí následujících kroků sledovat operace pro konkrétní účet:

  1. Přihlaste se k portálu Azure.

  2. 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:

    Protokoly řídicí roviny při přidání virtuální sítě

    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:

    Protokoly řídicí roviny při aktualizaci propustnosti

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:

Použijte ID aktivity a vyhledejte operace.

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:}

Další kroky