[Перевод] Освоение журналов аудита Kubernetes

dca230ae4c9c83d2125e4ebfadd231e8.png

Kubernetes предоставляет мощный инструмент, позволяющий создавать журналы аудита для каждого действия, запрашиваемого и выполняемого через API Kubernetes.

Понимание того, как настраивать, управлять и интерпретировать эти журналы, критически важно для поддержания безопасности и соответствия требованиям в средах Kubernetes. Конкретно эта статья посвящена исследованию безопасности Kubernetes.

Настройка журналов аудита Kubernetes

Чтобы настроить и активировать журналы аудита Kubernetes, необходимо добавить специальные аргументы в конфигурацию kube-apiserver. Самым важным является аргумент audit-policy-file, который указывает на файл политики аудита. Этот файл определяет, какие события следует регистрировать и уровень детализации этих записей.

Вот необходимые аргументы для включения:

  • --audit-policy-file=/etc/kubernetes/audit-policy.yaml: Этот аргумент указывает на файл политики аудита, который содержит правила логирования и детали событий, которые нужно зафиксировать.

  • --audit-log-path=/var/log/kubernetes/audit/audit.log: Аргумент audit-log-path определяет место для хранения журналов. В этом файле журналы сохраняются в виде структур JSON, что обеспечивает структурированный и доступный формат для анализа.

Установив эти аргументы, вы активируете логирование взаимодействий с API Kubernetes, создавая журнал аудита для целей безопасности и соответствия нормативным требованиям.

Монтирование файлов политики и журналов

Предположим, что ваш kube-apiserver настроен на запуск как статический под, что часто бывает в средах, используемых в экзамене CKS (Certified Kubernetes Security). В этом случае обеспечение правильного монтирования файлов политики аудита и журналов критически важно.

Этот шаг гарантирует, что записи аудита генерируются не только, но и сохраняются после завершения жизненного цикла пода.

Для этого вам необходимо определить volumeMounts в конфигурации вашего пода для связывания файловой системы пода с файловой системой хоста, обеспечивая сохранение записей аудита. Вот как это сделать:

volumeMounts:
  - mountPath: /etc/kubernetes/audit-policy.yaml
    name: audit-policy
    readOnly: true
  - mountPath: /var/log/kubernetes/audit/
    name: audit-log
    readOnly: false

Кроме того, вам необходимо определить тома, чтобы указать точное местоположение на хост-системе, где эти файлы будут храниться. Это делается путем настройки hostPath как для файла политики, так и для директории журналов, как показано ниже.

volumes:
  - name: audit-policy
    hostPath:
      path: /etc/kubernetes/audit-policy.yaml
      type: File

name: audit-log
hostPath:
path: /var/log/kubernetes/audit/
type: DirectoryOrCreate

Параметр readOnly: true для файла политики аудита гарантирует, что под случайно не изменит его, сохраняя его целостность.

В то время как директория журналов аудита отмечена как readOnly: false, чтобы позволить kube-apiserver записывать журналы аудита в файловую систему.

Файл политики аудита

Как было обсуждено ранее, файл политики аудита — это документ YAML, который описывает правила регистрации событий в Kubernetes. Он указывает, какие события регистрируются и уровень детализации записи, включая этап запроса.

Доступны четыре уровня логирования для категоризации событий:

  • None: События, соответствующие этому правилу, не регистрируются.

  • Metadata: Регистрируются метаданные запроса, такие как пользователь, отправивший запрос, временная метка, ресурс и действие, но исключаются тело запроса или ответа.

  • Request: На этом уровне регистрируются метаданные событий и тело запроса, но не тело ответа. Этот уровень не применяется к запросам, не относящимся к ресурсам.

  • RequestResponse: Регистрируются метаданные событий, тело запроса и тело ответа. Этот уровень также не применяется к запросам, не относящимся к ресурсам.

Вот пример файла политики, созданного для ведения журнала всех операций, связанных с секретами на уровне Metadata. После установки этой политики каждый раз, когда вы создаете, изменяете или удаляете секрет в кластере, метаданные, связанные с этой операцией, будут зафиксированы в файле журнала аудита.

apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:

"RequestReceived"

rules:

level: Metadata
resources:

group: "" # Indicates the core API group
resources: ["secrets"]

Использование поля omitStages со значением «RequestReceived» указывает на то, что события не регистрируются на начальном этапе получения запроса, а фокусируются на существенной обработке запроса.

Гибкость файла политики аудита выходит далеко за рамки базовой конфигурации, описанной выше. Благодаря множеству опций настройки вы можете адаптировать журналы аудита для удовлетворения конкретных требований.

Настройка логирования для определенных типов действий, известных как «глаголы», или ограничение логирования конкретными действиями, выполняемыми над ресурсами в определенном пространстве имен, возможно. По сути, возможности безграничны.

Например, вы можете тонко настроить вашу политику аудита, чтобы логировались только операции «создание» и «удаление» подов в определенном пространстве имен. Такой уровень детализации гарантирует, что вы сможете сосредоточиться на наиболее релевантных данных аудита для ваших нужд в области безопасности и эксплуатации, не перегружаясь лишней информацией.

Вот пример, показывающий, как может быть настроено такое логирование:

