Усилить безопасность Kubernetes с инжектором агента Vault

Усилить безопасность Kubernetes с инжектором агента Vault

31 июля 2025 г.

Как хранится с Kubernetes?

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

Преимущества:

Нет необходимости разоблачить секреты в секретах Kubernetes или переменных окружающей среды.

Поддержкадинамические секретыс автоматическим экспозицией и вращением.

Безопасный и проверенный, с доступом, регулируемым политикой в хранилище

Что такое инжектор агента Vault?

Инжектор агента хранилища являетсяKubernetes Мутация контроллер Webhook.It перехватывает события создания стручков иизменяет спецификации PODЕсли аннотации хранилища обнаружены. Это добавляет:

Анонцаконтейнер инициировать(Vault-Agent init) для аутентификации и получения секретов

АКонтейнер с колясками(Vault-Agent), который обновляет секреты по мере необходимости

АОбщий объем памятихранить секреты, которые

Агент Vault используетШаблоны агента хранилищанаписать секреты в виде файлов в общий том.

Прикладные контейнерыпотреблять секреты от общего тома, без необходимости хранилища SDK или переменных среды.

Шаг 1: Создайте кластер EKS без каких -либо групп узлов

Создайте кластер EKS без группы узлов, используя команду EKSCTLeksctl create cluster-name = devopstronaut-region = eu-west-1-без nodegroup.По умолчанию EKSCTL создает группу узлов с экземплярами M5.

Шаг 2: Создайте группу управляемых узлов

Добавить группу узлов, используя следующую отдельную команду EKSCTLEKSCTL CREATE NODEGROUP-NAME DEVOPSTRONAUT NODE-GROUP-GROUP-кластер DEVOPSTRONAUT-Cluster-region EU-WEST-1-NODES 1-NODES-MIN 1-NODES-MAX 3-TYPE-TYPE T3.Medium

Объяснение флагов:

  • - Кластер: указывает имя существующего кластера EKS, к которому будет добавлена группа узлов.
  • - Имя: Название группы узлов для легкой идентификации.
  • - Регион: указывает регион AWS.
  • - узлы: устанавливает начальное желаемое количество узлов (в данном случае 2).
  • -Nodes-Min и-Nodes-Max: Определите минимальное и максимальное количество узлов для автоматического масштаба.
  • -Тип узла: тип экземпляра EC2 для узлов (например, m5.large)

Шаг 3: Настройка контекста для кластера EKS:

Установите контекст Kubernetes для кластера EKS, используя следующую команду:aws eks-region eu-west-1 update-kubeconfig-name devopstronaut-cluster

Использоватьkubectl Get nsдля просмотра пространств имен иkubectl Получите узлыЧтобы проверить статус узлов в кластере, проверив, что настройка завершена

Шаг 4: Установите диаграмму Helm Vault

Чтобы добавить официальное хранилище диаграммы Hashicorp в клиент Helm, запустите эту командуHelm Repo добавить hashicorp https://helm.releases.hashicorp.com

Эта команда регистрирует репозиторий Hashicorp Helm Chart, чтобы вы могли установить Vault и другие инструменты с помощью Helm. После этого обязательно обновите свой список репоксаКоманда обновления Helm Repo

Чтобы установить хранилище hashicorp на свой кластер Kubernetes вРежим разработки(только для целей тестирования) используйте следующую команду:Helm Install Vault hashicorp/Vault -Set «Server.dev.Enabled = true»

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

Ищите стручок, названный что -то вродеvault-0Это ваш капсул.

Запустите эту командуkubectl exec -it Vault -0 - /bin /shоткрыть интерактивную оболочку внутриvault-0капсул

Включить двигатель Secrets Version 2 версии 2 на путиdevopstronautиспользуя эту командуСекреты хранилища включить -path = devopstronaut kv -v2

Хранить секрет на путиdevopstronaut/myapp/configсо следующими парами ключей, используя эту командуVault KV PUT Devopstronaut/myApp/config username = ”mahi” password = ”password@123"

Получить секрет, хранящийся на путиdevopstronaut/myapp/configиспользуя командуVault KV Get Devopstronaut/myApp/config

Шаг 5: Настройте аутентификацию Kubernetes в хранилище

Включите метод аутентификации Kubernetes в Vault с этой командойVault Auth Включите Kubernetes

Используйте эту командуvault write auth/kubernetes/config \ kubernetes_host = ”https: // $ kubernetes_port_443_tcp_addr: 443"Для настройки конечной точки API API API Kubernetes в Vault

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

Создать политику хранилища с именемdevopstronaut-appчто предоставляет доступ к секрету в указанном пути, используя эту команду


