Skip to main content
Use this guide when your Macs’ Beacon telemetry should land in your own AWS account first, with Asymptote reading a copy for your dashboard. It covers the whole setup in order: the bucket and access, the details to send us, the rollout to your Macs, and how to confirm it works.

What you’ll set up

Beacon on each Mac records agent activity and uploads it to your bucket with a key that can only write. For each new object, S3 posts a notice to a queue. Asymptote reads the queues to learn which objects are new, fetches them with a read-only key, and loads them into your dashboard. The bucket stays yours and keeps every object. In your AWS account:
  • A new S3 bucket just for Beacon, with public access blocked, ACLs disabled, HTTPS required, default encryption, and versioning.
  • beacon-endpoint-writer, an IAM user your Macs upload with. It can add objects below your Beacon prefix and nothing else.
  • asymptote-s3-reader, an IAM user Asymptote reads with. It can list the bucket, read objects below the prefix, and consume the queues.
  • Two SQS queues, one for agent activity (runtime) and one for inventory, each with a dead-letter queue. They let Asymptote load objects in any order, so an upload that arrives late is never skipped.
Objects land here:
Asymptote receives the telemetry your Macs upload in full, after Beacon’s local redaction of secrets: prompts, the commands agents ran and their output, tool inputs and outputs, and file paths and diffs.

Before you start

1. Create the bucket and access

Pick a root prefix such as beacon-prod. Beacon adds runtime/ and inventory/ below it, so don’t put either in the prefix. Create everything in the region you want the bucket in.
Create a main.tf in a new directory. Change the region, bucket name, and prefix:
main.tf
Apply it:
Review the plan and type yes. It’s working when the apply ends with Apply complete! Resources: 18 added and prints the outputs. Keep them for step 3. Encryption with your own KMS key, object expiry, and other options are in the base module’s variables.tf.

2. Create the access keys

Create both keys with the AWS CLI, so their secrets never enter Terraform state:
AWS shows each secret only once. The keys start with AKIA and don’t expire.
  • Writer key: store it in your MDM’s secret store. Your Macs use it in step 4.
  • Reader key: you send it to Asymptote in step 3. Don’t keep it anywhere else.

3. Send Asymptote the details

Send these through the secure channel your Asymptote contact gives you. Don’t send the secret access key by email or chat. Asymptote connects the bucket to your organization and tells you when it’s done.

4. Roll out Beacon to your Macs

Try it on one Mac first, or go straight to your MDM.
Install Beacon. On an Apple Silicon Mac, in Terminal while logged in at the Mac:
Download, verify, and install
The block checks the package against its published SHA-256 and its Apple signature before installing. pkgutil should print Status: signed by a developer certificate issued by Apple for distribution. The package sets up Claude Code and Codex for the logged-in user; Try Beacon on One Mac covers what it installs and how to add other agents.Start the forwarder with your values from step 1 and the writer key from step 2:
It’s working when the output shows the forwarder’s state = running. The helper keeps the key in a root-only file for the forwarder service, so you can close Terminal. When you roll out with an MDM later, this Mac gets the same setup again.

5. Confirm it works

On a Mac with Beacon installed, write a test event:
The forwarder uploads in batches, so allow up to five minutes. Then list the objects with your own AWS identity, because the writer can’t read the bucket:
Asymptote loads each new object within a few minutes of it landing. Your Asymptote contact confirms when the first events arrive.

Operate

Rotate the keys

IAM allows two keys per user, so the old key keeps working while you switch.
  • Writer: create a second key, give it to your MDM and rerun its forwarder setup on every Mac, then delete the old key.
  • Reader: create a second key, send it to Asymptote, and delete the old key once Asymptote confirms the switch.

Remove

  1. Ask Asymptote to disconnect the bucket.
  2. Remove the forwarder from your Macs. Uninstalling Beacon removes it.
  3. Delete both access keys: aws iam delete-access-key --user-name <user> --access-key-id <key id>. IAM refuses to delete a user that still has keys.
  4. Run terraform destroy. It stops at a bucket that still holds objects. To delete the telemetry too, add force_destroy = true to the beacon_s3 module, run terraform apply, and then destroy.

Troubleshooting

Someone else, in any AWS account, already has a bucket with that name. Choose another bucket name.
The provider that runs the reader module is in a different region from the bucket. Use the same provider, in the bucket’s region, for both modules.
Check the queues: aws sqs get-queue-attributes --queue-url <queue url> --attribute-names ApproximateNumberOfMessages. A number that keeps growing means Asymptote isn’t consuming it yet; send your Asymptote contact the queue URL. Messages that failed ten times wait in the -dlq queue for 14 days.
terraform destroy is trying to delete a user that still has a key you created with the AWS CLI. Delete the key first.

Google Cloud Storage

The same setup with a Cloud Storage bucket.

Beacon with Fleet and S3

Roll out Beacon with Fleet.

AWS S3 with Terraform

The bucket and writer on their own, without Asymptote reading them.

Hosting options

Compare Managed, Open Source, and Private Deployment.