rules:
  - level: Metadata
    verbs: ["create", "delete"] # Focus on create and delete operations
    resources:
      - group: "" # Targeting the core API group
        resources: ["pods"]
    namespaces: ["production"] # Restricting to the 'production' namespace

Этот фрагмент демонстрирует один из множества способов, которыми вы можете настроить логирование аудита Kubernetes в соответствии с вашими конкретными требованиями безопасности, соответствия или операционной деятельности.

Дополнительные опции для управления файлом журнала аудита

Управление размером и количеством файлов журнала аудита критически важно для обеспечения доступности и управляемости журналов со временем.

В этом контексте kube-apiserver предоставляет три дополнительные опции, которые помогают администраторам контролировать сохранение и ротацию файлов журналов:

  • --audit-log-maxage: Указывает максимальное количество дней хранения старых файлов журнала аудита. Эта настройка помогает управлять жизненным циклом журналов, автоматически удаляя файлы, старше указанного количества дней.

  • --audit-log-maxbackup: Определяет максимальное количество файлов журнала аудита, которые следует сохранять. Эта опция ограничивает количество старых файлов журналов в системе, обеспечивая разумное использование хранилища.

  • --audit-log-maxsize: Этот аргумент определяет максимальный размер файла журнала аудита (в мегабайтах) перед его ротацией. Как только файл журнала достигает этого размера, он закрывается, и начинается новый файл, что предотвращает чрезмерное увеличение размера любого одного файла.

Управляемые среды Kubernetes и журналирование аудита

При работе в управляемых службах Kubernetes, таких как Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE) и Amazon Elastic Kubernetes Service (Amazon EKS), администраторы могут контролировать журналирование аудита с высокой степенью гибкости.

Эти службы предлагают возможность включать или отключать функции аудита и бесшовно интегрировать журналы аудита с их соответствующими управляемыми решениями для логирования.

Например, вы можете настроить вашу систему на автоматическую пересылку журналов аудита в рабочую область Azure Log Analytics или эквивалентные службы в GKE и Amazon EKS.

Включение и отключение журналирования аудита немного отличается в зависимости от платформы, но обычно включает настройку соответствующих параметров в интерфейсе управления службой Kubernetes.

Вот краткий обзор, где можно найти более подробные руководства для каждой службы:

  • Azure Kubernetes Service (AKS): Обратите внимание на документацию AKS по интеграции с Azure Monitor для контейнеров. Это руководство предоставляет детальные шаги по включению журналирования аудита и отправке журналов в Azure Log Analytics. Документация Azure Kubernetes Service (AKS)

  • Google Kubernetes Engine (GKE): GKE предлагает интеграцию с Cloud Operations (ранее Stackdriver) для логирования и мониторинга. Подробные инструкции по настройке журналов аудита можно найти в документации GKE. Документация Google Kubernetes Engine

  • Amazon Elastic Kubernetes Service (Amazon EKS): EKS позволяет настроить журналирование аудита, интегрируясь с AWS CloudWatch Logs. В документации EKS приведены руководства по включению журналирования аудита и управлению сохранением журналов. Документация Amazon Elastic Kubernetes Service

Журналы аудита Kubernetes имеют ключевое значение для экзамена Certified Kubernetes Security Specialist (CKS). Следует ожидать вопросов, требующих знаний в создании и управлении журналами аудита Kubernetes с использованием политик аудита.

Важно знать, как настраивать политики аудита, устанавливать параметры, такие как максимальное количество сохраняемых журналов аудита, и определять, как долго файл журнала должен сохраняться.

Кроме того, вы должны понимать, как правильно монтировать файл политики аудита и файл журнала аудита в определении статического пода kube-apiserver.

Использование возможностей журналов аудита Kubernetes

Журналы аудита Kubernetes являются незаменимым инструментом для администраторов, стремящихся улучшить безопасность и соответствие нормам в их средах Kubernetes.

Вы можете добиться детальной и проактивной позиции в области безопасности, настроив, управляя и понимая журналы аудита.

Эта статья провела вас через основы настройки и поддержания эффективных журналов аудита, от базовых шагов конфигурации до более продвинутых практик управления размерами файлов журналов и их жизненным циклом.

Для тех, кто готовится к экзамену Certified Kubernetes Security Specialist (CKS), освоение журналов аудита — это не просто прохождение теста, это развитие навыков, которые значительно способствуют обеспечению безопасности развертываний Kubernetes в любой среде.

Настройка и интерпретация этих журналов — критически важный навык для любого, кто отвечает за безопасность и операционную целостность кластеров Kubernetes.

По мере того как Kubernetes продолжает развиваться как критически важный компонент облачной инфраструктуры, роль журналов аудита будет только увеличиваться.

Будь то управление локальным кластером или работа в управляемой службе Kubernetes, журналы аудита предоставляют жизненно важные сведения для выявления, реагирования и устранения угроз безопасности.

Данная статья это перевод с английского с некоторыми адаптациями. Перевод сделан НЕшколой для инженеров Inzhenerka.Tech совместно с автором интенсива-тренажера по Kubernetes: работа с чувствительными данными Игорем Саблиным. Больше материала в нашем сообществе

Счастливого обучения в InzhenerkaTech!

© Habrahabr.ru