Skip to content

Audit what destroys data and what changes who can reach it - #24

Merged
sinhaparth5 merged 1 commit into
masterfrom
13-audit-bucket
Aug 20, 2026
Merged

Audit what destroys data and what changes who can reach it#24
sinhaparth5 merged 1 commit into
masterfrom
13-audit-bucket

Conversation

@sinhaparth5

Copy link
Copy Markdown
Owner

The log recorded credential, user, quota and upload-limit changes, but deleting a bucket — and everything in it — left no trace, and neither did making one anonymously readable. "Who made this public, and when" is the first question an incident asks and the one thing this log could not answer.

Adds bucket.create, bucket.delete, bucket.access, bucket.cors, bucket.policy, object.upload and object.delete. The access and policy entries record the resulting visibility read back from the bucket record rather than what was requested, so the reader is not left re-evaluating a stored policy document months later — and a policy that replaces an earlier toggle shows up as the exposure it actually produced.

Session events already existed; they now carry the source address, which is the field that makes a sign-in record useful. Peer address, never X-Forwarded-For: that header is written by whoever spoke to us last, and recording an attacker's chosen value as the source of a sign-in is worse than recording none.

kAuditCapacity 5000 -> 20000, because object events arrive per click rather than per account change and the window in time is what the number really chooses. S3 signature failures stay unlogged and the write discipline is unchanged — no fsync, dropped when the I/O queue is full.

The log recorded credential, user, quota and upload-limit changes, but deleting
a bucket — and everything in it — left no trace, and neither did making one
anonymously readable. "Who made this public, and when" is the first question an
incident asks and the one thing this log could not answer.

Adds bucket.create, bucket.delete, bucket.access, bucket.cors, bucket.policy,
object.upload and object.delete. The access and policy entries record the
resulting visibility read back from the bucket record rather than what was
requested, so the reader is not left re-evaluating a stored policy document
months later — and a policy that replaces an earlier toggle shows up as the
exposure it actually produced.

Session events already existed; they now carry the source address, which is the
field that makes a sign-in record useful. Peer address, never X-Forwarded-For:
that header is written by whoever spoke to us last, and recording an attacker's
chosen value as the source of a sign-in is worse than recording none.

kAuditCapacity 5000 -> 20000, because object events arrive per click rather
than per account change and the window in time is what the number really
chooses. S3 signature failures stay unlogged and the write discipline is
unchanged — no fsync, dropped when the I/O queue is full.
@sinhaparth5
sinhaparth5 merged commit 6c8fb65 into master Aug 20, 2026
3 checks passed
@sinhaparth5
sinhaparth5 deleted the 13-audit-bucket branch August 20, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Audit bucket and object destruction, access changes, and successful sign-in

1 participant