
Усилить безопасность 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 и технологических обновлений, не забудьтеПодписывайтесь на меня! 🚀
Не стесняйтесь обращаться ко мне, если у вас есть другие вопросы или предложения.
Оригинал