Audit operací roviny řízení služby Azure Cosmos DB

PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka

Ří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. Koncovým uživatelům zpřístupňuje model veřejných prostředků (například databáze, účet) a různé operace, aby mohli s modelem prostředků provádět akce. Operace řídicí roviny zahrnují změny v účtu nebo kontejneru služby Azure Cosmos DB. Mezi operace řídicí roviny patří například 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. 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 Azure Cosmos DB pomocí Azure CLI, PowerShellu nebo Azure Portal, zatímco pro kontejnery použijte Azure CLI nebo PowerShell.

Následuje několik ukázkových scénářů, ve kterých je užitečné auditování operací řídicí roviny:

  • Chcete dostávat 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 se z účtu služby Azure Cosmos DB přidá nebo odebere nová oblast. Přidání nebo odebrání oblastí má vliv na požadavky na fakturaci a suverenitu dat. Toto upozornění vám pomůže zjistit náhodné přidání nebo odebrání oblasti ve vašem účtu.

  • Chcete získat další podrobnosti o tom, co se změnilo, z diagnostických protokolů. Například se změnila virtuální síť.

Zakázání přístupu k zápisu na základě metadat na základě klíče

Před auditem operací řídicí roviny ve službě Azure Cosmos DB zakažte pro svůj účet přístup k zápisu metadat založený na klíči. Pokud je zakázaný přístup k zápisu metadat založený na klíči, nebudou k účtu přistupovat klienti, kteří se připojují k účtu služby Azure Cosmos DB prostřednictvím klíčů účtu. Přístup k zápisu můžete zakázat nastavením disableKeyBasedMetadataWriteAccess vlastnosti na true. Po nastavení této vlastnosti může uživatel se správnou rolí a přihlašovacími údaji Azure provést změny v jakémkoli prostředku. Další informace o nastavení této vlastnosti najdete v článku Zabránění změnám v sadách SDK .

disableKeyBasedMetadataWriteAccess Pokud klienti založení na sadě SDK po zapnutí spustí operace vytvoření nebo aktualizace, vrátí se chyba Operace POST u prostředku ContainerNameorDatabaseName prostřednictvím koncového bodu služby Azure Cosmos DB. Musíte pro svůj účet zapnout přístup k těmto operacím nebo provést operace vytvoření/aktualizace prostřednictvím Azure Resource Manager, Azure CLI nebo Azure PowerShell. Pokud chcete přepnout zpět, nastavte pomocí Azure CLI hodnotu disableKeyBasedMetadataWriteAccess na false , jak je popsáno v článku Věnovaném zabránění změnám ze sady SDK služby Azure Cosmos DB . Nezapomeňte změnit hodnotu disableKeyBasedMetadataWriteAccess na false místo true.

Při vypnutí přístupu pro zápis metadat zvažte následující body:

  • Vyhodnoťte a ujistěte se, že vaše aplikace neprovádí volání metadat, která mění výše uvedené prostředky (například vytvoření kolekce, aktualizace propustnosti atd.) pomocí sady SDK nebo klíčů účtu.

  • Pokud disableKeyBasedMetadataWriteAccess je nastavená hodnota true, operace metadat vystavené sadou SDK se zablokují. Případně můžete k provedení těchto operací použít nasazení šablony Azure Portal, Azure CLI, Azure PowerShell nebo Azure Resource Manager.

Povolení diagnostických protokolů pro operace řídicí roviny

Diagnostické protokoly pro operace řídicí roviny můžete povolit pomocí Azure Portal. Po povolení budou diagnostické protokoly zaznamenávat operaci jako dvojici událostí spuštění a dokončení 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ího postupu povolte protokolování operací řídicí roviny:

  1. Přihlaste se k Azure Portal a přejděte ke svému úč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 odeslat 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 se na ně dotazovat. Po povolení trvá 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í požadavků řídicí roviny

Zobrazení operací řídicí roviny

