GitOps для Службы Azure Kubernetes

Служба Kubernetes
GitHub

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

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

GitOps — это рабочая инфраструктура для управления кластером Kubernetes и доставкой приложений. В GitOps применяются такие методики разработки, такие как управление версиями, совместная работа, соответствие требованиям, непрерывная интеграция и непрерывное развертывание (CI/CD) с автоматизацией инфраструктуры.

Kubernetes описывает все процессы от состояния кластера до развертывания приложений декларативно с помощью кода. В GitOps инфраструктура как код (IaC) использует код для объявления требуемого состояния компонентов инфраструктуры, таких как виртуальные машины, сети и брандмауэры. Этот код поддерживает управление версиями и подлежит аудиту.

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

GitOps не только применяет политики в кластере, но и помогает обеспечить безопасность благодаря обратной связи о предлагаемых изменениях политики. Обратная связь на ранних этапах удобнее для разработчиков и помогает снизить риски и затраты.

В этой статье описано решение по использованию GitOps с кластером Azure Kubernetes Services (AKS). Это решение поддерживает полные возможности аудита, применения политик и обратной связи на ранних этапах.

Потенциальные варианты использования

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

Архитектура

Diagram of GitOps for AKS, with GitHub source control, Flux GitOps controller, Syncier Security Tower GitOps control kit, and Gatekeeper admission controller.

Скачайте файл Visio этой архитектуры.

Это решение соответствует строгому подходу GitOps.

  1. Единственным источником достоверных данных является репозиторий GitHub, в котором хранятся подготовленные конфигурации кластера AKS. В репозитории хранятся все манифесты приложений AKS и требуемые состояния инфраструктуры кластера. Каждое изменение в кластере отслеживается в системе управления версиями. Функции GitHub:

    • Обеспечивает проверку изменений.
    • Предотвращает непреднамеренные и несанкционированные изменения.
    • Реализует требуемые проверки качества.
  2. Flux — это GitOps оператор и контроллер, а также единственный компонент, который может вносить изменения в кластер. Flux извлекает требуемые изменения состояния кластера из GitHub и синхронизирует их в AKS. Flux:

    • Извлекает требуемые изменения из GitHub.
    • Обнаруживает изменения в конфигурации.
    • Согласует состояние в кластере Kubernetes.
    • Управляет Gatekeeper и приложениями.
    • Обновляет себя.
  3. Open Policy Agent (OPA) Gatekeeper применяет политики с веб-перехватчиком для проверки подлинности. Gatekeeper проверяет изменения конфигурации кластера на соответствие подготовленным политикам и применяет изменения только в случае их соответствия.

  4. Syncier Security Tower — это набор средств управления GitOps, который предоставляет обзор всех кластеров AKS и помогает управлять политиками. Syncier Security Tower:

    • Собирает все образы кластера в рамках общего представления, где показано, какие версии развернуты, и обозначены устаревшие образы.
    • Предоставляет обратную связь о нарушениях политики с помощью запроса на извлечение перед применением изменений.
    • Включает в представление риски, когда политики не могут быть применены по веским причинам.
    • Предоставляет политики безопасности для Gatekeeper OPA.

Components

Это решение использует следующие компоненты.

  • Служба Azure Kubernetes Service (AKS) — это высокодоступная, безопасная и полностью управляемая служба Kubernetes в Azure. В AKS Azure управляет сервером API Kubernetes, а владельцы кластера и операторы обращаются к узлам и пулам узлов Kubernetes и управляют ими.

  • GitHub — это платформа размещения кода для управления версиями и совместной работы. GitHub предлагает распределенную систему управления версиями Git, средства управления исходным кодом и другие функции.

  • Flux — это набор средств с открытым кодом для синхронизации кластеров Kubernetes с такими источниками конфигурации, как репозитории Git. Flux автоматизирует обновления конфигурации при наличии нового кода, готового к развертыванию.

  • Gatekeeper OPA — это проект, который интегрирует контроллер допуска OPA с открытым кодом и Kubernetes. Контроллеры допуска Kubernetes принудительно применяют политики к объектам на этапах создания, обновления и удаления и являются важнейшим элементом для применения политик Kubernetes.

  • Syncier Security Tower — это средство, которое компания Syncier разрабатывала и опубликовала для выполнения требований к безопасности и нормативному соответствию GitOps. Чтобы гарантировать выполнение в кластере только надежных образов, Syncier Security Tower предлагает набор оптимальных политик, сгруппированных по известным стандартам безопасности.

Альтернативные варианты

В этой архитектуре Flux — это оператор GitOps, который согласует требуемое состояние кластера в репозитории Git с развернутыми ресурсами в кластере AKS. Альтернативой Flux является проект Argo CDс открытым кодом: декларативный инструмент непрерывной доставки GitOps для Kubernetes. Argo CD и Flux являются популярными решениями и входят в список проектов инкубатора фонда Cloud Native Computing Foundation (CNCF).

Рекомендации

Ниже представлены рекомендации относительно этого решения.

Масштабируемость

GitOps обладает целым рядом преимуществам, однако по мере развития системы кластеров растет и количество репозиториев. Это решение позволяет решить такие проблемы и задачи:

  • Обзор всех сред и кластеров.
  • Отслеживание критически важных образов.
  • Проверка активности определенных политик в каждом кластере.

