Ingerir registros de atividades do Microsoft Azure
Este documento descreve as etapas necessárias para ingerir registros de atividades do Microsoft Azure
(AZURE_ACTIVITY
) no Google Security Operations.
Configurar uma conta de armazenamento
Siga estas etapas para configurar uma conta de armazenamento:
- No console do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
- Selecione a assinatura, o grupo de recursos, a região, o desempenho (recomendamos o padrão) e a redundância (recomendamos GRS ou LRS) necessários para a conta e insira um nome para a nova conta de armazenamento.
- Clique em Revisar + criar, confira a visão geral da conta e clique em Criar.
- Na página Visão geral da conta de armazenamento, selecione Chaves de acesso na navegação à esquerda da janela.
- Clique em Mostrar chaves e anote a chave compartilhada da conta de armazenamento.
- Selecione Endpoints na navegação à esquerda da janela.
- Anote o endpoint do serviço de blob. (https://<storageaccountname>.blob.core.windows.net/)
Configurar o registro de atividades do Azure
Siga estas etapas para configurar o registro de atividades do Azure:
- No console do Azure, pesquise Monitor.
- Clique no link Registro de atividades na navegação à esquerda da página.
- Clique em Exportar registros de atividade na parte de cima da janela.
- Clique em Adicionar configuração de diagnóstico.
- Selecione todas as categorias que você quer exportar para o Google SecOps.
- Em Detalhes do destino, selecione Arquivar em uma conta de armazenamento.
- Selecione a assinatura e a conta de armazenamento que você criou na etapa anterior.
- Clique em Salvar.
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- Insira um nome exclusivo para o Nome do campo.
- Selecione Microsoft Azure Blob Storage como o Tipo de origem.
- Selecione Atividade do Microsoft Azure como o Tipo de registro.
- Clique em Próxima.
- Configure os seguintes parâmetros de entrada obrigatórios:
- URI do Azure: insira o valor do endpoint do Serviço de Blobs que você registrou antes, com o sufixo insights-activity-logs (por exemplo, https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs)
- O URI é um: selecione Diretório que inclui subdiretórios.
- Opção de exclusão da origem: especifique se você quer excluir arquivos e diretórios após a transferência.
- Chave compartilhada: insira o valor da chave compartilhada que você capturou antes.
- Clique em Próxima e em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- URI do Azure: insira o valor do endpoint do Serviço de Blobs que você registrou antes, com o sufixo insights-activity-logs (por exemplo, https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs)
- O URI é um: selecione Diretório que inclui subdiretórios.
- Opção de exclusão da origem: especifique se você quer excluir arquivos e diretórios após a transferência.
- Chave compartilhada: insira o valor da chave compartilhada que você capturou antes.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Referência de mapeamento de campos
Esse código de analisador primeiro inicializa um grande número de campos com strings vazias e, em seguida, realiza uma série de manipulações de strings e operações de análise JSON para extrair informações relevantes da mensagem do log de atividades do Azure. Por fim, ele mapeia os dados extraídos para os campos do Modelo de dados unificado (UDM), categorizando o tipo de evento e enriquecendo-o com mais detalhes, como gravidade, informações principais e dados de rede.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
categoria | read_only_udm.security_result.category_details |
Mapeado diretamente do campo "category" no registro bruto. |
callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mapeado diretamente do campo "callerIpAddress" no registro bruto. |
correlationId | read_only_udm.security_result.detection_fields.correlationId |
Mapeado diretamente do campo "correlationId" no registro bruto. |
data.callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mapeado diretamente do campo "callerIpAddress" no objeto "data" do registro bruto. |
data.correlationId | read_only_udm.security_result.detection_fields.correlationId |
Mapeado diretamente do campo "correlationId" no objeto "data" do registro bruto. |
data.DeploymentUnit | read_only_udm.target.resource.name |
Mapeado diretamente do campo "DeploymentUnit" no objeto "data" do registro bruto. |
data.details | read_only_udm.metadata.description |
Mapeado diretamente do campo "details" no objeto "data" do registro bruto, somente se o campo "details" não for "Unknown". |
data.entity | read_only_udm.additional.fields.entity |
Mapeado diretamente do campo "entity" no objeto "data" do registro bruto. |
data.EventName | read_only_udm.metadata.product_event_type |
Mapeado diretamente do campo "EventName" no objeto "data" do registro bruto. |
data.hierarchy | read_only_udm.additional.fields.hierarchy |
Mapeado diretamente do campo "hierarchy" no objeto "data" do registro bruto. |
data.identity.authorization.action | read_only_udm.security_result.detection_fields.action |
Mapeado diretamente do campo "action" no objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.evidence.principalId | read_only_udm.principal.user.product_object_id , read_only_udm.principal.resource.product_object_id , read_only_udm.principal.group.product_object_id |
Mapeado diretamente do campo "principalId" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. O campo específico da UDM a que ele é mapeado depende do valor do campo "principalType". Se "principalType" for "User" ou "ServicePrincipal", ele será mapeado para principal.user.product_object_id . Se "principalType" for "Group", ele será mapeado para principal.group.product_object_id . Se "principalType" for "ServicePrincipal", ele será mapeado para principal.resource.product_object_id . |
data.identity.authorization.evidence.principalType | read_only_udm.principal.resource.resource_subtype |
Mapeado diretamente do campo "principalType" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.evidence.role | read_only_udm.principal.user.role_name |
Mapeado diretamente do campo "role" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.evidence.roleAssignmentId | read_only_udm.principal.resource.attribute.labels.roleAssignmentId |
Mapeado diretamente do campo "roleAssignmentId" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.evidence.roleAssignmentScope | read_only_udm.principal.resource.attribute.labels.roleAssignmentScope |
Mapeado diretamente do campo "roleAssignmentScope" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.evidence.roleDefinitionId | read_only_udm.principal.resource.attribute.labels.roleDefinitionId |
Mapeado diretamente do campo "roleDefinitionId" no objeto "evidence" do objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.authorization.scope | read_only_udm.security_result.detection_fields.scope |
Mapeado diretamente do campo "scope" no objeto "authorization" do objeto "identity" no registro bruto. |
data.identity.claims.aio | read_only_udm.security_result.detection_fields.aio |
Mapeado diretamente do campo "aio" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.appid | read_only_udm.security_result.detection_fields.appid |
Mapeado diretamente do campo "appid" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.appidacr | read_only_udm.security_result.detection_fields.appidacr |
Mapeado diretamente do campo "appidacr" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.aud | read_only_udm.security_result.detection_fields.aud |
Mapeado diretamente do campo "aud" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.exp | read_only_udm.security_result.detection_fields.exp |
Mapeado diretamente do campo "exp" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/identityprovider |
read_only_udm.security_result.detection_fields.identityprovider |
Mapeado diretamente do campo "http://schemas.microsoft.com/identity/claims/identityprovider" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/objectidentifier |
read_only_udm.security_result.detection_fields.objectidentifier |
Mapeado diretamente do campo "http://schemas.microsoft.com/identity/claims/objectidentifier" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/tenantid |
read_only_udm.security_result.detection_fields.tenantid |
Mapeado diretamente do campo "http://schemas.microsoft.com/identity/claims/tenantid" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
read_only_udm.security_result.detection_fields.nameidentifier |
Mapeado diretamente do campo "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.iat | read_only_udm.security_result.detection_fields.iat |
Mapeado diretamente do campo "iat" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.iss | read_only_udm.security_result.detection_fields.iss |
Mapeado diretamente do campo "iss" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.nbf | read_only_udm.security_result.detection_fields.nbf |
Mapeado diretamente do campo "nbf" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.rh | read_only_udm.security_result.detection_fields.rh |
Mapeado diretamente do campo "rh" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.uti | read_only_udm.security_result.detection_fields.uti |
Mapeado diretamente do campo "uti" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.ver | read_only_udm.security_result.detection_fields.ver |
Mapeado diretamente do campo "ver" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.claims.xms_tcdt | read_only_udm.security_result.detection_fields.xms_tcdt |
Mapeado diretamente do campo "xms_tcdt" no objeto "claims" do objeto "identity" no registro bruto. |
data.identity.UserName | read_only_udm.principal.user.user_display_name |
Mapeado diretamente do campo "UserName" no objeto "identity" do registro bruto. |
data.level | read_only_udm.security_result.severity , read_only_udm.security_result.severity_details |
Mapeado diretamente do campo "level" no objeto "data" do registro bruto. O campo "level" também é usado para determinar o valor do campo severity . Se "level" for "Information" ou "Informational", severity será definido como "INFORMATIONAL". Se "level" for "Warning", severity será definido como "MEDIUM". Se "level" for "Error", severity será definido como "ERROR". Se "level" for "Critical", severity será definido como "CRITICAL". |
data.location | read_only_udm.target.location.name |
Mapeado diretamente do campo "location" no objeto "data" do registro bruto. |
data.operationName | read_only_udm.metadata.product_event_type |
Mapeado diretamente do campo "operationName" no objeto "data" do registro bruto. |
data.properties.EventChannel | read_only_udm.additional.fields.properties EventChannel |
Mapeado diretamente do campo "EventChannel" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.EventSource | read_only_udm.additional.fields.properties EventSource |
Mapeado diretamente do campo "EventSource" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.EventId | read_only_udm.metadata.product_log_id |
Mapeado diretamente do campo "EventId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.cause | read_only_udm.security_result.detection_fields.cause |
Mapeado diretamente do campo "cause" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.clientIPAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mapeado diretamente do campo "clientIPAddress" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.compromisedHost | read_only_udm.principal.asset.hostname , read_only_udm.principal.hostname |
Mapeado diretamente do campo "compromisedHost" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.currentHealthStatus | read_only_udm.security_result.detection_fields.currentHealthStatus |
Mapeado diretamente do campo "currentHealthStatus" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.previousHealthStatus | read_only_udm.security_result.detection_fields.previousHealthStatus |
Mapeado diretamente do campo "previousHealthStatus" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.type | read_only_udm.security_result.detection_fields.type |
Mapeado diretamente do campo "type" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.User | read_only_udm.principal.user.userid |
Mapeado diretamente do campo "User" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto. |
data.properties.eventProperties.userName | read_only_udm.principal.user.user_display_name |
Mapeado diretamente do campo "userName" no objeto "eventProperties" do objeto "properties" do objeto "data" no registro bruto, depois de remover o prefixo "SECURE\". |
data.properties.ipAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Mapeado diretamente do campo "ipAddress" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyChannels | read_only_udm.security_result.detection_fields.legacyChannels |
Mapeado diretamente do campo "legacyChannels" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyEventDataId | read_only_udm.security_result.detection_fields.legacyEventDataId |
Mapeado diretamente do campo "legacyEventDataId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyResourceId | read_only_udm.security_result.detection_fields.legacyResourceId |
Mapeado diretamente do campo "legacyResourceId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyResourceGroup | read_only_udm.security_result.detection_fields.legacyResourceGroup |
Mapeado diretamente do campo "legacyResourceGroup" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyResourceProviderName | read_only_udm.security_result.detection_fields.legacyResourceProviderName |
Mapeado diretamente do campo "legacyResourceProviderName" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacyResourceType | read_only_udm.security_result.detection_fields.legacyResourceType |
Mapeado diretamente do campo "legacyResourceType" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.legacySubscriptionId | read_only_udm.security_result.detection_fields.legacySubscriptionId |
Mapeado diretamente do campo "legacySubscriptionId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.operationId | read_only_udm.security_result.detection_fields.operationId |
Mapeado diretamente do campo "operationId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.result | read_only_udm.security_result.action_details |
Mapeado diretamente do campo "result" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.statusCode | read_only_udm.network.http.response_code |
Mapeado diretamente do campo "statusCode" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.suspiciousCommandLine | read_only_udm.target.process.command_line |
Mapeado diretamente do campo "suspiciousCommandLine" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.suspiciousProcess | read_only_udm.target.process.file.full_path |
Mapeado diretamente do campo "suspiciousProcess" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.suspiciousProcessId | read_only_udm.target.process.pid |
Mapeado diretamente do campo "suspiciousProcessId" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.tlsVersion | read_only_udm.network.tls.version |
Mapeado diretamente do campo "tlsVersion" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.userAgent | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Mapeado diretamente do campo "userAgent" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.userAgentHeader | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Mapeado diretamente do campo "userAgentHeader" no objeto "properties" do objeto "data" no registro bruto. |
data.properties.userId | read_only_udm.target.user.product_object_id |
Mapeado diretamente do campo "userId" no objeto "properties" do objeto "data" no registro bruto. |
data.ReleaseVersion | read_only_udm.metadata.product_version |
Mapeado diretamente do campo "ReleaseVersion" no objeto "data" do registro bruto. |
data.resourceId | read_only_udm.target.resource.name |
Mapeado diretamente do campo "resourceId" no objeto "data" do registro bruto. |
data.resourceType | read_only_udm.additional.fields.resourceType |
Mapeado diretamente do campo "resourceType" no objeto "data" do registro bruto. |
data.resultDescription | read_only_udm.metadata.description |
Mapeado diretamente do campo "resultDescription" no objeto "data" do registro bruto. |
data.resultSignature | read_only_udm.additional.fields.resultSignature |
Mapeado diretamente do campo "resultSignature" no objeto "data" do registro bruto. |
data.resultType | read_only_udm.security_result.action_details , read_only_udm.additional.fields.resultType |
Mapeado diretamente do campo "resultType" no objeto "data" do registro bruto. |
data.RoleLocation | read_only_udm.target.location.name |
Mapeado diretamente do campo "RoleLocation" no objeto "data" do registro bruto. |
data.time | read_only_udm.metadata.event_timestamp |
O campo "time" no objeto "data" do registro bruto é analisado para extrair o carimbo de data/hora, que é mapeado para event_timestamp . |
data.uri | read_only_udm.network.http.referral_url |
Mapeado diretamente do campo "uri" no objeto "data" do registro bruto. |
read_only_udm.extensions.auth.mechanism |
INTERACTIVE |
Definido como "INTERACTIVE" se o campo "isInteractive" no objeto "properties" do objeto "data" no registro bruto for "true". Caso contrário, será definido como "MECHANISM_OTHER". |
read_only_udm.extensions.auth.type |
MACHINE |
Definido como "MACHINE" se o campo "category" no registro bruto for "NonInteractiveUserSignInLogs", "ManagedIdentitySignInLogs" ou "ServicePrincipalSignInLogs". |
read_only_udm.metadata.log_type |
AZURE_ACTIVITY |
Codificado como "AZURE_ACTIVITY". |
read_only_udm.metadata.vendor_name |
Microsoft |
Codificado como "Microsoft". |
read_only_udm.principal.platform |
WINDOWS , MAC , LINUX , ANDROID |
Determinado com base no valor do campo "properties.test.deviceDetail.operatingSystem". Se ele contiver "Win", platform será definido como "WINDOWS". Se ele contiver "Mac", platform será definido como "MAC". Se ele contiver "Lin", platform será definido como "LINUX". Se ele contiver "Android", platform será definido como "ANDROID". |
read_only_udm.principal.resource.type |
SERVICE_ACCOUNT , UNSPECIFIED |
Determinado com base no valor do campo "identity.authorization.evidence.principalType". Se for "ServicePrincipal", type será definido como "SERVICE_ACCOUNT". Caso contrário, será definido como "UNSPECIFIED". |
read_only_udm.security_result.action |
ALLOW , BLOCK , UNKNOWN_ACTION |
Determinado com base nos valores dos campos "resultType", "status_errorcode" e "statusText". Se "resultType" for "Success", "success", "Succeeded", "Started", "Resolved", "Active", "Updated", "Start", "Accept", "Accepted", "0", se "status_errorcode" for 0 ou se "statusText" for "Success", action será definido como "ALLOW". Se "resultType" for "Failure", "Failed", se "status_errorcode" não estiver vazio ou se "resultType" não estiver vazio, action será definido como "BLOCK". Caso contrário, será definido como "UNKNOWN_ACTION". |
read_only_udm.target.cloud.environment |
MICROSOFT_AZURE |
Fixado no código como "MICROSOFT_AZURE". |