커스텀 역할 변경 로그 및 알림 점검

커스텀 IAM 역할의 생성·수정·삭제·복원을 추적하세요.

설명

커스텀 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"
      }
    }
  }
}

설명:

  • 변경 전: 잘못된 리소스 유형 때문에 역할 변경이 메트릭에 포함되지 않을 수 있고 알림 조건도 없습니다.
  • 변경 후: 역할 변경 필터에 맞는 메트릭 조건과 통지 채널을 구성합니다. 필요한 프로젝트나 조직의 로그가 실제 수집되는지도 확인하세요.

참조