Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты
Иллюстрация к статье об External Secrets Operator, ArgoCD и AWS EKS

Безопасный GitOps: интеграция External Secrets Operator с ArgoCD на AWS EKS

Пошаговое руководство по выстраиванию безопасной декларативной схемы доставки секретов в Kubernetes без их коммита в Git. Интеграция External Secrets Operator, ArgoCD и AWS SSM Parameter Store через IAM-авторизацию IRSA, экономическое сравнение провайдеров, разбор частых проблем кэширования и лимитов сетевых ресурсов.

Безопасный GitOps: интеграция External Secrets Operator с ArgoCD на AWS EKS

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

Для решения этой дилеммы используется External Secrets Operator. Этот инструмент позволяет безопасно автоматизировать жизненный цикл секретов в кластере Kubernetes, извлекая реальные значения из защищенных внешних хранилищ и автоматически материализуя их в виде стандартных секретов Kubernetes на лету. В качестве внешнего провайдера секретов часто выбирают AWS Systems Manager Parameter Store.

Экономическая выгода: SSM Parameter Store против Secrets Manager

Многие облачные команды по умолчанию используют сервис AWS Secrets Manager для хранения конфиденциальных данных. Однако этот выбор сопряжен с заметными расходами: стоимость хранения одного секрета составляет $0.40 в месяц, к чему добавляется плата за каждые 10 000 вызовов API. Для средних и крупных инфраструктур с сотнями микросервисов ежемесячный счет может исчисляться сотнями долларов.

Использование стандартных параметров в AWS SSM Parameter Store является полностью бесплатным. При этом возможностей стандартного хранилища (поддержка шифрования KMS, размер значения до 4 КБ) более чем достаточно для подавляющего большинства конфигурационных параметров приложений. Использование SSM Parameter Store в связке с оператором — это эффективный способ сокращения облачных затрат без ущерба для безопасности.

Архитектурные примитивы интеграции

Для построения безопасного пайплайна доставки секретов используются следующие компоненты:

  1. AWS EKS IRSA: Механизм авторизации подов Kubernetes в сервисах AWS с использованием OIDC-провайдера. Поды оператора получают временные права доступа к AWS SSM без необходимости прописывать статические ключи доступа в манифестах.
  2. ClusterSecretStore / SecretStore: Пользовательские ресурсы Kubernetes, описывающие конфигурацию подключения к внешнему провайдеру секретов. ClusterSecretStore действует на уровне всего кластера, тогда как SecretStore изолирован внутри одного пространства имен.
  3. ExternalSecret: Декларативный манифест, указывающий, какие именно параметры из внешнего облачного хранилища необходимо извлечь и в какой Kubernetes Secret их записать.

Пошаговое руководство по настройке интеграции

Следуйте этой инструкции для развертывания и проверки связки оператора, ArgoCD и AWS EKS:

Требования к окружению
  • Установленный интерфейс командной строки AWS CLI и настроенный доступ к консоли AWS.
  • Утилита управления кластером kubectl.
  • Работающий кластер AWS EKS с настроенным провайдером идентификации IAM OIDC.
Шаг 1. Создание параметров в AWS SSM

Сохраните секретное значение в AWS Parameter Store с типом шифрования SecureString:

aws ssm put-parameter --name "/prod/database/password" --value "supersecretpassword123" --type "SecureString"
Шаг 2. Настройка роли IRSA для доступа к секретам

Создайте в AWS IAM политику, разрешающую чтение нужных параметров:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters",
        "ssm:GetParametersByPath"
      ],
      "Resource": "arn:aws:ssm:region:account-id:parameter/prod/*"
    }
  ]
}

Создайте роль IAM, разрешающую использование этой политики сервисному аккаунту Kubernetes, используемому оператором.

Шаг 3. Деплой оператора через ArgoCD

Создайте манифест ArgoCD Application для установки оператора из Helm-чарта. Важно: настройте порядок синхронизации так, чтобы CRD оператора установились и стали активными до того, как ArgoCD попытается применить ресурсы ClusterSecretStore и ExternalSecret.

Шаг 4. Создание ClusterSecretStore

Примените манифест создания подключения к AWS провайдеру:

apiVersion: external-secrets.io/v1beta1
kind: ClusterSecretStore
metadata:
  name: aws-parameter-store
spec:
  provider:
    aws:
      service: ParameterStore
      region: eu-west-1
      auth:
        jwt:
          serviceAccountRef:
            name: external-secrets-sa
            namespace: external-secrets
Шаг 5. Описание ресурса ExternalSecret

Создайте манифест, связывающий облачный параметр с секретом в кластере:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: app-db-secret
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-parameter-store
    kind: ClusterSecretStore
  target:
    name: k8s-db-secret
  data:
    - secretKey: DB_PASSWORD
      remoteRef:
        key: /prod/database/password
Шаг 6. Верификация работы

Убедитесь, что оператор успешно обработал манифест и создал секрет Kubernetes:

kubectl get externalsecret app-db-secret
kubectl describe externalsecret app-db-secret
kubectl get secret k8s-db-secret -o jsonpath='{.data.DB_PASSWORD}' | base64 -d

Успешный статус Synced подтверждает корректность настройки.

Шаг 7. Проверка ротации секретов

Измените значение параметра в AWS SSM. В течение времени, заданного в refreshInterval, оператор автоматически обновит значение в секрете.

Решение частых проблем при эксплуатации

  • Лимиты подов на нодах EKS: На небольших инстансах AWS EKS может закончиться лимит IP-адресов для новых подов. Решайте это настройкой горизонтального автоскейлинга нод и развертыванием metrics-server.
  • Ошибки авторизации JWT: При использовании локального SecretStore могут возникать проблемы с правами токенов. Переход на глобальный ClusterSecretStore обеспечивает более надежную изоляцию и упрощает доступ к облачным секретам.
  • Кэширование секретов приложениями: Важно помнить, что оператор обновляет секрет Kubernetes, но уже запущенные приложения часто кэшируют конфигурацию в памяти. Для применения нового пароля может потребоваться перезапуск подов приложения или ручной сброс активных токенов авторизации.

Использование External Secrets Operator в связке с AWS SSM Parameter Store и ArgoCD позволяет создать надежную, безопасную и экономически выгодную схему управления конфигурациями в духе GitOps. Полное отсутствие статических паролей в репозиториях кода снижает вероятность утечек данных и автоматизирует рутинные операции по обновлению доступов на эксплуатируемых стендах.