Overview

VPC Flow Logs record the network connections in and out of your VPC: source and destination address, ports, protocol, byte and packet counts, and whether the traffic was accepted or rejected. Atatus reads them directly from the S3 bucket your flow log already delivers to, using the same agent and the same configuration file as AWS CloudTrail. Only source: differs. Rejected flows are the ones worth watching: a port scan, a misconfigured security group, or blocked exfiltration all look like a burst of REJECT records.
Collection starts from the moment you set it up. Objects already in the bucket are not ingested.

Requirements

The flow log must use AWS’s default format. A custom format has a different column order, and its fields are left empty rather than being guessed at and attached to the wrong columns. Wrong data is worse than missing data in a detection engine.

Step 1: Create the flow log

Skip this if you already deliver flow logs to S3.
Objects land under:
Flow logs are delivered in batches, so allow up to 10 minutes between the traffic and the object appearing.

Step 2: Create the IAM policy

Read-only: the agent never writes to your bucket and never deletes an object. Attach it to the instance role of the machine running the agent, or to an IAM user whose access key you paste into the config. The SQS notification mode described on the CloudTrail page works here too. Add the queue permissions from that page if you prefer it.

Step 3: Configure the agent

Add a stanza to /etc/atatus-infra-agent/conf.d/s3.d/s3.yml. If you already collect CloudTrail, add this alongside the existing entry, since one file holds every AWS log family.
Filled in:
Both families in one file:

Reading a bucket in another AWS account

Add role_arn and the agent assumes that role, reading with its temporary credentials instead of anything stored on disk:
The role needs the read policy above plus a trust policy naming the agent’s own account. See Reading an S3 bucket in another AWS account for the full walkthrough. It is identical for every family, and only source: and the prefix differ.
Check the real key path before setting bucket_list_prefix. A prefix that matches nothing lists zero objects and reports no error, which looks exactly like “no traffic yet”.Confirm with: aws s3 ls s3://my-flow-logs/ --recursive | head -3Leaving it out entirely reads the whole bucket, which always works but is slower on a large one.

Step 4: Restart and verify

Then open SIEM → Security Events and filter on dataSource: aws_vpc_flow_logs.

What gets collected

Each flow record becomes one security event: Severity is low for accepted traffic and medium for rejected traffic, before the detection rules run.

Configuration reference

queue_url and bucket_arn are mutually exclusive, so set one, not both.

How it behaves

  • Only new logs are collected. Collection begins when the agent first starts with this configuration.
  • Restarts are safe. The agent records which objects it has already sent, so restarting the agent or rebooting the machine never re-sends them.
  • Volume. Flow logs are far higher-volume than CloudTrail. Start with one VPC before enabling it fleet-wide.

Troubleshooting

Errors appear in the agent log at /var/log/atatus-infra-agent/.