Po zapnutí protokolování použijte následující postup ke sledování operací pro konkrétní účet:

  1. Přihlaste se k webu Azure Portal.

  2. V levém navigačním panelu otevřete kartu Monitorování a pak vyberte podokno Protokoly . Otevře uživatelské rozhraní, ve kterém můžete snadno spouštět dotazy s 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 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, kdy je vytvořen prostor klíčů nebo tabulka účtu Cassandra a kdy se aktualizuje propustnost. Protokoly řídicí roviny pro operace vytvoření a aktualizace v databázi 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 dále ladit, můžete identifikovat konkrétní operaci v protokolu aktivit pomocí activityId_g časového razítka nebo časového razítka operace. Časové razítko se používá pro některé klienty Resource Manager, u kterých se ID aktivity explicitně nepředá. Protokol aktivit poskytuje podrobnosti o identitě, se kterou byla operace zahájena. Následující snímek obrazovky ukazuje, jak pomocí activityId_g nástroje najít operace s ním spojené v protokolu aktivit:

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
  • Odebraná oblast
  • Odstraněný účet
  • Převzetí služeb při selhání v oblasti
  • Vytvořený účet
  • Virtuální síť se odstranila.
  • Nastavení sítě účtu se aktualizovalo.
  • Nastavení replikace účtu se aktualizovalo.
  • Klíče účtu se aktualizovaly
  • Nastavení zálohování účtu se aktualizovalo.
  • Nastavení diagnostiky účtu se aktualizovalo.

Operace řídicí roviny pro databázi nebo kontejnery

Níže jsou uvedené operace řídicí roviny, které jsou k dispozici na úrovni databáze a kontejneru. Tyto operace jsou k dispozici jako metriky ve službě Azure Monitor:

  • SQL Database Vytvořeno
  • SQL Database aktualizováno
  • aktualizace propustnosti SQL Database
  • SQL Database Odstraněno
  • Vytvořil se kontejner SQL.
  • Kontejner SQL se aktualizoval
  • Aktualizace propustnosti kontejneru SQL
  • Odstraněný kontejner SQL
  • Vytvořil se prostor klíčů Cassandra.
  • Aktualizace prostoru klíčů Cassandra
  • Aktualizace propustnosti prostoru klíčů Cassandra
  • Odstraněný prostor klíčů Cassandra
  • Vytvořena tabulka Cassandra
  • Tabulka Cassandra se aktualizovala
  • Aktualizace propustnosti tabulky Cassandra
  • Odstraněná tabulka Cassandra
  • Vytvořena databáze Gremlin
  • Databáze Gremlin se aktualizovala
  • Aktualizace propustnosti databáze Gremlin
  • Odstraněná databáze Gremlin
  • Vytvořený graf Gremlin
  • Graf Gremlin se aktualizoval
  • Aktualizace propustnosti grafu Gremlin
  • Odstraněný graf Gremlin
  • Byla vytvořena databáze Mongo.
  • Databáze Mongo se aktualizovala.
  • Aktualizace propustnosti databáze Mongo
  • Odstraněná databáze Mongo
  • Kolekce Mongo byla vytvořena.
  • Aktualizace kolekce Mongo
  • Aktualizace propustnosti kolekce Mongo
  • Odstraněná kolekce Mongo
  • Vytvořená tabulka AzureTable
  • Aktualizace tabulky AzureTable
  • Aktualizace propustnosti tabulky AzureTable
  • Odstraněná tabulka AzureTable

Operace diagnostického protokolu

Níže jsou uvedené 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 v následujícím formátu:

  • ApiKind + ApiKindResourceType + OperationType
  • ApiKind + ApiKindResourceType + "Propustnost" + operationType

Příklad

  • CassandraKeyspacesVytvořit
  • 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 na diagnostické protokoly pro operace řídicí roviny

Následuje 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"

Dotazem získejte 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 se starší aktualizací a zobrazit tak změnu indexu nebo ttl.

AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where  OperationName == "SqlContainersUpdate"
| project resourceDetails_s

Výstup:

{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