diff --git a/alarms.tf b/alarms.tf
index 274ac9a6177f13554482b203293f5d80253191cb..137491f00c5542c71b81fa87eef254c0a23d3cad 100644
--- a/alarms.tf
+++ b/alarms.tf
@@ -11,7 +11,6 @@ resource "aws_cloudwatch_metric_alarm" "invocations" {
   ok_actions                = [local.topic_arn]
   period                    = (var.rate + 1) * 60
   statistic                 = "Sum"
-  tags                      = local.common_tags
   threshold                 = 1
 
   dimensions = {
@@ -36,7 +35,6 @@ resource "aws_cloudwatch_metric_alarm" "errors" {
   ok_actions                = [local.topic_arn]
   period                    = (var.rate + 1) * 60
   statistic                 = "Sum"
-  tags                      = local.common_tags
   threshold                 = 0
 
   dimensions = {
diff --git a/functions.tf b/functions.tf
index 74c5367d1050d3fac22da6b6d127b60631bc930c..2ce0c5e6186b5fa53172a612c22f1d776c5150a6 100644
--- a/functions.tf
+++ b/functions.tf
@@ -1,5 +1,5 @@
 locals {
-  function_name_prefix = local.Name
+  function_name_prefix = local.name
   functions = [
     "_dns",
     "gitlab",
@@ -40,9 +40,8 @@ locals {
 }
 
 resource "aws_iam_role" "lambda" {
-  name               = local.Name
+  name               = local.name
   assume_role_policy = local.lambda_assume_policy_doc
-  tags               = local.common_tags
 }
 
 locals {
@@ -125,7 +124,6 @@ resource "aws_lambda_function" "function" {
   description                    = "${local.module} ${local.functions[count.index]} check in ${local.env}."
   memory_size                    = var.memory_size
   reserved_concurrent_executions = -1
-  tags                           = local.common_tags
   timeout                        = var.timeout
 
   environment {
diff --git a/log-groups.tf b/log-groups.tf
index a50e4fa9b0dad5b06710ff1e554037afdd990551..2316e362c819273b843d9ac68bd608b3a9dbf6a2 100644
--- a/log-groups.tf
+++ b/log-groups.tf
@@ -3,7 +3,6 @@ resource "aws_cloudwatch_log_group" "lambda" {
   count             = length(local.function_names)
   name              = "/aws/lambda/${local.function_names[count.index]}"
   retention_in_days = var.log_retention
-  tags              = local.common_tags
 }
 
 locals {
@@ -39,9 +38,8 @@ locals {
 }
 
 resource "aws_iam_policy" "log" {
-  name   = "${local.module}-${local.env}-log"
+  name   = "${local.name}-log"
   policy = local.log_policy_doc
-  tags   = local.common_tags
 }
 
 locals {
diff --git a/main.tf b/main.tf
index 320abad2ea7b023fd0aab9a77a052d24a628a705..cfc07b1ba1780728b4262cb8dfe5ca30c99e2ac0 100644
--- a/main.tf
+++ b/main.tf
@@ -1,5 +1,11 @@
 terraform {
   backend "http" {}
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = "~> 4.0"
+    }
+  }
 }
 
 locals {
@@ -8,8 +14,9 @@ locals {
   common_tags = {
     Environment = local.env
     Module      = local.module
+    Name        = local.name
   }
-  Name = "${local.module}-${local.env}"
+  name = "${local.module}-${local.env}"
 }
 
 output "env" {
@@ -35,11 +42,13 @@ output "region" {
 
 provider "aws" {
   region = var.region
+  default_tags {
+    tags = local.common_tags
+  }
 }
 
 resource "aws_resourcegroups_group" "group" {
-  name = local.Name
-  tags = local.common_tags
+  name = local.name
   resource_query {
     query = <<EOF
 {
diff --git a/s3.tf b/s3.tf
index 0786116057d31d0a8defb985a56606310807c4be..8de9772be958914430207c89dd4ff64ca187c097 100644
--- a/s3.tf
+++ b/s3.tf
@@ -1,16 +1,11 @@
 resource "aws_s3_bucket" "payloads" {
   # checkov:skip=CKV_AWS_18
   # checkov:skip=CKV_AWS_19
+  # checkov:skip=CKV_AWS_21
   # checkov:skip=CKV_AWS_144
   # checkov:skip=CKV_AWS_145
-  bucket        = local.Name
-  tags          = local.common_tags
-  acl           = "private"
+  bucket        = local.name
   force_destroy = true
-
-  versioning {
-    enabled = true
-  }
 }
 
 
@@ -19,6 +14,18 @@ locals {
   payloads_bucket_name = aws_s3_bucket.payloads.bucket
 }
 
+resource "aws_s3_bucket_versioning" "payloads" {
+  bucket = local.payloads_bucket_name
+  versioning_configuration {
+    status = "Enabled"
+  }
+}
+
+resource "aws_s3_bucket_acl" "payloads" {
+  acl    = "private"
+  bucket = local.payloads_bucket_name
+}
+
 resource "aws_s3_bucket_public_access_block" "payloads" {
   bucket = aws_s3_bucket.payloads.bucket
 
@@ -38,19 +45,18 @@ output "payloads_bucket_name" {
   value       = local.payloads_bucket_name
 }
 
-resource "aws_s3_bucket_object" "payload" {
+resource "aws_s3_object" "payload" {
   # checkov:skip=CKV_AWS_186
   bucket = local.payloads_bucket_name
   key    = "payload.zip"
   source = "payload.zip"
   etag   = filemd5("payload.zip")
-  tags   = local.common_tags
 }
 
 locals {
-  payload_object_etag    = aws_s3_bucket_object.payload.etag
-  payload_object_name    = aws_s3_bucket_object.payload.key
-  payload_object_version = aws_s3_bucket_object.payload.version_id
+  payload_object_etag    = aws_s3_object.payload.etag
+  payload_object_name    = aws_s3_object.payload.key
+  payload_object_version = aws_s3_object.payload.version_id
 }
 
 output "payload_object_etag" {
diff --git a/sms-notify.tf b/sms-notify.tf
index a95240836e40fe76a12db4243da0ef3e34dc7d62..f096f04563b104318bef68770b78efb7c992b003 100644
--- a/sms-notify.tf
+++ b/sms-notify.tf
@@ -28,7 +28,6 @@ resource "aws_lambda_function" "sms_notify" {
   description                    = "Send SMS message notification using Twilio."
   memory_size                    = var.memory_size
   reserved_concurrent_executions = -1
-  tags                           = local.common_tags
   timeout                        = var.timeout
 
   environment {
@@ -111,7 +110,6 @@ resource "aws_cloudwatch_log_group" "sms_notify" {
   # checkov:skip=CKV_AWS_158
   name              = "/aws/lambda/${local.function_name_prefix}-sms-notify"
   retention_in_days = var.log_retention
-  tags              = local.common_tags
 }
 
 locals {
@@ -149,7 +147,6 @@ locals {
 resource "aws_iam_policy" "sms_notify_log" {
   name   = "${local.module}-${local.env}-sms-notify-log"
   policy = local.sms_notify_log_policy_doc
-  tags   = local.common_tags
 }
 
 locals {
diff --git a/sns.tf b/sns.tf
index 98dce86245b1f7295d9b386eaca48bb48e5b8a28..44364284d184ca2c92ead04d9e5c0d00dfe42f6e 100644
--- a/sns.tf
+++ b/sns.tf
@@ -1,7 +1,6 @@
 resource "aws_sns_topic" "topic" {
   # checkov:skip=CKV_AWS_26
-  name = local.Name
-  tags = local.common_tags
+  name = local.name
 }
 
 locals {
@@ -61,9 +60,8 @@ locals {
 }
 
 resource "aws_iam_policy" "publish" {
-  name   = "${local.module}-${local.env}-publish"
+  name   = "${local.name}-publish"
   policy = local.sns_publish_policy_doc
-  tags   = local.common_tags
 }
 
 locals {
diff --git a/triggers.tf b/triggers.tf
index e08e5ecac5a964fa52365c302d6a7877bc2ee2fa..5bf55956411899fae1aef7a3a80b382f6d36b013 100644
--- a/triggers.tf
+++ b/triggers.tf
@@ -14,7 +14,6 @@ resource "aws_cloudwatch_event_rule" "schedule" {
   name                = local.function_names[count.index]
   description         = "Schedule to trigger ${local.function_names[count.index]} functions in ${local.env}."
   schedule_expression = "rate(${var.rate} minutes)"
-  tags                = local.common_tags
 }
 
 locals {