Coletar registros do Atlassian Confluence

Compatível com:

Este documento explica como ingerir registros do Atlassian Confluence no Google Security Operations. Primeiro, o analisador tenta extrair campos da mensagem de registro bruta usando expressões regulares (padrões grok) projetadas para registros do Atlassian Confluence. Se a análise grok falhar ou o registro estiver no formato JSON, o código tentará analisar a mensagem como JSON. Por fim, os campos extraídos são mapeados para o esquema UDM do Google SecOps e enriquecidos com mais contexto.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Conta do Atlassian Confluence Cloud com acesso ao registro de auditoria OU Confluence Data Center/Server com acesso administrativo
  • Para métodos baseados na AWS: acesso privilegiado à AWS (S3, IAM, Lambda, EventBridge)
  • Para o método Bindplane: host Windows 2016 ou mais recente ou Linux com systemd

Visão geral das opções de integração

Este guia oferece dois caminhos de integração:

  • Opção 1: Confluence Data Center/Server via BindPlane + Syslog
  • Opção 2: registros de auditoria do Confluence Cloud via AWS Lambda + S3 (formato JSON)

Escolha a opção que melhor se adapta ao tipo de implantação e à infraestrutura do Confluence.

Opção 1: Confluence Data Center/Server via Bindplane + Syslog

Essa opção configura o Confluence Data Center ou Server para enviar registros via syslog a um agente do Bindplane, que os encaminha para o Google SecOps.

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
      udplog:
        # Replace the port and IP address as required
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID
        customer_id: YOUR_CUSTOMER_ID
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'ATLASSIAN_CONFLUENCE'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/confluence:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <YOUR_CUSTOMER_ID_HERE> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o encaminhamento de syslog no Confluence Data Center/Server

  1. Faça login no servidor do Confluence via SSH ou RDP.
  2. Localize o arquivo de configuração do Log4j:
    • Para o Log4j2: <confluence-install>/confluence/WEB-INF/classes/log4j2.xml
  3. Edite o arquivo de configuração para adicionar um SyslogAppender:

    <Configuration>
      <Appenders>
        <!-- Existing appenders -->
    
        <Syslog name="SyslogAppender" 
                host="BINDPLANE_AGENT_IP" 
                port="514" 
                protocol="UDP"
                facility="LOCAL0"
                format="RFC5424">
          <PatternLayout pattern="%d{ISO8601} %p [%t] [%c{1}] %m%n"/>
        </Syslog>
      </Appenders>
    
      <Loggers>
        <Root level="info">
          <AppenderRef ref="SyslogAppender"/>
          <!-- Other appender refs -->
        </Root>
    
        <!-- Audit logger -->
        <Logger name="com.atlassian.confluence.event.events.security.AuditEvent" level="info" additivity="false">
          <AppenderRef ref="SyslogAppender"/>
        </Logger>
      </Loggers>
    </Configuration>
    
    • Substitua BINDPLANE_AGENT_IP pelo endereço IP do seu agente do BindPlane.
  4. Reinicie o Confluence para aplicar as mudanças:

    sudo systemctl restart confluence
    