Безопасность

Это решение обладает рядом преимуществ, связанных с безопасностью. В рамках подхода GitOps отдельные разработчики и администраторы не обращаются напрямую к кластерам Kubernetes для применения изменений или обновлений. Вместо этого пользователи отправляют изменения в репозиторий Git, а оператор GitOps (в данном случае — Flux) считывает их и применяет к кластеру. Этот подход соответствует принципу минимальных привилегий, так как группам DevOps не предоставляются разрешения на запись в API Kubernetes. В сценариях диагностики и устранения неполадок разрешения на доступ к кластеру могут быть предоставлены на ограниченное время в каждом конкретном случае.

Чтобы гарантировать использование кластерами AKS рекомендаций по обеспечению безопасности, в этом решении применяются политики OPA с веб-перехватчиком проверки допуска. Syncier Security Tower включает набор политик на основе стандартов безопасности Kubernetes, которые можно подготовить в области кластера. Syncier Security Tower обеспечивает обратную связь на ранних этапах путем проверки запроса на извлечение, если предложенные манифесты Kubernetes нарушают политики.

Помимо настройки разрешений на доступ к репозиторию, вы также можете реализовать следующие меры безопасности в репозиториях Git, которые синхронизируются с кластерами AKS:

  • Защита ветвей. Защитите ветви, которые представляют состояние кластеров Kubernetes, от непосредственной отправки в них изменений. Настройте требование, согласно которому каждое изменение должно предлагаться с помощью запроса на извлечение, который проверяется по крайней мере еще одним лицом. Также используйте запросы на извлечение для автоматических проверок. Например, Syncier Security Tower проверяет манифесты Kubernetes, которые создаются или изменяются запросом на извлечение. Syncier Security Tower проверяет изменения на соответствие подготовленным политикам, прежде чем их можно будет синхронизировать с кластером.

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

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

  • Дополнительные меры безопасности. Потребуйте от пользователей GitHub активировать двухфакторную проверку подлинности. Кроме того, разрешите только подписанные операции фиксации, которые нельзя изменить постфактум.

Operations

GitOps позволяет повысить производительность процессов DevOps. Одна из наиболее полезных функций — возможность быстро откатить непредсказуемые изменения просто с помощью операций Git. Граф фиксации, как и прежде, содержит все операции фиксации и помогает при последующем анализе.

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

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

Команды DevOps могут задействовать расширенные возможности Syncier Security Tower для получения ценных сведений обо всех изменениях в приложении, включая их авторов и время, а также для просмотра и фильтрации по таким признакам, как тип изменения или ресурса. В Syncier Security Tower есть центр управления для активации политик и сравнения состояния соответствия требованиям в разных кластерах.

Развертывание этого сценария

Чтобы подготовить конфигурацию GitOps для AKS, выполните указанные ниже действия.

  1. Создайте кластер AKS с помощью этого краткого руководства до этапа подключения к кластеру. Остановитесь перед запуском приложения и пока ничего не развертывайте в кластере.

  2. Установите интерфейс командной строки Flux с помощью инструкций по установке Flux.

  3. В оболочке Bash выполните приведенные ниже команды. Задайте переменные GITHUB_TOKEN, GITHUB_USER и GITHUB_REPO для своей среды.

    export GITHUB_TOKEN="<your token>"
    export GITHUB_USER="<your username>"
    export GITHUB_REPO="<your repository>"
    
    flux bootstrap github \
       --owner=$GITHUB_USER \
       --repository=$GITHUB_REPO \
       --branch=main \
       --path=./cluster \
       --personal
    
    git clone https://github.com/$GITHUB_USER/$GITHUB_REPO
    cd $GITHUB_REPO
    
    mkdir -p .securitytower
    cat << EOF > .securitytower/cluster.yaml
    apiVersion: securitytower.io/v1alpha1
    kind: Cluster
    metadata:
       name: $GITHUB_REPO
    spec:
       policies:
          path: /policies
    EOF
    
    flux create kustomization policies \
       --source=flux-system \
       --path="./policies" \
       --prune=true \
       --validation=none \
       --interval=1m \
       --export > ./cluster/policies.yaml
    
    git add .
    git commit -m "Create Syncier Security Tower cluster config and add policy Kustomization"
    git push
    
    kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.4/deploy/gatekeeper.yaml
    
  4. Установите Gatekeeper, следуя руководству по установке. Сведения о том, как правильно настроить Gatekeeper, см. в разделе о применении политик с помощью OPA Gatekeeper.

  5. Установите в репозиторий Syncier Security Tower из каталога GitHub Marketplace.

  6. Чтобы настроить все необходимые файлы конфигурации, воспользуйтесь указаниями в руководстве по началу работы Syncier Security Tower.

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

  • Добавлять кластеры.
  • С помощью Syncier Security Tower просматривать общие сведения об образах, которые используют кластеры.
  • Подготавливать политики с помощью Syncier Security Tower для обеспечения соответствия стандартам безопасности.

Цены

  • Для оценки затрат используйте калькулятор цен Azure.

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

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

Дальнейшие действия