data "aws_caller_identity" "current" {}
resource "random_string" "s3_random" {
length = 4
upper = false
lower = true
numeric = false
special = false
}
resource "aws_s3_bucket" "config" {
bucket = "aws-config-${random_string.s3_random.result}"
force_destroy = true
}
resource "aws_config_configuration_aggregator" "account" {
name = "example"
account_aggregation_source {
account_ids = ["${data.aws_caller_identity.current.account_id}"]
regions = ["ap-northeast-2"]
}
}
data "aws_iam_policy_document" "assume_role" {
statement {
effect = "Allow"
principals {
type = "Service"
identifiers = ["config.amazonaws.com"]
}
actions = ["sts:AssumeRole"]
}
}
resource "aws_iam_role" "config" {
name = "config-rule"
assume_role_policy = data.aws_iam_policy_document.assume_role.json
}
resource "aws_iam_role_policy_attachment" "config_role" {
role = aws_iam_role.config.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWS_ConfigRole"
}
resource "aws_iam_role_policy_attachment" "s3_full_access" {
role = aws_iam_role.config.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
resource "aws_config_delivery_channel" "config" {
name = "config-channel"
s3_bucket_name = aws_s3_bucket.config.bucket
depends_on = [
aws_iam_role_policy_attachment.config_role,
aws_config_configuration_recorder.config
]
}
resource "aws_config_configuration_recorder" "config" {
name = "config"
role_arn = aws_iam_role.config.arn
recording_group {
all_supported = false
include_global_resource_types = false
resource_types = ["AWS::EC2::SecurityGroup"]
}
recording_mode {
recording_frequency = "CONTINUOUS"
recording_mode_override {
description = "Only record EC2 security groups daily"
resource_types = ["AWS::EC2::SecurityGroup"]
recording_frequency = "CONTINUOUS"
}
}
depends_on = [
aws_iam_role_policy_attachment.config_role
]
}
resource "aws_config_configuration_recorder_status" "config_status" {
name = aws_config_configuration_recorder.config.name
is_enabled = true
depends_on = [
aws_config_configuration_recorder.config,
aws_config_delivery_channel.config
]
}
resource "aws_config_config_rule" "config" {
name = "wsi-seoul-port"
source {
owner = "CUSTOM_LAMBDA"
source_identifier = aws_lambda_function.lambda.arn
source_detail {
event_source = "aws.config"
message_type = "ConfigurationItemChangeNotification"
}
}
scope {
compliance_resource_types = ["AWS::EC2::SecurityGroup"]
}
depends_on = [
aws_config_configuration_recorder.config,
aws_config_configuration_recorder_status.config_status,
aws_lambda_permission.permission
]
}