Coletar registros de auditoria do Aware

Compatível com:

Este documento explica como ingerir registros de auditoria do Aware no Google Security Operations usando o Amazon S3.

Antes de começar

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

  • Instância do Google SecOps
  • Acesso privilegiado ao locatário do Aware
  • Acesso privilegiado à AWS (S3, IAM, Lambda, EventBridge)

Coletar pré-requisitos do Aware (IDs, chaves de API, IDs da organização, tokens)

  1. Faça login no Admin Console do Aware.
  2. Acesse Configurações do sistema > Integrações > Tokens de API.
  3. Clique em + Token da API e conceda a permissão Somente leitura dos registros de auditoria.
  4. Copie e salve em um local seguro os seguintes detalhes:
    • Token da API
    • URL base da API: https://api.aware.work/external/system/auditlogs/v1

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, aware-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 o 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 uso posterior.
  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 e selecione a política AmazonS3FullAccess.
  18. Clique em Próxima.
  19. 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:::aware-audit-logs/*"
        },
        {
          "Sid": "AllowGetStateObject",
          "Effect": "Allow",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::aware-audit-logs/aware/state.json"
        }
      ]
    }
    
    • Substitua aware-audit-logs se você tiver inserido um nome de bucket diferente.
  3. Clique em Próxima > Criar política.

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

  5. Anexe a política recém-criada.

  6. Nomeie a função como AwareAuditLambdaRole e clique em Criar função.

Criar a função Lambda

  1. No console da AWS, acesse Lambda > Functions > Create function.
  2. Clique em Criar do zero.
  3. Informe os seguintes detalhes de configuração:
Configuração Valor
Nome aware-audit-poller
Ambiente de execução Python 3.13
Arquitetura x86_64
Função de execução AwareAuditLambdaRole
  1. Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte código (aware-audit-poller.py):

    import boto3, gzip, io, json, os, time, urllib.parse
    import urllib.request
    from datetime import datetime, timedelta, timezone
    from botocore.exceptions import ClientError
    
    AWARE_ENDPOINT = "https://api.aware.work/external/system/auditlogs/v1"
    API_TOKEN = os.environ["AWARE_API_TOKEN"]
    BUCKET = os.environ["S3_BUCKET"]
    PREFIX = os.environ.get("S3_PREFIX", "aware/audit/")
    STATE_KEY = os.environ.get("STATE_KEY", "aware/state.json")
    MAX_PER_PAGE = int(os.environ.get("MAX_PER_PAGE", "500"))
    
    s3 = boto3.client("s3")
    
    def _load_state():
        try:
            obj = s3.get_object(Bucket=BUCKET, Key=STATE_KEY)
            return json.loads(obj["Body"].read().decode("utf-8"))
        except ClientError as e:
            if e.response.get("Error", {}).get("Code") == "NoSuchKey":
                return {}
            raise
    
    def _save_state(state):
        s3.put_object(Bucket=BUCKET, Key=STATE_KEY, Body=json.dumps(state).encode("utf-8"))
    
    def handler(event, context):
        tz_utc = timezone.utc
        now = datetime.now(tz=tz_utc)
    
        state = _load_state()
        start_date = (
            datetime.fromisoformat(state["last_date"]).date() if "last_date" in state
            else (now - timedelta(days=1)).date()
        )
        end_date = now.date()
    
        total = 0
        day = start_date
        while day <= end_date:
            day_str = day.strftime("%Y-%m-%d")
            params = {"filter": f"startDate:{day_str},endDate:{day_str}", "limit": str(MAX_PER_PAGE)}
            offset = 1
    
            out = io.BytesIO()
            gz = gzip.GzipFile(filename="aware_audit.jsonl", mode="wb", fileobj=out)
            wrote_any = False
    
            while True:
                q = urllib.parse.urlencode({**params, "offset": str(offset)})
                req = urllib.request.Request(f"{AWARE_ENDPOINT}?{q}")
                req.add_header("X-Aware-Api-Key", API_TOKEN)
                with urllib.request.urlopen(req, timeout=30) as resp:
                    payload = json.loads(resp.read().decode("utf-8"))
                items = (payload.get("value") or {}).get("auditLogData") or []
                if not items:
                    break
                for item in items:
                    gz.write((json.dumps(item, separators=(",", ":")) + "n").encode("utf-8"))
                    total += 1
                    wrote_any = True
                offset += 1
                time.sleep(0.2)
    
            gz.close()
            if wrote_any:
                key = f"{PREFIX}{day.strftime('%Y/%m/%d')}/aware_audit_{now.strftime('%Y%m%d_%H%M%S')}.jsonl.gz"
                s3.put_object(
                    Bucket=BUCKET,
                    Key=key,
                    Body=out.getvalue(),
                    ContentType="application/json",
                    ContentEncoding="gzip",
                )
    
            _save_state({"last_date": day.isoformat()})
            day += timedelta(days=1)
    
        return {"status": "ok", "written": total}
    
  2. Acesse Configuração > Variáveis de ambiente > Editar > Adicionar nova variável de ambiente.

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

    Chave Valor de exemplo
    S3_BUCKET aware-audit-logs
    S3_PREFIX aware/audit/
    STATE_KEY aware/state.json
    AWARE_API_TOKEN <your-aware-api-token>
    MAX_PER_PAGE 500
  4. Depois que a função for criada, permaneça na página dela ou abra Lambda > Functions > sua-função**).

  5. Selecione a guia Configuração.

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

  7. 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 aware-audit-poller.
    • Nome: aware-audit-poller-1h.
  3. Clique em Criar programação.

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

  1. No console da AWS, acesse IAM > Usuários > Adicionar usuários.
  2. Clique em Add users.
  3. Informe os seguintes detalhes de configuração:
    • Usuário: secops-reader.
    • Tipo de acesso: Chave de acesso — Acesso programático.
  4. Clique em Criar usuário.
  5. Anexe a política de leitura mínima (personalizada): Usuários > secops-reader > Permissões > Adicionar permissões > 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:::aware-audit-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::aware-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 de auditoria do Aware

  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, Aware Audit logs).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione Aware Audit como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://aware-audit-logs/aware/audit/
    • Opções de exclusão de fontes: 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.

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