Секреты для конфиденциальных данных
Безопасно храните и обрабатывайте конфиденциальную информацию, например пароли и ключи API, с помощью секретов.
«Секреты для конфиденциальных данных» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Защита конфиденциальной информации
При разработке приложений Вам часто приходится работать с конфиденциальной информацией, например с паролями баз данных, ключами API или закрытыми сертификатами.
Хранить такие данные непосредственно в коде приложения или конфигурационных файлах — большой риск для безопасности! Это может привести к утечке данных и раскрытию информации о Вашей системе.
Знакомство с секретами Kubernetes
Секреты Kubernetes — это объекты, предназначенные для безопасного хранения конфиденциальных данных внутри кластера.
Они помогают отделить конфиденциальную информацию от определений Pod и кода приложения, делая развёртывание безопаснее и удобнее в управлении.
- Отдельное хранение: не включайте конфиденциальные данные в образы контейнеров и YAML-файлы Pod.
- Доступность: Pod могут использовать их как переменные окружения или подключённые файлы.
Секреты и ConfigMaps
Возможно, Вы помните ConfigMaps из предыдущего урока: они используются для хранения неконфиденциальных параметров конфигурации.
Секреты похожи на них, но предназначены именно для конфиденциальных данных. И те и другие хранят пары «ключ–значение», однако секреты учитывают конфиденциальный характер этих данных.
- ConfigMaps: для общих неконфиденциальных настроек, например уровней журналирования и адресов API.
- Секреты: для конфиденциальных данных, например паролей, токенов и закрытых ключей.
Помните: секреты по умолчанию кодируются в base64, но не шифруются!
Создание секрета из литерала
Самый простой способ создать секрет — использовать литеральное значение и команду kubectl create secret generic.
Это удобно для хранения небольших отдельных фрагментов конфиденциальных данных, например простого пароля.
kubectl create secret generic my-db-secret \
--from-literal=username=admin \
--from-literal=password=SuperSecretP@ssw0rd!Создание секрета из файлов
Для больших или многострочных конфиденциальных данных, например закрытого ключа или полного конфигурационного файла, лучше создать секрет из файлов.
Сначала создайте файлы локально, а затем укажите на них ссылки. Kubernetes прочитает содержимое файлов и сохранит его.
# Create local files first
echo "my-api-key-12345" > api-key.txt
echo "my-token-abcde" > auth-token.txt
# Create the Secret
kubectl create secret generic app-credentials \
--from-file=api-key.txt \
--from-file=auth-token.txtИспользование секретов в качестве переменных окружения
Pod могут использовать данные секрета, добавляя их непосредственно в переменные окружения. Это распространённый способ работы с простыми парами «ключ–значение».
Можно указать отдельные ключи секрета или использовать все ключи с помощью envFrom.
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-env
spec:
containers:
- name: my-app
image: nginx:latest
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: my-db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-db-secret
key: passwordИспользование секретов в качестве подключённых файлов
Если приложение работает с конфиденциальными файлами, например сертификатами и закрытыми ключами, или ожидает конфигурацию по определённым путям, секреты можно подключить к Pod как файлы.
Каждый ключ секрета становится файлом в подключённом каталоге, а его значение — содержимым этого файла.
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-vol
spec:
containers:
- name: my-app
image: nginx:latest
volumeMounts:
- name: app-secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: app-secret-volume
secret:
secretName: app-credentialsБезопасность секретов
Секреты защищают данные от поверхностного просмотра, но не являются универсальным решением. Помните о следующем:
- Кодирование в base64: секреты кодируются в base64, но не шифруются. Любой, у кого есть доступ к секрету, может декодировать его.
- RBAC: используйте управление доступом на основе ролей (RBAC), чтобы ограничить круг пользователей, которые могут читать, создавать или изменять секреты.
- Шифрование при хранении: для настоящей защиты включите шифрование при хранении данных в etcd (хранилище Kubernetes). Облачные провайдеры часто предоставляют такую возможность.
Обновление секретов
Если конфиденциальные данные изменились, необходимо обновить секрет. Повторный запуск команды kubectl create secret с новыми значениями обновит его, либо можно использовать kubectl apply -f с обновлённым YAML-файлом.
Однако уже запущенные Pod, использующие секрет, не получат изменения автоматически. Чтобы применить изменения, обычно требуется перезапустить или развернуть заново Pod, которые используют секрет.
Быстрая проверка: секреты
Представьте, что у Вас есть закрытый ключ API, к которому приложение должно получить доступ. Какой способ будет наиболее безопасным и подходящим для хранения этого ключа и передачи его Pod Kubernetes?
Итоги: секреты для конфиденциальных данных
Отличная работа! Вы научились работать с конфиденциальными данными в Kubernetes!
- Секреты хранят конфиденциальную информацию, например пароли и ключи API.
- Они кодируются в base64 и могут использоваться как переменные окружения или подключённые файлы.
- Для максимальной безопасности всегда применяйте RBAC и рассмотрите возможность шифрования при хранении.
- Помните: чтобы получить обновления секрета, Pod необходимо перезапустить.
Часто задаваемые вопросы
Урок «Секреты для конфиденциальных данных» бесплатный?
Да — полный текст урока «Секреты для конфиденциальных данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Секреты для конфиденциальных данных»?
Безопасно храните и обрабатывайте конфиденциальную информацию, например пароли и ключи API, с помощью секретов. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Секреты для конфиденциальных данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- ConfigMaps для конфигурации
- Секреты для конфиденциальных данных
- Постоянные тома и заявки
- StorageClasses и динамическое выделение