Partilhar via


Como auditar as operações do plano de controle do Azure Cosmos DB

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

O Plano de Controle no Azure Cosmos DB é um serviço RESTful que permite executar um conjunto diversificado de operações na conta do Azure Cosmos DB. Ele expõe um modelo de recurso público (por exemplo: banco de dados, conta) e várias operações aos usuários finais para executar ações no modelo de recurso. As operações do plano de controle incluem alterações na conta ou no contêiner do Azure Cosmos DB. Por exemplo, operações como criar uma conta do Azure Cosmos DB, adicionar uma região, taxa de transferência de atualização, failover de região, adicionar uma VNet etc. são algumas das operações do plano de controle. Este artigo explica como auditar as operações do plano de controle no Azure Cosmos DB. Você pode executar as operações do plano de controle em contas do Azure Cosmos DB usando a CLI do Azure, o PowerShell ou o portal do Azure, enquanto para contêineres, use a CLI do Azure ou o PowerShell.

Seguem-se alguns exemplos de cenários em que a auditoria das operações do plano de controlo é útil:

  • Você deseja receber um alerta quando as regras de firewall para sua conta do Azure Cosmos DB forem modificadas. O alerta é necessário para localizar modificações não autorizadas nas regras que regem a segurança de rede da sua conta do Azure Cosmos DB e tomar medidas rápidas.

  • Você deseja receber um alerta se uma nova região for adicionada ou removida da sua conta do Azure Cosmos DB. Adicionar ou remover regiões tem implicações nos requisitos de faturamento e soberania de dados. Este alerta irá ajudá-lo a detetar uma adição ou remoção acidental de região na sua conta.

  • Você deseja obter mais detalhes dos logs de diagnóstico sobre o que mudou. Por exemplo, uma VNet foi alterada.

Desativar o acesso de gravação de metadados baseados em chave

Antes de auditar as operações do plano de controle no Azure Cosmos DB, desabilite o acesso de gravação de metadados baseado em chave em sua conta. Quando o acesso de gravação de metadados baseados em chave é desabilitado, os clientes que se conectam à conta do Azure Cosmos DB por meio de chaves de conta são impedidos de acessar a conta. Você pode desabilitar o acesso de gravação definindo a disableKeyBasedMetadataWriteAccess propriedade como true. Depois de definir essa propriedade, as alterações em qualquer recurso podem ocorrer de um usuário com a função e as credenciais adequadas do Azure. Para saber mais sobre como definir essa propriedade, consulte o artigo Impedindo alterações de SDKs .

Depois que o disableKeyBasedMetadataWriteAccess estiver ativado, se os clientes baseados em SDK executarem operações de criação ou atualização, um erro "A operação 'POST' no recurso 'ContainerNameorDatabaseName' não é permitida por meio do ponto de extremidade do Azure Cosmos DB será retornado. Tem de ativar o acesso a essas operações para a sua conta ou executar as operações de criação/atualização através do Azure Resource Manager, Azure CLI ou Azure PowerShell. Para voltar, defina o disableKeyBasedMetadataWriteAccess como false usando a CLI do Azure, conforme descrito no artigo Impedindo alterações do SDK do Azure Cosmos DB. Certifique-se de alterar o valor de disableKeyBasedMetadataWriteAccess para false em vez de true.

Considere os seguintes pontos ao desativar o acesso de gravação de metadados:

  • Avalie e certifique-se de que seus aplicativos não façam chamadas de metadados que alterem os recursos acima (por exemplo, criar coleção, atualizar a taxa de transferência, ...) usando o SDK ou as chaves de conta.

  • Quando disableKeyBasedMetadataWriteAccess definido como true, as operações de metadados emitidas pelo SDK são bloqueadas. Como alternativa, você pode usar implantações de modelo do portal do Azure, CLI do Azure, Azure PowerShell ou Azure Resource Manager para executar essas operações.

Habilitar logs de diagnóstico para operações do plano de controle

Você pode habilitar logs de diagnóstico para operações de plano de controle usando o portal do Azure. Depois de ativar, os logs de diagnóstico registrarão a operação como um par de eventos iniciais e completos com detalhes relevantes. Por exemplo, RegionFailoverStart e RegionFailoverComplete concluirão o evento de failover de região.

Use as seguintes etapas para habilitar o registro em log nas operações do plano de controle:

  1. Entre no portal do Azure e navegue até sua conta do Azure Cosmos DB.

  2. Abra o painel Configurações de diagnóstico , forneça um Nome para os logs a serem criados.

  3. Selecione ControlPlaneRequests para o tipo de log e selecione a opção Enviar para o Log Analytics .

  4. Opcionalmente, envie os logs de diagnóstico para o Armazenamento do Azure, Hubs de Eventos do Azure, Azure Monitor ou terceiros.

Você também pode armazenar os logs em uma conta de armazenamento ou transmitir para um hub de eventos. Este artigo mostra como enviar logs para análise de log e, em seguida, consultá-los. Depois de ativar, leva alguns minutos para que os logs de diagnóstico entrem em vigor. Todas as operações do plano de controle realizadas após esse ponto podem ser rastreadas. A captura de tela a seguir mostra como habilitar logs de plano de controle:

Habilitar o registro de solicitações do plano de controle

Ver as operações do plano de controlo