vault policy write devopstronaut-app - <<EOF
path "devopstronaut/data/myapp/config" {
   capabilities = ["read"]
}
EOF

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


vault write auth/kubernetes/role/devopstronaut-app \
  bound_service_account_names=devopstronaut-app \
  bound_service_account_namespaces=default \
  policies=devopstronaut-app \
  ttl=24h

  • **bound_service_account_names=devopstronaut-app**: Ограничивает доступ к этой конкретной учетной записи Kubernetes Service.
  • **bound_service_account_namespaces=default**: Ограничивает доступ кdefaultПространство имен.
  • **policies=devopstronaut-app**: Сообесет о политике хранилища, названнойdevopstronaut-appс этой ролью.
  • **ttl=24h**: Устанавливает срок службы сгенерированного токена на 24 часа.

Создайте названную учетную запись службы Kubernetesdevopstronaut-appиспользуя эту командуkubectl Создать sa devopstronaut-app

Эта учетная запись обслуживания используется вашим приложением для аутентификации сСейфПолем Vault использует личность этой учетной записи службы, чтобы сопоставить его с роли, которую вы настроили ранее (devopstronaut-app) и определить, какие секреты могут получить доступ к POD на основе назначенной политики хранилища

Перечислите все учетные записи услуг в текущем пространстве имен Kubernetes, используя эту командуKubectl Получите ServiceAccounts

Шаг 6: Введите секреты в новый стручок

Развернуть приложение BusyBox, используя следующий файл конфигурации развертывания (mahi-busybox.yaml)

#mahi-busybox.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mahi-busybox-app
  labels:
    app: mahi-busybox-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mahi-busybox-app
  template:
    metadata:
      annotations:
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/role: 'devopstronaut-app'
        vault.hashicorp.com/agent-inject-secret-myapp-config.txt: 'devopstronaut/myapp/config'
      labels:
        app: mahi-busybox-app
    spec:
      serviceAccountName: devopstronaut-app
      containers:
        - name: busybox
          image: busybox:1.35
          command: ["sleep", "3600"]


Выполнитьkubectl Apply -f mahi -busybox.yamlкоманда для развертывания приложения с помощьюmahi-busybox.yamlФайл конфигурации и запуститьkubectl Получите стручкиЧтобы получить статус стручков, включая приложение Busybox

БегатьKubectl Exec -it Mahi-Busybox-APP-76B89B8967-NCWPC- /bin /shкоманда открыть интерактивную оболочку внутриmahi-busybox-app-76b89b8967-ncwpcкапсул

Чтобы просмотреть и проверить введенный секрет, запуститеcat /vault/secrets/myapp-config.txt

Шаг 7: Введите секреты в существующую стручку

Развернуть приложение NGINX с использованием именованного файла конфигурации развертыванияnginx-app.yaml

#nginx-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mahi-app
  labels:
    app: mahi-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mahi-app
  template:
    metadata:
      annotations:
      labels:
        app: mahi-app
    spec:
      serviceAccountName: devopstronaut-app
      containers:
        - name: nginx
          image: nginx:latest


Выполнитьkubectl Apply -f nginx -app.yamlкоманда для развертывания приложения с помощьюnginx-app.yamlФайл конфигурации

БегатьKubectl Получите стручкиКоманда, чтобы получить статус стручков, включая приложение Nginx

Создайте фрагмент YAML (секретные инъекции.

#secret-injects.yaml
spec:
   template:
      metadata:
         annotations:
            vault.hashicorp.com/agent-inject: 'true'
            vault.hashicorp.com/role: 'devopstronaut-app'
            vault.hashicorp.com/agent-inject-secret-database-config.txt: 'devopstronaut/data/myapp/config'

ИспользоватьKubectl Patch Deploting Mahi-App-Patch-File-File-Injects.yamlкоманда для применения патча изsecret-injects.yamlфайл вmahi-appразвертывание

Бегатьkubectl Получите стручкиКоманда, и вы можете увидеть, как новые стручки будут созданы с помощью Vault Inject

Бегатьkubectl Exec -it Mahi-App-58d98f454f-s66tl- /bin /shкоманда открыть интерактивную оболочку внутриmahi-app-58d98f454f-s66tlкапсул

Бегатьcat /vault/secrets/myapp-config.txtкомандованиеТo Просмотреть и проверить введенный секрет

Заключение:

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

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

Продолжайте учиться, продолжайте Kubernet-ing !!!

Если вы нашли это руководство полезным, дайте ему хлопок! 👏

Для более проницательного контента на AWS, лучших нативных практиках, облачной безопасности, DevOps и технологических обновлений, не забудьтеПодписывайтесь на меня! 🚀

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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE