설명
감사 로그는 권한 변경, 리소스 조작, 비정상적인 API 호출을 조사할 때 핵심 증거가 됩니다. kube-audit는 API 감사 이벤트를 수집하고 kube-audit-admin은 get·list 이벤트를 제외한 범위를 수집합니다. 필요한 작업의 기록이 없으면 사고 경위를 추적하기 어렵습니다.
잠재적 영향
- 보안 사고 후 누가 어떤 Kubernetes API 작업을 수행했는지 확인하기 어려울 수 있습니다.
- 권한 오남용이나 의심스러운 제어 플레인 활동에 대한 대응이 늦어질 수 있습니다.
해결 방법
- AKS 클러스터를 대상으로 하는
azurerm_monitor_diagnostic_setting의enabled_log에 조사 요구에 맞는kube-audit또는kube-audit-admin을 지정하세요. 읽기 작업까지 필요하면 제외 범위를 고려하세요. - Log Analytics 등 승인된 대상으로 전송하고 실제 수신, 보존 기간과 접근 권한을 확인하세요. 수집만으로 경보가 생성되는 것은 아니므로 필요한 탐지와 대응도 구성하세요.
예시
AKS와 진단 설정의 일부입니다. 노드 풀, ID와 로그 대상 등 생략한 리소스는 별도로 준비하세요.
변경 전
hcl
resource "azurerm_kubernetes_cluster" "example" {
name = "example-aks"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "exampleaks"
}
resource "azurerm_monitor_diagnostic_setting" "example" {
name = "aks-diagnostics"
target_resource_id = azurerm_kubernetes_cluster.example.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.example.id
enabled_log {
category = "kube-apiserver"
}
}
변경 후
hcl
resource "azurerm_kubernetes_cluster" "example" {
name = "example-aks"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "exampleaks"
}
resource "azurerm_monitor_diagnostic_setting" "example" {
name = "aks-diagnostics"
target_resource_id = azurerm_kubernetes_cluster.example.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.example.id
enabled_log {
category = "kube-audit"
}
}
설명:
- 변경 전: API 서버 운영 로그를 선택합니다. 필요한 감사 범주가 다른 진단 설정에 있는지도 확인해야 합니다.
- 변경 후: kube-audit 범주를 선택해 API 감사 이벤트를 지정한 로그 대상으로 전송합니다.