HCA Log Archival — IaC Deployment Plan
Phase 1 — Foundation
Bucket naming standard has been set to follow the pattern hca-archival-usw2-<source>. This follows kebab-case source token, no account ID as all buckets are in the same Log Archival account.
- Current trail inventory (per source doc §2.9) shows no digest validation column populated for any trail. Confirm this is actually off today before treating it as a change.
- Create 6 new S3 buckets, namely:
hca-archival-usw2-vpc-flowhca-archival-usw2-tgw-flowhca-archival-usw2-guarddutyhca-archival-usw2-wafhca-archival-usw2-route53hca-archival-usw2-elb
- Enable these on each bucket: delete-deny bucket policy, Object Lock (compliance mode), SSE-KMS, versioning, lifecycle rule (S3 Standard to Glacier Flexible Retrieval at 90 days, expire at 366 days).
- No need to rename existing buckets for CloudTrail/Config as both are already centralized in
aws-controltower-logs-095509168441-us-west-2(Control Tower managed). - Enable log file integrity validation (digest files) on CloudTrail trails not currently covered by Control Tower defaults.
Phase 2 — VPC Flow, TGW, Route 53 second-feed delivery
- Add a second VPC Flow Log delivery, targeting
hca-archival-usw2-vpc-flow, on all VPCs currently logging to CloudWatch. Existing CloudWatch flow log groups are left untouched. - Add a second Transit Gateway Flow Log delivery, targeting
hca-archival-usw2-tgw-flow. ExistingHCA-TGW-LogGroupis left untouched. - Stand up a new Route 53 Resolver query logging config, targeting
hca-archival-usw2-route53.- Note: current Route 53 configs (
dns-poc-logs,LogGroup_NewDev) are POC/Dev-labeled in the source doc. Decide whether this new config replaces or productionizes those two, or stands up alongside them.
- Note: current Route 53 configs (
- No changes to existing CloudWatch feeds or any alerting built on them in this phase.
Phase 3 — GuardDuty findings export + WAF S3 delivery
- Enable GuardDuty publishing destination on each account (HCA-Non-Prod-Dev, HCA-Non-Prod-QA, HCA-Prod, HCA-Non-Prod), targeting
hca-archival-usw2-guardduty, with a KMS key policy allowing GuardDuty write access.- Note: this covers S3-side retention only. The live CloudWatch log group (
/aws/guardduty/malware-scan-events) stays at 3-month retention, with no change to that in this phase per current direction.
- Note: this covers S3-side retention only. The live CloudWatch log group (
- Stand up a CloudWatch subscription filter to Lambda to S3 delivery path for WAF logs, targeting
hca-archival-usw2-waf. Existing CloudWatch feed (aws-waf-logs-step-cognito-userpool) stays live and untouched.
Phase 4 — ALB access log repoint
- Repoint access logs on
prod-mobileapp-albandHCA-PROD-Step-Tool-ALBfrom their current local S3 destinations tohca-archival-usw2-elb. - Current buckets
prod-mobileapp-alb-logsandstep-alb-access-logsare left as-is. New logs land inhca-archival-usw2-elb, and old buckets are not touched or cleaned up by this plan. - Sequence as its own change window, since this touches production load balancers directly.
Phase 5 — NLB access logging (new capability)
- Enable TLS listener access logging, targeting
hca-archival-usw2-elb, on the 5 currently-unlogged production NLBs:NLB-SASVIYA-TO-PROD-SMTP,NLB-Redshift-serverless-PROD,NLB-SASVIYA-TO-PROD-DB,mobile-api-nlb,HCA-PROD-Step-Tool-NLB.- Note: this is net-new capability enablement, not a repoint. Confirm listener types on each NLB actually support access logging before rollout, since there is no existing config to fall back on if something is unsupported.
- Prove out the config on one NLB before rolling to all 5, given no existing logging baseline to compare against on failure.
Phase 6 — Guardrails
- Enforce, per log source, that deployments are blocked when the corresponding logging/export config is absent, disabled, or points to a non-approved destination.
- Sources covered: AWS Config, CloudTrail, VPC Flow Logs, TGW Flow Logs, ELB/ALB access logging, Route 53 Resolver query logging, AWS WAF, GuardDuty. Each source's approved destination is the corresponding
hca-archival-usw2-<source>bucket, or the existing Control Tower bucket for Config/CloudTrail. - Sequence last, since this depends on bucket names being live and the delivery paths from Phases 1 through 5 being proven in production.