NEW: cloudtrail and cwl
This commit is contained in:
commit
d8b9390928
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
*.tfstate.backup
|
||||||
|
*.tfstate.lock
|
||||||
|
.terraform/
|
||||||
|
.DS_Store
|
||||||
|
*.iml
|
3
.idea/.gitignore
vendored
Normal file
3
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
@ -0,0 +1,11 @@
|
|||||||
|
data aws_caller_identity this {}
|
||||||
|
|
||||||
|
module cloudtrail-cwl {
|
||||||
|
source = "../../../modules/security_identity_compliance/cloudtrail_cwlogs"
|
||||||
|
application = var.application
|
||||||
|
environment = var.environment
|
||||||
|
customer-name = var.customer-name
|
||||||
|
project = var.project
|
||||||
|
aws-region-short = var.aws-region-short
|
||||||
|
default-tags = local.default-tags
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
provider "aws" {
|
||||||
|
region = var.aws-region
|
||||||
|
}
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_version = "> 0.12, < 0.13"
|
||||||
|
required_providers {
|
||||||
|
aws = "~> 3.6.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_availability_zones" "current" {}
|
@ -0,0 +1,298 @@
|
|||||||
|
{
|
||||||
|
"version": 4,
|
||||||
|
"terraform_version": "0.12.29",
|
||||||
|
"serial": 85,
|
||||||
|
"lineage": "26e4bec8-8ad6-a262-52c6-fbcad6b7a499",
|
||||||
|
"outputs": {},
|
||||||
|
"resources": [
|
||||||
|
{
|
||||||
|
"module": "module.cloudtrail-cwl",
|
||||||
|
"mode": "data",
|
||||||
|
"type": "aws_caller_identity",
|
||||||
|
"name": "this",
|
||||||
|
"provider": "provider.aws",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"account_id": "573340405480",
|
||||||
|
"arn": "arn:aws:sts::573340405480:assumed-role/Rackspace/racker-ken2-eade1d93",
|
||||||
|
"id": "2021-01-26 13:37:52.170204471 +0000 UTC",
|
||||||
|
"user_id": "AROAYK7OAJ3UH36WGNMWD:racker-ken2-eade1d93"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"module": "module.cloudtrail-cwl",
|
||||||
|
"mode": "data",
|
||||||
|
"type": "aws_iam_policy_document",
|
||||||
|
"name": "cloudtrail_bucket_policy",
|
||||||
|
"provider": "provider.aws",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "995859125",
|
||||||
|
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"AWSCloudTrailAclCheck\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:GetBucketAcl\",\n \"Resource\": \"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480\",\n \"Principal\": {\n \"Service\": \"cloudtrail.amazonaws.com\"\n }\n },\n {\n \"Sid\": \"AWSCloudTrailWrite\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:PutObject\",\n \"Resource\": \"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480/*\",\n \"Principal\": {\n \"Service\": [\n \"config.amazonaws.com\",\n \"cloudtrail.amazonaws.com\"\n ]\n }\n }\n ]\n}",
|
||||||
|
"override_json": null,
|
||||||
|
"policy_id": null,
|
||||||
|
"source_json": null,
|
||||||
|
"statement": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"s3:GetBucketAcl"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"cloudtrail.amazonaws.com"
|
||||||
|
],
|
||||||
|
"type": "Service"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [
|
||||||
|
"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480"
|
||||||
|
],
|
||||||
|
"sid": "AWSCloudTrailAclCheck"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"s3:PutObject"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"cloudtrail.amazonaws.com",
|
||||||
|
"config.amazonaws.com"
|
||||||
|
],
|
||||||
|
"type": "Service"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [
|
||||||
|
"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480/*"
|
||||||
|
],
|
||||||
|
"sid": "AWSCloudTrailWrite"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "2012-10-17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"module": "module.cloudtrail-cwl",
|
||||||
|
"mode": "data",
|
||||||
|
"type": "aws_iam_policy_document",
|
||||||
|
"name": "key-policy",
|
||||||
|
"provider": "provider.aws",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"id": "3662241047",
|
||||||
|
"json": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"Key usage by aws services\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"kms:ReEncrypt*\",\n \"kms:GenerateDataKey*\",\n \"kms:Encrypt\",\n \"kms:DescribeKey\",\n \"kms:Decrypt\"\n ],\n \"Resource\": \"*\",\n \"Principal\": {\n \"Service\": [\n \"sqs.amazonaws.com\",\n \"sns.amazonaws.com\",\n \"s3.amazonaws.com\",\n \"logs.amazonaws.com\",\n \"lambda.amazonaws.com\",\n \"guardduty.amazonaws.com\",\n \"events.amazonaws.com\",\n \"eks.amazonaws.com\",\n \"eks-nodegroup.amazonaws.com\",\n \"delivery.logs.amazonaws.com\",\n \"cloudwatch.amazonaws.com\",\n \"cloudtrail.amazonaws.com\",\n \"backup.amazonaws.com\",\n \"autoscaling.amazonaws.com\"\n ]\n }\n },\n {\n \"Sid\": \"Key administrator\",\n \"Effect\": \"Allow\",\n \"Action\": \"kms:*\",\n \"Resource\": \"*\",\n \"Principal\": {\n \"AWS\": \"573340405480\"\n }\n }\n ]\n}",
|
||||||
|
"override_json": null,
|
||||||
|
"policy_id": null,
|
||||||
|
"source_json": null,
|
||||||
|
"statement": [
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"kms:Decrypt",
|
||||||
|
"kms:DescribeKey",
|
||||||
|
"kms:Encrypt",
|
||||||
|
"kms:GenerateDataKey*",
|
||||||
|
"kms:ReEncrypt*"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"autoscaling.amazonaws.com",
|
||||||
|
"backup.amazonaws.com",
|
||||||
|
"cloudtrail.amazonaws.com",
|
||||||
|
"cloudwatch.amazonaws.com",
|
||||||
|
"delivery.logs.amazonaws.com",
|
||||||
|
"eks-nodegroup.amazonaws.com",
|
||||||
|
"eks.amazonaws.com",
|
||||||
|
"events.amazonaws.com",
|
||||||
|
"guardduty.amazonaws.com",
|
||||||
|
"lambda.amazonaws.com",
|
||||||
|
"logs.amazonaws.com",
|
||||||
|
"s3.amazonaws.com",
|
||||||
|
"sns.amazonaws.com",
|
||||||
|
"sqs.amazonaws.com"
|
||||||
|
],
|
||||||
|
"type": "Service"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"sid": "Key usage by aws services"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"actions": [
|
||||||
|
"kms:*"
|
||||||
|
],
|
||||||
|
"condition": [],
|
||||||
|
"effect": "Allow",
|
||||||
|
"not_actions": [],
|
||||||
|
"not_principals": [],
|
||||||
|
"not_resources": [],
|
||||||
|
"principals": [
|
||||||
|
{
|
||||||
|
"identifiers": [
|
||||||
|
"573340405480"
|
||||||
|
],
|
||||||
|
"type": "AWS"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resources": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"sid": "Key administrator"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": "2012-10-17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"module": "module.cloudtrail-cwl",
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_kms_key",
|
||||||
|
"name": "ctbucket-key",
|
||||||
|
"provider": "provider.aws",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"arn": "arn:aws:kms:ap-northeast-1:573340405480:key/ba826c02-4153-4056-ad75-2614912c6274",
|
||||||
|
"customer_master_key_spec": "SYMMETRIC_DEFAULT",
|
||||||
|
"deletion_window_in_days": 7,
|
||||||
|
"description": "",
|
||||||
|
"enable_key_rotation": false,
|
||||||
|
"id": "ba826c02-4153-4056-ad75-2614912c6274",
|
||||||
|
"is_enabled": true,
|
||||||
|
"key_id": "ba826c02-4153-4056-ad75-2614912c6274",
|
||||||
|
"key_usage": "ENCRYPT_DECRYPT",
|
||||||
|
"policy": "{\"Statement\":[{\"Action\":[\"kms:ReEncrypt*\",\"kms:GenerateDataKey*\",\"kms:Encrypt\",\"kms:DescribeKey\",\"kms:Decrypt\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"eks-nodegroup.amazonaws.com\",\"delivery.logs.amazonaws.com\",\"eks.amazonaws.com\",\"events.amazonaws.com\",\"autoscaling.amazonaws.com\",\"logs.amazonaws.com\",\"sqs.amazonaws.com\",\"backup.amazonaws.com\",\"guardduty.amazonaws.com\",\"cloudtrail.amazonaws.com\",\"lambda.amazonaws.com\",\"cloudwatch.amazonaws.com\",\"sns.amazonaws.com\",\"s3.amazonaws.com\"]},\"Resource\":\"*\",\"Sid\":\"Key usage by aws services\"},{\"Action\":\"kms:*\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::573340405480:root\"},\"Resource\":\"*\",\"Sid\":\"Key administrator\"}],\"Version\":\"2012-10-17\"}",
|
||||||
|
"tags": {
|
||||||
|
"Application": "infra",
|
||||||
|
"BuildDate": "20210126",
|
||||||
|
"Environment": "lab",
|
||||||
|
"Project": "lime",
|
||||||
|
"ServiceProvider": "Rackspace",
|
||||||
|
"TerraformMode": "managed"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"private": "bnVsbA=="
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"module": "module.cloudtrail-cwl",
|
||||||
|
"mode": "managed",
|
||||||
|
"type": "aws_s3_bucket",
|
||||||
|
"name": "ct-bucket",
|
||||||
|
"provider": "provider.aws",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"schema_version": 0,
|
||||||
|
"attributes": {
|
||||||
|
"acceleration_status": "",
|
||||||
|
"acl": "private",
|
||||||
|
"arn": "arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480",
|
||||||
|
"bucket": "lab-apne1-kf-lime-ctbucket-573340405480",
|
||||||
|
"bucket_domain_name": "lab-apne1-kf-lime-ctbucket-573340405480.s3.amazonaws.com",
|
||||||
|
"bucket_prefix": null,
|
||||||
|
"bucket_regional_domain_name": "lab-apne1-kf-lime-ctbucket-573340405480.s3.ap-northeast-1.amazonaws.com",
|
||||||
|
"cors_rule": [],
|
||||||
|
"force_destroy": false,
|
||||||
|
"grant": [],
|
||||||
|
"hosted_zone_id": "Z2M4EHUR26P7ZW",
|
||||||
|
"id": "lab-apne1-kf-lime-ctbucket-573340405480",
|
||||||
|
"lifecycle_rule": [
|
||||||
|
{
|
||||||
|
"abort_incomplete_multipart_upload_days": 0,
|
||||||
|
"enabled": false,
|
||||||
|
"expiration": [
|
||||||
|
{
|
||||||
|
"date": "",
|
||||||
|
"days": 90,
|
||||||
|
"expired_object_delete_marker": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "tf-s3-lifecycle-20210126114512193400000001",
|
||||||
|
"noncurrent_version_expiration": [],
|
||||||
|
"noncurrent_version_transition": [],
|
||||||
|
"prefix": "",
|
||||||
|
"tags": {},
|
||||||
|
"transition": [
|
||||||
|
{
|
||||||
|
"date": "",
|
||||||
|
"days": 30,
|
||||||
|
"storage_class": "INTELLIGENT_TIERING"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"logging": [],
|
||||||
|
"object_lock_configuration": [],
|
||||||
|
"policy": "{\"Statement\":[{\"Action\":\"s3:GetBucketAcl\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"cloudtrail.amazonaws.com\"},\"Resource\":\"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480\",\"Sid\":\"AWSCloudTrailAclCheck\"},{\"Action\":\"s3:PutObject\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"config.amazonaws.com\",\"cloudtrail.amazonaws.com\"]},\"Resource\":\"arn:aws:s3:::lab-apne1-kf-lime-ctbucket-573340405480/*\",\"Sid\":\"AWSCloudTrailWrite\"}],\"Version\":\"2012-10-17\"}",
|
||||||
|
"region": "ap-northeast-1",
|
||||||
|
"replication_configuration": [],
|
||||||
|
"request_payer": "BucketOwner",
|
||||||
|
"server_side_encryption_configuration": [
|
||||||
|
{
|
||||||
|
"rule": [
|
||||||
|
{
|
||||||
|
"apply_server_side_encryption_by_default": [
|
||||||
|
{
|
||||||
|
"kms_master_key_id": "arn:aws:kms:ap-northeast-1:573340405480:key/ba826c02-4153-4056-ad75-2614912c6274",
|
||||||
|
"sse_algorithm": "aws:kms"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": {
|
||||||
|
"Application": "infra",
|
||||||
|
"BuildDate": "20210126",
|
||||||
|
"Environment": "lab",
|
||||||
|
"Project": "lime",
|
||||||
|
"ServiceProvider": "Rackspace",
|
||||||
|
"TerraformMode": "managed"
|
||||||
|
},
|
||||||
|
"versioning": [
|
||||||
|
{
|
||||||
|
"enabled": false,
|
||||||
|
"mfa_delete": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"website": [],
|
||||||
|
"website_domain": null,
|
||||||
|
"website_endpoint": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
aws-region = "ap-northeast-1"
|
||||||
|
aws-region-short = "apne1"
|
||||||
|
customer-name = "kf"
|
||||||
|
environment = "lab"
|
||||||
|
project = "lime"
|
||||||
|
application = "infra"
|
@ -0,0 +1,20 @@
|
|||||||
|
variable "aws-region" {}
|
||||||
|
variable "aws-region-short" {}
|
||||||
|
variable "customer-name" {}
|
||||||
|
variable "environment" {}
|
||||||
|
variable "project" {}
|
||||||
|
variable "application" {}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
default-tags = {
|
||||||
|
ServiceProvider = "Rackspace"
|
||||||
|
Environment = var.environment
|
||||||
|
Project = var.project
|
||||||
|
Application = var.application
|
||||||
|
TerraformMode = "managed"
|
||||||
|
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||||
|
}
|
||||||
|
ct-bucket-name = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}-ctbucket-${data.aws_caller_identity.this.account_id}"
|
||||||
|
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||||
|
}
|
||||||
|
|
27
modules/global-variables/README.md
Normal file
27
modules/global-variables/README.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# global-variables module
|
||||||
|
This module provides global variables that can be used in all layers
|
||||||
|
|
||||||
|
|
||||||
|
## Basic Usage
|
||||||
|
Variables are stored in a map in outputs.tf
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
module "global-variables" {
|
||||||
|
source = "../../../../../../../../../terraform_modules_shared/global-variables"
|
||||||
|
}
|
||||||
|
|
||||||
|
// then retrieve global variable from the module. for example:
|
||||||
|
sys-sec-account = module.global-variables.vars.prod.sys-sec-acc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
| Name | Description | Type | Default | Required |
|
||||||
|
|------|-------------|:----:|:-----:|:-----:|
|
||||||
|
|
||||||
|
## Outputs
|
||||||
|
|
||||||
|
| Name | Description |
|
||||||
|
|------|-------------|
|
||||||
|
| vars | map of variables |
|
||||||
|
|
18
modules/global-variables/outputs.tf
Normal file
18
modules/global-variables/outputs.tf
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
output vars {
|
||||||
|
value = {
|
||||||
|
"prod" = {
|
||||||
|
sys-log-acc = "174677273835"
|
||||||
|
sys-ss-acc = "827262612707"
|
||||||
|
stm-acc = "205233139210"
|
||||||
|
sys-sec-acc = "033205333431"
|
||||||
|
mp-acc = "616302076454"
|
||||||
|
}
|
||||||
|
"plike" = {
|
||||||
|
sys-log-acc = "870377016556"
|
||||||
|
sys-ss-acc = "022321612404"
|
||||||
|
stm-acc = "313794563353"
|
||||||
|
sys-sec-acc = "240016403383"
|
||||||
|
mp-acc = "684740086263"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
resource "aws_iam_role" "iam_cloudtrial_cloudwatch_role" {
|
||||||
|
name = "${local.resource-prefix}-cwl-role"
|
||||||
|
assume_role_policy = data.aws_iam_policy_document.ct-role-assumerole-policy.json
|
||||||
|
description = "Enables AWS CloudTrail to deliver log to CloudWatch log"
|
||||||
|
tags = var.default-tags
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy" "iam_cloudtrial_cloudwatach_role_policy" {
|
||||||
|
name = "${local.resource-prefix}-cwl-role-policy"
|
||||||
|
role = aws_iam_role.iam_cloudtrial_cloudwatch_role.id
|
||||||
|
policy = data.aws_iam_policy_document.ct-role-pdoc.json
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_iam_policy_document" "ct-role-assumerole-policy" {
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = ["sts:AssumeRole"]
|
||||||
|
|
||||||
|
principals {
|
||||||
|
type = "Service"
|
||||||
|
identifiers = ["cloudtrail.amazonaws.com"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_iam_policy_document" "ct-role-pdoc" {
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = ["logs:CreateLogStream"]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"${aws_cloudwatch_log_group.ct-cwl.arn}:log-stream:*",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = ["logs:PutLogEvents"]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"${aws_cloudwatch_log_group.ct-cwl.arn}:log-stream:*",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_cloudtrail" "default" {
|
||||||
|
name = "${local.resource-prefix}-trail-001"
|
||||||
|
enable_logging = true
|
||||||
|
s3_bucket_name = local.ct-bucket-name
|
||||||
|
enable_log_file_validation = true
|
||||||
|
is_multi_region_trail = true
|
||||||
|
include_global_service_events = true
|
||||||
|
cloud_watch_logs_role_arn = aws_iam_role.iam_cloudtrial_cloudwatch_role.arn
|
||||||
|
cloud_watch_logs_group_arn = "${aws_cloudwatch_log_group.ct-cwl.arn}:*"
|
||||||
|
tags = var.default-tags
|
||||||
|
kms_key_id = aws_kms_key.ctbucket-key.arn
|
||||||
|
is_organization_trail = false
|
||||||
|
|
||||||
|
event_selector {
|
||||||
|
read_write_type = "All"
|
||||||
|
include_management_events = true
|
||||||
|
|
||||||
|
data_resource {
|
||||||
|
type = "AWS::S3::Object"
|
||||||
|
values = ["arn:aws:s3:::"]
|
||||||
|
}
|
||||||
|
|
||||||
|
data_resource {
|
||||||
|
type = "AWS::Lambda::Function"
|
||||||
|
values = ["arn:aws:lambda"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#insight_selector {
|
||||||
|
# insight_type = "ApiCallRateInsight"
|
||||||
|
#}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
|||||||
|
resource "aws_kms_key" "ctbucket-key" {
|
||||||
|
deletion_window_in_days = 7
|
||||||
|
tags = var.default-tags
|
||||||
|
policy = data.aws_iam_policy_document.key-policy.json
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_kms_alias" ctbucket-key-aliaas {
|
||||||
|
name = "alias/${local.resource-prefix}-ctkey-alias"
|
||||||
|
target_key_id = aws_kms_key.ctbucket-key.key_id
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://gist.github.com/shortjared/4c1e3fe52bdfa47522cfe5b41e5d6f22
|
||||||
|
data "aws_iam_policy_document" "key-policy" {
|
||||||
|
statement {
|
||||||
|
sid = "Key usage by aws services"
|
||||||
|
principals {
|
||||||
|
identifiers = [
|
||||||
|
"autoscaling.amazonaws.com",
|
||||||
|
"cloudtrail.amazonaws.com",
|
||||||
|
"eks.amazonaws.com",
|
||||||
|
"eks-nodegroup.amazonaws.com",
|
||||||
|
"guardduty.amazonaws.com",
|
||||||
|
"delivery.logs.amazonaws.com",
|
||||||
|
"sns.amazonaws.com",
|
||||||
|
"sqs.amazonaws.com",
|
||||||
|
"lambda.amazonaws.com",
|
||||||
|
"backup.amazonaws.com",
|
||||||
|
"events.amazonaws.com",
|
||||||
|
"cloudwatch.amazonaws.com",
|
||||||
|
"s3.amazonaws.com",
|
||||||
|
"logs.amazonaws.com"
|
||||||
|
]
|
||||||
|
type = "Service"
|
||||||
|
}
|
||||||
|
|
||||||
|
actions = [
|
||||||
|
"kms:Encrypt",
|
||||||
|
"kms:Decrypt",
|
||||||
|
"kms:ReEncrypt*",
|
||||||
|
"kms:GenerateDataKey*",
|
||||||
|
"kms:DescribeKey"
|
||||||
|
]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"*"
|
||||||
|
]
|
||||||
|
|
||||||
|
effect = "Allow"
|
||||||
|
}
|
||||||
|
|
||||||
|
statement {
|
||||||
|
sid = "Key administrator"
|
||||||
|
actions = [
|
||||||
|
"kms:*"
|
||||||
|
]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"*"
|
||||||
|
]
|
||||||
|
|
||||||
|
principals {
|
||||||
|
type = "AWS"
|
||||||
|
identifiers = [data.aws_caller_identity.this.account_id]
|
||||||
|
}
|
||||||
|
|
||||||
|
effect = "Allow"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
|
||||||
|
data "aws_iam_policy_document" "cloudtrail_bucket_policy" {
|
||||||
|
statement {
|
||||||
|
sid = "AWSCloudTrailAclCheck"
|
||||||
|
|
||||||
|
principals {
|
||||||
|
type = "Service"
|
||||||
|
identifiers = ["cloudtrail.amazonaws.com"]
|
||||||
|
}
|
||||||
|
|
||||||
|
actions = [
|
||||||
|
"s3:GetBucketAcl",
|
||||||
|
]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"arn:aws:s3:::${local.ct-bucket-name}",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
statement {
|
||||||
|
sid = "AWSCloudTrailWrite"
|
||||||
|
|
||||||
|
principals {
|
||||||
|
type = "Service"
|
||||||
|
identifiers = ["config.amazonaws.com", "cloudtrail.amazonaws.com"]
|
||||||
|
}
|
||||||
|
|
||||||
|
actions = [
|
||||||
|
"s3:PutObject",
|
||||||
|
]
|
||||||
|
|
||||||
|
resources = [
|
||||||
|
"arn:aws:s3:::${local.ct-bucket-name}/*",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_s3_bucket" "ct-bucket" {
|
||||||
|
bucket = local.ct-bucket-name
|
||||||
|
policy = join("", data.aws_iam_policy_document.cloudtrail_bucket_policy.*.json)
|
||||||
|
versioning {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
server_side_encryption_configuration {
|
||||||
|
rule {
|
||||||
|
apply_server_side_encryption_by_default {
|
||||||
|
kms_master_key_id = aws_kms_key.ctbucket-key.arn
|
||||||
|
sse_algorithm = "aws:kms"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tags = var.default-tags
|
||||||
|
|
||||||
|
lifecycle_rule {
|
||||||
|
enabled = false
|
||||||
|
transition {
|
||||||
|
days = 30
|
||||||
|
storage_class = "INTELLIGENT_TIERING"
|
||||||
|
}
|
||||||
|
expiration {
|
||||||
|
days = 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_s3_bucket_public_access_block" "s3-public-access-settings" {
|
||||||
|
bucket = aws_s3_bucket.ct-bucket.id
|
||||||
|
|
||||||
|
block_public_acls = true
|
||||||
|
block_public_policy = true
|
||||||
|
ignore_public_acls = true
|
||||||
|
restrict_public_buckets = true
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
resource "aws_cloudwatch_log_group" "ct-cwl" {
|
||||||
|
name = "${local.resource-prefix}-cwl-001"
|
||||||
|
retention_in_days = 90
|
||||||
|
kms_key_id = aws_kms_key.ctbucket-key.arn
|
||||||
|
tags = var.default-tags
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_cloudwatch_log_metric_filter" "cwl-metric-filter-cis11" {
|
||||||
|
name = "cis11-rootaccess-filter"
|
||||||
|
pattern = <<EOT
|
||||||
|
{$.userIdentity.type="Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType !="AwsServiceEvent"}
|
||||||
|
EOT
|
||||||
|
log_group_name = aws_cloudwatch_log_group.ct-cwl.name
|
||||||
|
|
||||||
|
metric_transformation {
|
||||||
|
name = "cis11-rootaccess-metric"
|
||||||
|
namespace = "LogMetrics"
|
||||||
|
value = "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_cloudwatch_metric_alarm" "cis11-rootaccess-alarm" {
|
||||||
|
alarm_name = "cis11-rootaccess-alarm"
|
||||||
|
comparison_operator = "GreaterThanOrEqualToThreshold"
|
||||||
|
evaluation_periods = "1"
|
||||||
|
metric_name = "cis11-rootaccess-metric"
|
||||||
|
namespace = "LogMetrics"
|
||||||
|
period = "300"
|
||||||
|
statistic = "Average"
|
||||||
|
threshold = "1"
|
||||||
|
alarm_description = "Root access is detected from cloudtrail"
|
||||||
|
treat_missing_data = "notBreaching"
|
||||||
|
|
||||||
|
// alarm_actions = []
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
data "aws_caller_identity" "this" {}
|
@ -0,0 +1,11 @@
|
|||||||
|
variable "customer-name" {}
|
||||||
|
variable "environment" {}
|
||||||
|
variable "project" {}
|
||||||
|
variable "application" {}
|
||||||
|
variable "aws-region-short" {}
|
||||||
|
variable "default-tags" {}
|
||||||
|
locals {
|
||||||
|
ct-bucket-name = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}-ctbucket-${data.aws_caller_identity.this.account_id}"
|
||||||
|
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user