Depois de ativar o registo, utilize os seguintes passos para controlar as operações de uma conta específica:

  1. Inicie sessão no portal do Azure.

  2. Abra o separador Monitor a partir da navegação à esquerda e, em seguida, selecione o painel Logs . Ele abre uma interface do usuário onde você pode facilmente executar consultas com essa conta específica no escopo. Execute a seguinte consulta para exibir logs de plano de controle:

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="ControlPlaneRequests"
    | where TimeGenerated >= ago(1h)
    

    As capturas de tela a seguir capturam logs quando um nível de consistência é alterado para uma conta do Azure Cosmos DB. O activityId_g valor dos resultados é diferente do ID da atividade de uma operação:

    Controlar logs de plano quando uma rede virtual é adicionada

    As capturas de tela a seguir capturam logs quando o espaço de chave ou uma tabela de uma conta Cassandra são criados e quando a taxa de transferência é atualizada. Os logs do plano de controle para operações de criação e atualização no banco de dados e no contêiner são registrados separadamente, conforme mostrado na captura de tela a seguir:

    Controle os logs do plano quando a taxa de transferência é atualizada

Identificar a identidade associada a uma operação específica

Se quiser depurar mais, você pode identificar uma operação específica no log de atividades usando o activityId_g ou pelo carimbo de data/hora da operação. O carimbo de data/hora é usado para alguns clientes do Resource Manager em que o ID da atividade não é passado explicitamente. O log de atividades fornece detalhes sobre a identidade com a qual a operação foi iniciada. A captura de tela a seguir mostra como usar o activityId_g para localizar as operações associadas a ele no log de atividades:

Use o ID da atividade e encontre as operações

Controlar operações de plano para a conta do Azure Cosmos DB

A seguir estão as operações do plano de controle disponíveis no nível da conta. A maioria das operações é rastreada no nível da conta. Estas operações estão disponíveis como métricas no Azure monitor:

  • Região adicionada
  • Região removida
  • Conta excluída
  • Região com falha
  • Conta criada
  • Rede virtual excluída
  • Configurações de rede da conta atualizadas
  • Configurações de replicação de conta atualizadas
  • Chaves de conta atualizadas
  • Configurações de backup de conta atualizadas
  • Configurações de diagnóstico de conta atualizadas

Operações do plano de controle para banco de dados ou contêineres

A seguir estão as operações do plano de controle disponíveis no nível do banco de dados e do contêiner. Estas operações estão disponíveis como métricas no Azure monitor:

  • Banco de dados SQL criado
  • Banco de dados SQL atualizado
  • Taxa de transferência do banco de dados SQL atualizada
  • Banco de dados SQL excluído
  • Contêiner SQL criado
  • Contêiner SQL atualizado
  • Taxa de transferência de contêiner SQL atualizada
  • Contêiner SQL excluído
  • Cassandra Keyspace Criado
  • Cassandra Keyspace Atualizado
  • Taxa de transferência do Cassandra Keyspace atualizada
  • Cassandra Keyspace Excluído
  • Cassandra Tabela criada
  • Tabela Cassandra Atualizada
  • Taxa de transferência da tabela Cassandra atualizada
  • Tabela Cassandra Suprimida
  • Banco de dados Gremlin criado
  • Banco de dados Gremlin atualizado
  • Taxa de transferência do banco de dados Gremlin atualizada
  • Banco de dados Gremlin excluído
  • Gráfico de Gremlin criado
  • Gráfico Gremlin atualizado
  • Taxa de transferência do gráfico Gremlin atualizada
  • Gráfico de Gremlin excluído
  • Banco de dados Mongo criado
  • Base de Dados Mongo Atualizada
  • Taxa de transferência do banco de dados Mongo atualizada
  • Banco de dados Mongo excluído
  • Coleção Mongo Criada
  • Coleção Mongo Atualizada
  • Taxa de transferência da coleção Mongo atualizada
  • Coleção Mongo Excluída
  • Tabela AzureTable criada
  • Tabela AzureTable atualizada
  • Taxa de transferência da tabela AzureTable atualizada
  • Tabela AzureTable excluída

Operações de log de diagnóstico

A seguir estão os nomes de operação em logs de diagnóstico para diferentes operações:

  • RegiãoAddStart, RegiãoAddComplete
  • RegionRemoveStart, RegionRemoveComplete
  • AccountDeleteStart, AccountDeleteComplete
  • RegionFailoverStart, RegiãoFailoverComplete
  • AccountCreateStart, AccountCreateComplete
  • AccountUpdateStart, AccountUpdateComplete
  • VirtualNetworkDeleteStart, VirtualNetworkDeleteComplete
  • DiagnosticLogUpdateStart, DiagnosticLogUpdateComplete

Para operações específicas da API, a operação é nomeada com o seguinte formato:

  • ApiKind + ApiKindResourceType + OperationType
  • ApiKind + ApiKindResourceType + "Taxa de transferência" + operationType

Exemplo

  • CassandraKeyspacesCriar
  • CassandraKeyspacesUpdate
  • CassandraKeyspacesThroughputUpdate
  • SqlContainersUpdate

A propriedade ResourceDetails contém todo o corpo do recurso como uma carga útil de solicitação e contém todas as propriedades solicitadas para atualização

Consultas de log de diagnóstico para operações do plano de controle

Seguem-se alguns exemplos para obter registos de diagnóstico para operações do plano de controlo:

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"

Consulta para obter o activityId e o chamador que iniciou a operação de exclusão de contêiner:

(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

Consulta para obter atualizações de índice ou ttl. Em seguida, você pode comparar a saída dessa consulta com uma atualização anterior para ver a alteração no índice ou 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:}

Próximos passos