설명
커스텀 IAM 역할은 조직에 맞는 세밀한 권한 설계에 쓰이지만, 잘못 변경되면 과도한 권한이 생길 수 있습니다. 역할 생성, 수정, 삭제와 복원을 추적하는 로그와 알림이 없으면 이런 변화를 놓치기 쉽습니다.
잠재적 영향
- 과도한 권한이 추가되거나 필요한 역할이 삭제되어도 늦게 발견할 수 있습니다.
- 접근 통제 변경을 조사하고 승인 여부를 확인하는 데 시간이 더 걸릴 수 있습니다.
해결 방법
- 실제 로그에 맞는
iam_role리소스 유형과CreateRole,DeleteRole,UpdateRole,UndeleteRole이벤트를 포함하는 메트릭 필터를 구성하세요. - 해당 메트릭을 참조하는 알림 조건과
notification_channels를 설정하고 승인된 시험 변경으로 수신을 확인하세요. 알림만으로 역할 변경이 차단되지는 않습니다.
예시
설정 일부를 비교하는 예제입니다. 변경 전 알림 구성은 불완전합니다. 변경 후 var.audit_monitored_resource_type에는 해당 메트릭에 실제 존재하는 모니터링 리소스 유형을 지정하고, 통지 채널과 프로젝트는 별도로 준비하세요. 평가 구간은 로그 수집 지연과 운영 요구에 맞게 조정하세요.
변경 전
hcl
resource "google_logging_metric" "custom_role_change" {
name = "custom_role_change"
description = "Detects custom role changes"
filter = <<-FILTER
resource.type="Wrong_type"
AND (protoPayload.methodName = "google.iam.admin.v1.CreateRole" OR
protoPayload.methodName="google.iam.admin.v1.DeleteRole" OR
protoPayload.methodName="google.iam.admin.v1.UpdateRole" OR
protoPayload.methodName="google.iam.admin.v1.UndeleteRole")
FILTER
}
resource "google_monitoring_alert_policy" "custom_role_alert" {
display_name = "Custom Role Change Alert"
combiner = "OR"
}
변경 후
hcl
resource "google_logging_metric" "custom_role_change" {
name = "custom_role_change"
description = "Detects custom role changes"
filter = <<-FILTER
resource.type="iam_role"
AND (protoPayload.methodName = "google.iam.admin.v1.CreateRole" OR
protoPayload.methodName="google.iam.admin.v1.DeleteRole" OR
protoPayload.methodName="google.iam.admin.v1.UpdateRole" OR
protoPayload.methodName="google.iam.admin.v1.UndeleteRole")
FILTER
}
resource "google_monitoring_alert_policy" "custom_role_alert" {
display_name = "Custom Role Change Alert"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.security_ops.name]
conditions {
display_name = "Matching audit events"
condition_threshold {
filter = "metric.type=\"logging.googleapis.com/user/${google_logging_metric.custom_role_change.name}\" AND resource.type=\"${var.audit_monitored_resource_type}\""
comparison = "COMPARISON_GT"
threshold_value = 0
duration = "0s"
aggregations {
alignment_period = "600s"
per_series_aligner = "ALIGN_SUM"
}
}
}
}
설명:
- 변경 전: 잘못된 리소스 유형 때문에 역할 변경이 메트릭에 포함되지 않을 수 있고 알림 조건도 없습니다.
- 변경 후: 역할 변경 필터에 맞는 메트릭 조건과 통지 채널을 구성합니다. 필요한 프로젝트나 조직의 로그가 실제 수집되는지도 확인하세요.