AKS 監査ログ収集の確認

調査に必要な Kubernetes API 監査イベントを収集し、受信と保持を確認してください。

説明

監査ログは、権限変更、リソース操作、不審な 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 監査イベントを指定したログ送信先へ送ります。

参考資料