Opção B: configurar o rsyslog para encaminhar arquivos de registro locais

  1. Configure o Confluence para gravar registros em arquivos (comportamento padrão).
  2. Instale o rsyslog se ele não estiver presente:

    sudo apt-get install rsyslog  # Debian/Ubuntu
    sudo yum install rsyslog      # RHEL/CentOS
    
  3. Crie o arquivo de configuração do rsyslog /etc/rsyslog.d/confluence.conf:

    # Forward Confluence logs to BindPlane
    $ModLoad imfile
    
    # Application logs
    $InputFileName /opt/atlassian/confluence/logs/atlassian-confluence.log
    $InputFileTag confluence-app:
    $InputFileStateFile stat-confluence-app
    $InputFileSeverity info
    $InputFileFacility local0
    $InputRunFileMonitor
    
    # Audit logs (JSON format in DC/Server)
    $InputFileName /var/atlassian/application-data/confluence/log/audit/*.json
    $InputFileTag confluence-audit:
    $InputFileStateFile stat-confluence-audit
    $InputFileSeverity info
    $InputFileFacility local1
    $InputRunFileMonitor
    
    # Forward to BindPlane agent
    *.* @@BINDPLANE_AGENT_IP:514
    
    • Substitua BINDPLANE_AGENT_IP pelo endereço IP do seu agente do Bindplane.
    • Ajuste os caminhos dos arquivos de registro com base na sua instalação do Confluence:
      • Os registros de aplicativos normalmente: <confluence-install>/logs/ ou <local-home>/logs/
      • Registros de auditoria: <confluence-home>/log/audit/*.json
  4. Reinicie o rsyslog:

    sudo systemctl restart rsyslog
    

Opção 2: registros de auditoria do Confluence Cloud via AWS Lambda + S3

Coletar credenciais da API do Confluence Cloud

  1. Faça login na sua conta da Atlassian.
  2. Acesse https://id.atlassian.com/manage-profile/security/api-tokens.
  3. Clique em Criar um token de API.
  4. Insira um marcador para o token (por exemplo, Google Security Operations Integration).
  5. Clique em Criar.
  6. Copie e salve o token da API com segurança.
  7. Anote o URL do site do Confluence Cloud (por exemplo, https://yoursite.atlassian.net).
  8. Anote o endereço de e-mail da sua conta da Atlassian (usado para autenticação).

Configurar o bucket do AWS S3 e o IAM para o Google SecOps

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
  2. Salve o Nome e a Região do bucket para referência futura (por exemplo, confluence-audit-logs).
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como Caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise a política AmazonS3FullAccess.
  18. Selecione a política.
  19. Clique em Próxima.
  20. Clique em Adicionar permissões

Configurar a política e o papel do IAM para uploads do S3

  1. No console da AWS, acesse IAM > Políticas > Criar política > guia JSON.
  2. Insira a seguinte política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::confluence-audit-logs/*"
        },
        {
          "Sid": "AllowGetStateObject",
          "Effect": "Allow",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::confluence-audit-logs/confluence-audit/state.json"
        }
      ]
    }
    
    • Substitua confluence-audit-logs se você tiver inserido um nome de bucket diferente.
  3. Clique em Próxima > Criar política.

  4. Nomeie a política como ConfluenceAuditToS3Policy.

  5. Acesse IAM > Funções > Criar função > Serviço da AWS > Lambda.

  6. Anexe a política recém-criada ConfluenceAuditToS3Policy.

  7. Nomeie a função como ConfluenceAuditLambdaRole e clique em Criar função.

Criar a função Lambda

  1. No console da AWS, acesse Lambda > Functions.
  2. Clique em Criar função > Criar do zero.
  3. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Nome ConfluenceAuditToS3
    Ambiente de execução Python 3.13
    Arquitetura x86_64
    Função de execução ConfluenceAuditLambdaRole
  4. Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte código:

    import json
    import os
    import boto3
    from datetime import datetime, timezone, timedelta
    from urllib import request, parse, error
    from base64 import b64encode
    
    # Environment variables
    S3_BUCKET = os.environ['S3_BUCKET']
    S3_PREFIX = os.environ.get('S3_PREFIX', 'confluence-audit/')
    STATE_KEY = os.environ.get('STATE_KEY', 'confluence-audit/state.json')
    CONFLUENCE_URL = os.environ['CONFLUENCE_URL']  # e.g., https://yoursite.atlassian.net
    CONFLUENCE_EMAIL = os.environ['CONFLUENCE_EMAIL']
    CONFLUENCE_API_TOKEN = os.environ['CONFLUENCE_API_TOKEN']
    MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '1000'))
    
    s3_client = boto3.client('s3')
    
    def lambda_handler(event, context):
        """Fetch Confluence Cloud audit logs and write to S3."""
    
        # Read last execution state
        start_date = get_last_execution_time()
        end_date = datetime.now(timezone.utc)
    
        print(f"Fetching audit logs from {start_date} to {end_date}")
    
        # Fetch audit records
        records = fetch_audit_logs(start_date, end_date)
    
        if not records:
            print("No new audit records found.")
            save_state(end_date)
            return {'statusCode': 200, 'body': 'No new records'}
    
        # Write to S3
        timestamp = end_date.strftime('%Y%m%d_%H%M%S')
        object_key = f"{S3_PREFIX}audit_{timestamp}.json"
    
        s3_client.put_object(
            Bucket=S3_BUCKET,
            Key=object_key,
            Body='\n'.join(json.dumps(record) for record in records),
            ContentType='application/json'
        )
    
        print(f"Wrote {len(records)} records to s3://{S3_BUCKET}/{object_key}")
    
        # Update state
        save_state(end_date)
    
        return {
            'statusCode': 200,
            'body': f"Processed {len(records)} records"
        }
    
    def get_last_execution_time():
        """Retrieve the last execution timestamp from S3 state file."""
        try:
            response = s3_client.get_object(Bucket=S3_BUCKET, Key=STATE_KEY)
            state = json.loads(response['Body'].read())
            return datetime.fromisoformat(state['last_execution'])
        except s3_client.exceptions.NoSuchKey:
            # First run: fetch logs from last 24 hours
            return datetime.now(timezone.utc) - timedelta(hours=24)
        except Exception as e:
            print(f"Error reading state: {e}")
            return datetime.now(timezone.utc) - timedelta(hours=24)
    
    def save_state(execution_time):
        """Save the execution timestamp to S3 state file."""
        state = {'last_execution': execution_time.isoformat()}
        s3_client.put_object(
            Bucket=S3_BUCKET,
            Key=STATE_KEY,
            Body=json.dumps(state),
            ContentType='application/json'
        )
    
    def fetch_audit_logs(start_date, end_date):
        """Fetch audit logs from Confluence Cloud REST API."""
        records = []
        start_param = int(start_date.timestamp() * 1000)  # milliseconds
        end_param = int(end_date.timestamp() * 1000)
    
        # Build authentication header
        auth_string = f"{CONFLUENCE_EMAIL}:{CONFLUENCE_API_TOKEN}"
        auth_bytes = auth_string.encode('ascii')
        auth_b64 = b64encode(auth_bytes).decode('ascii')
    
        headers = {
            'Authorization': f'Basic {auth_b64}',
            'Accept': 'application/json'
        }
    
        # Confluence Cloud Audit API endpoint
        url = f"{CONFLUENCE_URL}/wiki/rest/api/audit?startDate={start_param}&endDate={end_param}&limit=1000"
    
        try:
            req = request.Request(url, headers=headers)
            with request.urlopen(req) as response:
                data = json.loads(response.read())
                records = data.get('results', [])
                print(f"Retrieved {len(records)} audit records")
        except error.HTTPError as e:
            print(f"HTTP Error: {e.code} - {e.reason}")
            print(e.read().decode())
        except Exception as e:
            print(f"Error fetching audit logs: {e}")
    
        return records[:MAX_RECORDS]
    
  5. Acesse Configuração > Variáveis de ambiente.

  6. Clique em Editar > Adicionar nova variável de ambiente.

  7. Insira as seguintes variáveis de ambiente, substituindo pelos seus valores.

    Chave Valor de exemplo
    S3_BUCKET confluence-audit-logs
    S3_PREFIX confluence-audit/
    STATE_KEY confluence-audit/state.json
    CONFLUENCE_URL https://yoursite.atlassian.net
    CONFLUENCE_EMAIL your-email@example.com
    CONFLUENCE_API_TOKEN your-api-token-here
    MAX_RECORDS 1000
  8. Selecione a guia Configuração.

  9. No painel Configuração geral, clique em Editar.

  10. Mude Tempo limite para 5 minutos (300 segundos) e clique em Salvar.

Criar uma programação do EventBridge

  1. Acesse Amazon EventBridge > Scheduler > Criar programação.
  2. Informe os seguintes detalhes de configuração:
    • Programação recorrente: Taxa (1 hour).
    • Destino: sua função Lambda ConfluenceAuditToS3.
    • Nome: ConfluenceAuditToS3-1h.
  3. Clique em Criar programação.

Opcional: criar um usuário e chaves do IAM somente leitura para o Google SecOps

  1. Acesse Console da AWS > IAM > Usuários.
  2. Clique em Add users.
  3. Informe os seguintes detalhes de configuração:
    • Usuário: insira secops-confluence-reader.
    • Tipo de acesso: selecione Chave de acesso – Acesso programático.
  4. Clique em Próxima.
  5. Clique em Anexar políticas diretamente > Criar política.
  6. No editor JSON, insira a seguinte política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::confluence-audit-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::confluence-audit-logs"
        }
      ]
    }
    
  7. Defina o nome como secops-reader-policy.

  8. Acesse Criar política > pesquise/selecione > Próxima > Adicionar permissões.

  9. Acesse Credenciais de segurança > Chaves de acesso > Criar chave de acesso.

  10. Faça o download do CSV (esses valores são inseridos no feed).

Configurar um feed no Google SecOps para ingerir registros do Confluence

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Confluence Cloud Audit Logs).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione Atlassian Confluence como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://confluence-audit-logs/confluence-audit/
    • Opções de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
  8. Clique em Próxima.
  9. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
agente read_only_udm.network.http.user_agent Valor extraído do campo "agent".
app_protocol read_only_udm.network.application_protocol Derivado do campo "app_protocol". Se "app_protocol" contiver "HTTPS", "HTTP", "SSH" ou "RDP", o protocolo correspondente será usado. Caso contrário, o padrão será "UNKNOWN_APPLICATION_PROTOCOL".
app_protocol read_only_udm.network.application_protocol_version Valor extraído do campo "app_protocol".
auditType.action read_only_udm.security_result.action Derivado do campo "auditType.action". Se "auditType.action" contiver "successful", o valor será definido como "ALLOW". Se ele contiver "restricted", o valor será definido como "BLOCK".
auditType.action read_only_udm.security_result.summary Valor extraído do campo "auditType.action" quando "auditType" não está vazio e "auditType_area" é "SECURITY".
auditType.actionI18nKey read_only_udm.metadata.product_event_type Valor extraído do campo "auditType.actionI18nKey" quando "auditType" não está vazio.
auditType.area read_only_udm.security_result.detection_fields.value Valor extraído do campo "auditType.area" e atribuído ao campo "value" de um campo de detecção com o campo "key" definido como "auditType area". Esse mapeamento é feito quando "auditType" não está vazio.
auditType.category read_only_udm.security_result.category_details Valor extraído do campo "auditType.category" quando "auditType" não está vazio.
auditType.categoryI18nKey read_only_udm.security_result.detection_fields.value Valor extraído do campo "auditType.categoryI18nKey" e atribuído ao campo "value" de um campo de detecção com o campo "key" definido como "auditType categoryI18nKey". Esse mapeamento é feito quando "auditType" não está vazio.
auditType.level read_only_udm.security_result.detection_fields.value Valor extraído do campo "auditType.level" e atribuído ao campo "value" de um campo de detecção com o campo "key" definido como "auditType level". Esse mapeamento é feito quando "auditType" não está vazio.
author.displayName read_only_udm.principal.user.user_display_name Valor extraído do campo "author.displayName".
author.externalCollaborator read_only_udm.security_result.about.resource.attribute.labels.value Valor extraído do campo "author.externalCollaborator" e atribuído ao campo "value" de um rótulo com o campo "key" definido como "externalCollaborator".
author.id read_only_udm.principal.user.userid Valor extraído do campo "author.id" quando "author.type" é "user" e "principal_user_present" é "false".
author.isExternalCollaborator read_only_udm.security_result.about.resource.attribute.labels.value Valor extraído do campo "author.isExternalCollaborator" e atribuído ao campo "value" de um rótulo com o campo "key" definido como "isExternalCollaborator".
author.name read_only_udm.principal.user.user_display_name Valor extraído do campo "author.name" quando "author.type" é "user" e "principal_user_present" é "false".
bytes_in read_only_udm.network.received_bytes Valor extraído do campo "bytes_in" se ele contiver dígitos. Caso contrário, o padrão é 0.
categoria read_only_udm.security_result.category_details Valor extraído do campo "category".
changedValues read_only_udm.principal.resource.attribute.labels Itera por cada elemento em "changedValues" e cria rótulos com chaves como "changedValue[index][key]" e valores dos valores correspondentes na matriz "changedValues".
creationDate read_only_udm.metadata.event_timestamp Valor extraído do campo "creationDate", analisado como carimbo de data/hora UNIX ou UNIX_MS.
extraAttributes read_only_udm.principal.resource.attribute.labels Itera por cada elemento em "extraAttributes" e cria rótulos com chaves com base nos campos "name" e "nameI18nKey" e nos valores do campo "value" correspondente.
http_verb read_only_udm.network.http.method Valor extraído do campo "http_verb".
ip read_only_udm.target.ip Valor extraído do campo "ip".
principal_host read_only_udm.principal.hostname Valor extraído do campo "principal_host".
referral_url read_only_udm.network.http.referral_url Valor extraído do campo "referral_url".
remoteAddress read_only_udm.principal.ip Valor extraído do campo "remoteAddress", analisado como um endereço IP.
response_code read_only_udm.network.http.response_code Valor extraído do campo "response_code".
session_duration read_only_udm.additional.fields.value.string_value Valor extraído do campo "session_duration" e atribuído ao campo "string_value" de um rótulo com o campo "key" definido como "Session Duration".
source read_only_udm.principal.ip Valor extraído do campo "source", analisado como um endereço IP.
src_ip read_only_udm.principal.ip Valor extraído do campo "src_ip" se "remoteAddress" estiver vazio.
resumo read_only_udm.security_result.summary Valor extraído do campo "summary".
sysAdmin read_only_udm.security_result.about.resource.attribute.labels.value Valor extraído do campo "sysAdmin" e atribuído ao campo "value" de um rótulo com o campo "key" definido como "sysAdmin".
superAdmin read_only_udm.security_result.about.resource.attribute.labels.value Valor extraído do campo "superAdmin" e atribuído ao campo "value" de um rótulo com o campo "key" definido como "superAdmin".
target_url read_only_udm.target.url Valor extraído do campo "target_url".
timestamp read_only_udm.metadata.event_timestamp Valor extraído do campo "timestamp", analisado como uma string de data e hora.
user_id read_only_udm.principal.user.userid Valor extraído do campo "user_id".
read_only_udm.metadata.event_type O valor desse campo é determinado por uma série de verificações e o padrão é "GENERIC_EVENT". Ele é definido como valores específicos, como "NETWORK_HTTP", "USER_UNCATEGORIZED" ou "STATUS_UPDATE", com base na presença e no conteúdo de outros campos, como "principal_host", "user_id", "has_principal" e "author.type".
read_only_udm.metadata.vendor_name Defina como "ATLASSIAN".
read_only_udm.metadata.product_name Defina como "CONFLUENCE".
read_only_udm.metadata.log_type Defina como "ATLASSIAN_CONFLUENCE".
read_only_udm.principal.user.user_display_name O valor desse campo pode vir de "author.displayName" ou "affectedObject.name", dependendo do contexto.
read_only_udm.target.process.pid O valor desse campo pode vir de "principal_host" ou "pid", dependendo do contexto.
read_only_udm.principal.resource.attribute.labels Esse campo é preenchido com vários rótulos derivados de campos como "affectedObjects", "changedValues" e "extraAttributes". As chaves e os valores desses rótulos são gerados dinamicamente com base no conteúdo específico desses campos.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.