resource "aws_s3_bucket" "backups" { bucket = local.backup_bucket_name lifecycle { prevent_destroy = true } } resource "aws_s3_bucket_versioning" "backups" { bucket = aws_s3_bucket.backups.id versioning_configuration { status = "Enabled" } } resource "aws_s3_bucket_server_side_encryption_configuration" "backups" { bucket = aws_s3_bucket.backups.id rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } resource "aws_s3_bucket_public_access_block" "backups" { bucket = aws_s3_bucket.backups.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } resource "aws_s3_bucket_ownership_controls" "backups" { bucket = aws_s3_bucket.backups.id rule { object_ownership = "BucketOwnerEnforced" } } resource "aws_s3_bucket_lifecycle_configuration" "backups" { bucket = aws_s3_bucket.backups.id rule { id = "archive-to-glacier" status = "Enabled" filter {} transition { days = 30 storage_class = "GLACIER" } } rule { id = "cleanup-noncurrent-versions" status = "Enabled" filter {} noncurrent_version_expiration { noncurrent_days = 90 } } depends_on = [aws_s3_bucket_versioning.backups] } resource "aws_s3_bucket" "replica" { provider = aws.replica bucket = local.replica_bucket_name object_lock_enabled = true lifecycle { prevent_destroy = true } } resource "aws_s3_bucket_versioning" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id versioning_configuration { status = "Enabled" } } resource "aws_s3_bucket_object_lock_configuration" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id rule { default_retention { mode = "GOVERNANCE" days = 90 } } } resource "aws_s3_bucket_server_side_encryption_configuration" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } resource "aws_s3_bucket_public_access_block" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } resource "aws_s3_bucket_ownership_controls" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id rule { object_ownership = "BucketOwnerEnforced" } } resource "aws_s3_bucket_lifecycle_configuration" "replica" { provider = aws.replica bucket = aws_s3_bucket.replica.id rule { id = "archive-to-glacier" status = "Enabled" filter {} transition { days = 30 storage_class = "GLACIER" } } rule { id = "cleanup-noncurrent-versions" status = "Enabled" filter {} noncurrent_version_expiration { noncurrent_days = 90 } } depends_on = [aws_s3_bucket_versioning.replica] } resource "aws_s3_bucket_replication_configuration" "backups" { bucket = aws_s3_bucket.backups.id role = aws_iam_role.replication.arn rule { id = "replicate-to-west" status = "Enabled" priority = 1 filter {} delete_marker_replication { status = "Disabled" } destination { bucket = aws_s3_bucket.replica.arn storage_class = "STANDARD" } } depends_on = [ aws_s3_bucket_versioning.backups, aws_s3_bucket_versioning.replica, ] } resource "aws_s3_bucket" "artifacts" { bucket = local.artifacts_bucket_name } resource "aws_s3_bucket_versioning" "artifacts" { bucket = aws_s3_bucket.artifacts.id versioning_configuration { status = "Enabled" } } resource "aws_s3_bucket_server_side_encryption_configuration" "artifacts" { bucket = aws_s3_bucket.artifacts.id rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } resource "aws_s3_bucket_public_access_block" "artifacts" { bucket = aws_s3_bucket.artifacts.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } resource "aws_s3_bucket_ownership_controls" "artifacts" { bucket = aws_s3_bucket.artifacts.id rule { object_ownership = "BucketOwnerEnforced" } } resource "aws_s3_bucket_lifecycle_configuration" "artifacts" { bucket = aws_s3_bucket.artifacts.id rule { id = "expire-noncurrent-packages" status = "Enabled" filter {} noncurrent_version_expiration { noncurrent_days = 30 } } depends_on = [aws_s3_bucket_versioning.artifacts] }