설명
CloudTrail의 권한 오류를 CloudWatch Logs에서 집계하고 알람으로 알리면 반복적인 호출 실패나 의심스러운 활동을 조사하는 데 도움이 됩니다. 필터가 없거나 알람이 잘못된 메트릭을 참조하면 필요한 경고를 받지 못할 수 있습니다. UnauthorizedOperation이나 AccessDenied 오류는 애플리케이션의 권한 설정 문제에서도 발생하므로, 오류만으로 침해가 있었다고 판단해서는 안 됩니다.
잠재적 영향
- 반복적인 비인가 호출이나 권한 설정 오류를 알아차리는 시점이 늦어질 수 있습니다.
- 알람이 올바르게 평가되어도 알림 대상이나 구독 설정이 잘못되면 담당자가 경고를 받지 못할 수 있습니다.
해결 방법
- 필요한 계정과 리전의 CloudTrail 이벤트가 대상 로그 그룹에 도착하는지 확인하세요.
*UnauthorizedOperation또는AccessDenied*를 집계하는 필터를 설정하고 실제 로그 형식으로 시험하세요. - 알람의 메트릭 이름, 네임스페이스와 필요한 차원을 필터의
metric_transformation에 맞추세요. 평가 기간, 통계, 임곗값과 누락 데이터 처리도 운영 요구에 맞게 설정하세요. alarm_actions에 실제 알림 대상 ARN을 지정하고 알람 동작, SNS 권한과 구독 상태를 확인하세요. 새 시험 이벤트가 메트릭으로 집계되고, 평가 조건을 충족할 때 알람과 알림이 작동하는지 확인하세요. 메트릭 필터는 생성 이전 로그를 소급해서 집계하지 않습니다.
예시
아래 코드는 필터와 알람의 연결을 보여주는 부분 예제입니다. 참조하는 로그 그룹과 SNS 주제를 정의하고 CloudTrail 로그 전달을 구성한 뒤 사용하세요.
변경 전
hcl
resource "aws_cloudwatch_metric_alarm" "cis_unauthorized_api_calls_cw_alarm" {
alarm_name = "CIS-3.1-UnauthorizedAPICalls"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "XXXX NOT YOUR FILTER XXXX"
namespace = "CIS_Metric_Alarm_Namespace"
period = "300"
statistic = "Sum"
threshold = "1"
alarm_description = "Monitoring unauthorized API calls will help reveal application errors and may reduce time to detect malicious activity."
alarm_actions = [aws_sns_topic.CIS_Alerts_SNS_Topic.arn]
insufficient_data_actions = []
}
resource "aws_cloudwatch_log_metric_filter" "cis_unauthorized_api_calls_metric_filter" {
name = "CIS-UnauthorizedAPICalls"
pattern = "{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") }"
log_group_name = aws_cloudwatch_log_group.CIS_CloudWatch_LogsGroup.name
metric_transformation {
name = "CIS-UnauthorizedAPICalls"
namespace = "CIS_Metric_Alarm_Namespace"
value = "1"
}
}
변경 후
hcl
resource "aws_cloudwatch_metric_alarm" "cis_unauthorized_api_calls_cw_alarm" {
alarm_name = "CIS-3.1-UnauthorizedAPICalls"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "CIS-UnauthorizedAPICalls"
namespace = "CIS_Metric_Alarm_Namespace"
period = "300"
statistic = "Sum"
threshold = "1"
alarm_description = "Monitoring unauthorized API calls will help reveal application errors and may reduce time to detect malicious activity."
alarm_actions = [aws_sns_topic.CIS_Alerts_SNS_Topic.arn]
insufficient_data_actions = []
}
resource "aws_cloudwatch_log_metric_filter" "cis_unauthorized_api_calls_metric_filter" {
name = "CIS-UnauthorizedAPICalls"
pattern = "{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") }"
log_group_name = aws_cloudwatch_log_group.CIS_CloudWatch_LogsGroup.name
metric_transformation {
name = "CIS-UnauthorizedAPICalls"
namespace = "CIS_Metric_Alarm_Namespace"
value = "1"
}
}
설명:
- 변경 전:
metric_name이 필터가 발행하는 메트릭 이름과 달라 해당 오류 메트릭을 평가하지 않습니다. - 변경 후: 메트릭 이름과 네임스페이스를 필터의 출력에 맞추고 SNS 주제의 실제 ARN을 참조합니다. 배포 후 알람 평가와 알림 수신까지 확인하세요.