Repository navigation
v0.3.0 — End-to-end tested
What's Changed
Three bugs discovered and fixed during end-to-end smoke testing:
Fixed
-
S3 bucket policy
StringNotEqualsIfExistsincorrect for Deny statements — The v0.2.1 fix was wrong:StringNotEqualsIfExistson a Deny evaluates totruewhen the condition key is absent, which still blocks uploads without explicit encryption headers. Replaced withStringNotEquals+Nullcondition guard across all three buckets (6 statements). The Deny now only fires when the header is explicitly present with a non-KMS value; absent headers fall through to bucket default SSE-KMS. -
SFTP user IAM trust policy used wrong ARN type — Transfer Family passes a user ARN (
arn:aws:transfer:region:account:user/server-id/username), not a server ARN, when assuming the data access role. Changedaws:SourceArnfromserver/*touser/server-id/*. -
SFTP
ListBucketcondition too restrictive — Thes3:prefixcondition only alloweduploads/dave/*but Transfer Family also needs to stat the home directory prefix itself (uploads/davewithout trailing slash). Added the bare prefix as a second allowed value.
Verified
End-to-end pipeline tested:
| Test | GuardDuty Result | Lambda Route | SNS Alert |
|---|---|---|---|
| Clean text file (SFTP upload) | NO_THREATS_FOUND | → egress bucket | No |
| EICAR test file (SFTP upload) | THREATS_FOUND | → quarantine bucket | Yes (email delivered) |
| SFTP egress download | — | File downloaded successfully | — |
Full Changelog: v0.2.2...v0.3.0