Skip to content

Commit d438ea2

Browse files
authored
Use cloudtrail to log aws management events (#2355)
* use cloudtrail to log aws management events * update the comments * remove space * remove the reference
1 parent ac1d3fd commit d438ea2

File tree

3 files changed

+86
-102
lines changed

3 files changed

+86
-102
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#===============================================================================
2+
# Management Events Logging (All AWS Services - free)
3+
#===============================================================================
4+
5+
resource "aws_cloudwatch_log_group" "management_events_cloudtrail" {
6+
name = "/aws/cloudtrail/${local.identifier_prefix}-management-events"
7+
retention_in_days = 90
8+
9+
tags = module.tags.values
10+
}
11+
12+
resource "aws_iam_role" "management_events_cloudtrail_logs_role" {
13+
name = "${local.identifier_prefix}-management-events-cloudtrail-logs-role"
14+
15+
assume_role_policy = jsonencode({
16+
Version = "2012-10-17"
17+
Statement = [
18+
{
19+
Effect = "Allow"
20+
Principal = {
21+
Service = "cloudtrail.amazonaws.com"
22+
}
23+
Action = "sts:AssumeRole"
24+
}
25+
]
26+
})
27+
28+
tags = module.tags.values
29+
}
30+
31+
resource "aws_iam_role_policy" "management_events_cloudtrail_logs_policy" {
32+
name = "${local.identifier_prefix}-management-events-cloudtrail-logs-policy"
33+
role = aws_iam_role.management_events_cloudtrail_logs_role.id
34+
35+
policy = jsonencode({
36+
Version = "2012-10-17"
37+
Statement = [
38+
{
39+
Effect = "Allow"
40+
Action = [
41+
"logs:CreateLogGroup",
42+
"logs:CreateLogStream",
43+
"logs:PutLogEvents",
44+
"logs:DescribeLogStreams"
45+
]
46+
Resource = "${aws_cloudwatch_log_group.management_events_cloudtrail.arn}:*"
47+
}
48+
]
49+
})
50+
}
51+
52+
# Summary from AWS Doc and Support:
53+
# 1. For CloudTrail Trails, cannot filter management events by eventSource.
54+
# 2. To log all management events, enable management events (Read/Write).
55+
# 3. We can exclude KMS and RDS Data API events to reduce noise.
56+
# 4. Nearly all of glue operations are management events.
57+
# 5. First copy of management events is free.
58+
resource "aws_cloudtrail" "management_events" {
59+
name = "${local.identifier_prefix}-management-events"
60+
s3_bucket_name = module.cloudtrail_storage.bucket_id
61+
s3_key_prefix = "management-events"
62+
63+
cloud_watch_logs_group_arn = "${aws_cloudwatch_log_group.management_events_cloudtrail.arn}:*"
64+
cloud_watch_logs_role_arn = aws_iam_role.management_events_cloudtrail_logs_role.arn
65+
66+
include_global_service_events = false
67+
is_multi_region_trail = false
68+
enable_logging = true
69+
70+
event_selector {
71+
read_write_type = "All"
72+
include_management_events = true
73+
74+
# Exclude noisy/high-volume events as recommended by AWS Support
75+
exclude_management_event_sources = [
76+
"kms.amazonaws.com",
77+
"rdsdata.amazonaws.com"
78+
]
79+
}
80+
81+
tags = module.tags.values
82+
83+
depends_on = [
84+
aws_iam_role_policy.management_events_cloudtrail_logs_policy
85+
]
86+
}

terraform/core/88-glue-data-catalog-logging.tf

Lines changed: 0 additions & 92 deletions
This file was deleted.

terraform/core/99-outputs.tf

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,3 @@ output "mwaa_etl_scripts_bucket_arn" {
4040
output "mwaa_key_arn" {
4141
value = aws_kms_key.mwaa_key.arn
4242
}
43-
44-
output "glue_data_catalog_cloudtrail_arn" {
45-
description = "ARN of the CloudTrail logging Glue Data Catalog usage"
46-
value = aws_cloudtrail.glue_data_catalog_usage.arn
47-
}
48-
49-
output "glue_data_catalog_cloudtrail_log_group" {
50-
description = "CloudWatch Log Group for Glue Data Catalog CloudTrail"
51-
value = aws_cloudwatch_log_group.glue_data_catalog_cloudtrail.name
52-
}

0 commit comments

Comments
 (0)