NEW: s3 bucket module
This commit is contained in:
parent
6584960d1a
commit
70d4d78533
39
modules/storage/s3_bucket_2023/README.md
Normal file
39
modules/storage/s3_bucket_2023/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# s3_bucket_2023 module
|
||||||
|
This module creates s3 bucket, following new terraform standards.
|
||||||
|
|
||||||
|
If lifecycle policy is enabled, provide the expiration days.
|
||||||
|
Transition days are hard-coded with intelligent-tiering class to simplify administration.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
```hcl
|
||||||
|
module "bucket1" {
|
||||||
|
source = "../../../../whk1-bea-sys-ss-prd-codecommit-sharedmodules/Storage/s3_bucket_2023"
|
||||||
|
|
||||||
|
bucket_name = var.bucket_name1
|
||||||
|
bucket_policy_json = jsonencode(
|
||||||
|
{
|
||||||
|
"Version" : "2012-10-17",
|
||||||
|
"Id" : "",
|
||||||
|
"Statement" : [
|
||||||
|
{
|
||||||
|
"Sid" : "Set permissions for objects",
|
||||||
|
"Effect" : "Allow",
|
||||||
|
"Principal" : {
|
||||||
|
"AWS" : "851239346925"
|
||||||
|
},
|
||||||
|
"Action" : ["s3:ReplicateObject", "s3:ReplicateDelete"],
|
||||||
|
"Resource" : "arn:aws:s3:::${var.bucket_name1}/*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
enable_encryption = true
|
||||||
|
encryption_key_arn = var.encryption_key_arn
|
||||||
|
enable_versioning = false
|
||||||
|
enable_bucket_logging = false
|
||||||
|
enable_bucket_lifecycle = true
|
||||||
|
current_version_expiration_days = 731
|
||||||
|
noncurrent_version_expiration_days = 731
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
108
modules/storage/s3_bucket_2023/main.tf
Normal file
108
modules/storage/s3_bucket_2023/main.tf
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
resource "aws_s3_bucket" "this" {
|
||||||
|
bucket = var.bucket_name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_public_access_block" "block_public_access" {
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
|
||||||
|
block_public_acls = true
|
||||||
|
block_public_policy = true
|
||||||
|
ignore_public_acls = true
|
||||||
|
restrict_public_buckets = true
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_policy" "bucket_policy" {
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
policy = var.bucket_policy_json
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_lifecycle_configuration" "lifecycle" {
|
||||||
|
count = var.enable_bucket_lifecycle ? 1 : 0
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
rule {
|
||||||
|
id = "CurrentVersion"
|
||||||
|
|
||||||
|
expiration {
|
||||||
|
days = var.current_version_expiration_days
|
||||||
|
}
|
||||||
|
|
||||||
|
status = "Enabled"
|
||||||
|
|
||||||
|
transition {
|
||||||
|
days = 15
|
||||||
|
storage_class = "INTELLIGENT_TIERING"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rule {
|
||||||
|
id = "NonCurrentVersion"
|
||||||
|
|
||||||
|
noncurrent_version_expiration {
|
||||||
|
noncurrent_days = var.noncurrent_version_expiration_days
|
||||||
|
}
|
||||||
|
|
||||||
|
noncurrent_version_transition {
|
||||||
|
noncurrent_days = 15
|
||||||
|
storage_class = "INTELLIGENT_TIERING"
|
||||||
|
}
|
||||||
|
|
||||||
|
status = var.enable_versioning ? "Enabled" : "Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_intelligent_tiering_configuration" "intel_tiering_config" {
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
name = "IntelligentTieringArchiveConfigurations"
|
||||||
|
|
||||||
|
tiering {
|
||||||
|
access_tier = "DEEP_ARCHIVE_ACCESS"
|
||||||
|
days = 180 # minimum
|
||||||
|
}
|
||||||
|
tiering {
|
||||||
|
access_tier = "ARCHIVE_ACCESS"
|
||||||
|
days = 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_logging" "logging" {
|
||||||
|
count = var.enable_bucket_logging ? 1 : 0
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
target_bucket = var.logging_bucket_id
|
||||||
|
target_prefix = "s3-log/"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_server_side_encryption_configuration" "encryption" {
|
||||||
|
count = var.enable_encryption ? 1 : 0
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
rule {
|
||||||
|
apply_server_side_encryption_by_default {
|
||||||
|
kms_master_key_id = var.encryption_key_arn
|
||||||
|
sse_algorithm = length(var.encryption_key_arn) > 0 ? "aws:kms" : "AES256"
|
||||||
|
}
|
||||||
|
bucket_key_enabled = length(var.encryption_key_arn) > 0 ? true : false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_versioning" "versioning" {
|
||||||
|
count = var.enable_versioning ? 1 : 0
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
versioning_configuration {
|
||||||
|
status = "Enabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_replication_configuration" "replication" {
|
||||||
|
count = var.enable_replication && var.enable_versioning ? 1 : 0
|
||||||
|
role = var.replication_role_arn
|
||||||
|
bucket = aws_s3_bucket.this.id
|
||||||
|
rule {
|
||||||
|
id = "replrule1"
|
||||||
|
status = "Enabled"
|
||||||
|
destination {
|
||||||
|
bucket = var.replication_dest_bucket_name
|
||||||
|
storage_class = "INTELLIGENT_TIERING"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
3
modules/storage/s3_bucket_2023/outputs.tf
Normal file
3
modules/storage/s3_bucket_2023/outputs.tf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
output bucket_name {
|
||||||
|
value = aws_s3_bucket.this.id
|
||||||
|
}
|
51
modules/storage/s3_bucket_2023/variables.tf
Normal file
51
modules/storage/s3_bucket_2023/variables.tf
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
variable bucket_name {}
|
||||||
|
variable bucket_policy_json {}
|
||||||
|
variable current_version_expiration_days {
|
||||||
|
type = number
|
||||||
|
default = 2560
|
||||||
|
description = "731 for flowlogs"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable noncurrent_version_expiration_days {
|
||||||
|
type = number
|
||||||
|
default = 2560
|
||||||
|
description = "731 for flowlogs"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable enable_bucket_logging {
|
||||||
|
type = bool
|
||||||
|
}
|
||||||
|
variable logging_bucket_id {
|
||||||
|
type = string
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
variable enable_encryption {
|
||||||
|
type = bool
|
||||||
|
}
|
||||||
|
variable encryption_key_arn {
|
||||||
|
type = string
|
||||||
|
default = ""
|
||||||
|
description = "Leave blank to use AES256"
|
||||||
|
}
|
||||||
|
variable enable_versioning {
|
||||||
|
type = bool
|
||||||
|
}
|
||||||
|
variable enable_bucket_lifecycle {
|
||||||
|
type = bool
|
||||||
|
}
|
||||||
|
|
||||||
|
variable enable_replication {
|
||||||
|
type = bool
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
|
||||||
|
variable replication_role_arn {
|
||||||
|
type = string
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
variable replication_dest_bucket_name {
|
||||||
|
type = string
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
10
modules/storage/s3_bucket_2023/versions.tf
Normal file
10
modules/storage/s3_bucket_2023/versions.tf
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
terraform {
|
||||||
|
required_version = ">= 1.3.0"
|
||||||
|
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = ">= 3.72.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user