Two defaults in the S3 surface are cost tuning, not hardening, and can surprise users of a security library:
SecureBucket.defaultLifecycleRules() (src/resources/s3-bucket/secure-bucket.ts:130-150) transitions objects to IA at 30 days, Glacier at 90, Deep Archive at 365, and expires noncurrent versions at 365 days.
SecureBucketDefaults (the permissive injector) injects an intelligent-tiering configuration with archive tiers at 90/180 days.
Consequences a user might not expect from a "secure bucket": Glacier/Deep-Archive objects have retrieval latency (minutes to hours) and retrieval costs; noncurrent-version expiry silently deletes old versions after a year, which interacts with the versioning-as-a-security-control story (ransomware/deletion recovery).
Question to settle
- Should lifecycle/tiering be opt-in (e.g. a
costOptimization prop or a separate blueprint) rather than a default?
- If they stay defaults, they should be documented loudly in the README with the retrieval/deletion consequences spelled out.
Filing as a design question — needs a maintainer decision before anyone codes anything.
Two defaults in the S3 surface are cost tuning, not hardening, and can surprise users of a security library:
SecureBucket.defaultLifecycleRules()(src/resources/s3-bucket/secure-bucket.ts:130-150) transitions objects to IA at 30 days, Glacier at 90, Deep Archive at 365, and expires noncurrent versions at 365 days.SecureBucketDefaults(the permissive injector) injects an intelligent-tiering configuration with archive tiers at 90/180 days.Consequences a user might not expect from a "secure bucket": Glacier/Deep-Archive objects have retrieval latency (minutes to hours) and retrieval costs; noncurrent-version expiry silently deletes old versions after a year, which interacts with the versioning-as-a-security-control story (ransomware/deletion recovery).
Question to settle
costOptimizationprop or a separate blueprint) rather than a default?Filing as a design question — needs a maintainer decision before anyone codes anything.