This project aims to automate the creation, management, and deletion of Amazon S3 buckets while implementing essential features such as versioning, encryption, and lifecycle policies using Terraform and AWS CLI.
AmazonS3FullAccess
and IAMFullAccess
permissionssudo apt install awscli -y # For Ubuntu
brew install awscli # For Mac
aws configure
Provide:
us-east-1
)json
)We will use Terraform to:
mkdir s3-management-project && cd s3-management-project
touch main.tf variables.tf outputs.tf
variables.tf
variable "bucket_name" {
description = "The name of the S3 bucket"
type = string
}
variable "region" {
description = "AWS region"
type = string
default = "us-east-1"
}
main.tf
provider "aws" {
region = var.region
}
resource "aws_s3_bucket" "s3_bucket" {
bucket = var.bucket_name
}
resource "aws_s3_bucket_versioning" "versioning" {
bucket = aws_s3_bucket.s3_bucket.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "encryption" {
bucket = aws_s3_bucket.s3_bucket.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_lifecycle_configuration" "lifecycle" {
bucket = aws_s3_bucket.s3_bucket.id
rule {
id = "delete-old-versions"
status = "Enabled"
noncurrent_version_expiration {
noncurrent_days = 30
}
}
}
output "bucket_name" {
value = aws_s3_bucket.s3_bucket.id
}
terraform init
terraform validate
terraform apply -auto-approve
aws s3 ls
aws s3 cp test-file.txt s3://your-bucket-name/
aws s3api list-object-versions --bucket your-bucket-name
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
aws s3api put-bucket-policy --bucket your-bucket-name --policy file://policy.json
aws s3 rm s3://your-bucket-name/test-file.txt
aws s3api list-object-versions --bucket your-bucket-name
To clean up:
terraform destroy -auto-approve
Alternatively, using AWS CLI:
aws s3 rb s3://your-bucket-name --force
This project covered:
This approach ensures automated, secure, and compliant S3 bucket management. 🚀