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.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo
- Central de conteúdo > Pacotes de conteúdo > Começar
Como configurar o feed de atividades do Microsoft Azure
- Clique no pacote Plataforma do Azure.
- Localize o feed de atividades do Microsoft Azure.
Especifique valores para os seguintes campos:
- Tipo de origem: armazenamento de blobs V2 do Microsoft Azure
- 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)
- Opção de exclusão da origem: especifique se você quer excluir arquivos e diretórios após a transferência.
- Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
- 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.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
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 outros detalhes, como gravidade, informações principais e dados de rede.
Tabela de mapeamento da 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". |