Управление секретами и RBAC
Изучите продвинутые стратегии управления конфиденциальными данными и внедрения ролевого управления доступом (RBAC) в средах контейнеров.
«Управление секретами и RBAC» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Защита среды контейнеров
Добро пожаловать! В этом уроке мы подробно рассмотрим важные практики безопасности контейнеризированных приложений: управление секретами и управление доступом на основе ролей (RBAC).
Эти концепции крайне важны для защиты конфиденциальных данных и обеспечения возможности выполнения определённых действий только авторизованными сущностями в средах контейнеров.

Опасность встраивания секретов в код
Встраивание конфиденциальной информации, такой как ключи API, пароли баз данных или закрытые сертификаты, непосредственно в код приложения или Dockerfile представляет серьёзную угрозу безопасности.
- Раскрытие: любой, кто имеет доступ к репозиторию кода или собранному образу, может легко увидеть эти данные.
- Отсутствие контроля: изменение секрета требует повторной сборки и повторного развёртывания всего приложения.
- Проблемы соответствия требованиям: это нарушает многие рекомендации по безопасности и нормативные требования.
Переменные окружения (с осторожностью)
Распространённый, но не всегда безопасный способ передавать секреты — использовать переменные окружения. Docker позволяет передавать их с помощью флага -e, а приложения могут считывать их значения.
Однако переменные окружения легко просмотреть (например, с помощью docker inspect), и они могут сохраняться в истории оболочки или журналах. Для действительно конфиденциальных данных существуют более надёжные решения.
Секреты Docker в действии
Секреты Docker позволяют безопасно хранить конфиденциальные данные и передавать их контейнерам. При подключении секрета к контейнеру он монтируется как временный файл в /run/secrets/.
Сначала создайте секрет (например, echo "my_secure_pass" | docker secret create app_secret -). Затем приложение сможет прочитать его:
import os
def main():
secret_path = "/run/secrets/app_secret"
try:
with open(secret_path, 'r') as f:
secret_value = f.read().strip()
print(f"Secret read: {secret_value}")
except FileNotFoundError:
print("Secret file not found. Make sure it's mounted.")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
main()Обзор секретов Kubernetes
Как и в Docker Secrets, в Kubernetes есть собственный объект «Secrets» для хранения и управления конфиденциальной информацией. Эти секреты можно монтировать в Pod как файлы или предоставлять в виде переменных окружения.
Важно: по умолчанию секреты Kubernetes кодируются в base64, но не шифруются. Это означает, что их легко декодировать. Для полноценного шифрования данных при хранении требуется дополнительная настройка (например, интеграция с KMS).
Развёртывание с секретами K8s
Рассмотрим пример определения секрета Kubernetes и его последующего использования в Pod. Секреты можно определить в YAML или создать с помощью команд kubectl.
После создания Pod может обратиться к секрету, чтобы подключить его как том или передать его значения в виде переменных окружения.
apiVersion: v1
kind: Pod
metadata:
name: my-secret-pod
spec:
containers:
- name: my-app-container
image: busybox
command: ["sh", "-c", "echo Username: $(cat /etc/secrets/username) Password: $(cat /etc/secrets/password)"]
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-k8s-secretВнешние хранилища секретов
Для особо конфиденциальных данных, а также при управлении секретами в нескольких кластерах и средах внешние инструменты управления секретами предоставляют расширенные возможности:
- Централизованное хранение: единый источник достоверных данных для всех секретов.
- Шифрование при хранении и передаче: более надёжные гарантии безопасности.
- Динамические секреты: автоматически создаваемые учётные данные с коротким сроком действия.
- Аудит и управление доступом: детализированные разрешения и комплексное ведение журналов.
Популярные варианты включают HashiCorp Vault, AWS Secrets Manager и Azure Key Vault.
Что такое RBAC?
Управление доступом на основе ролей (RBAC) — это метод ограничения доступа к системе для авторизованных пользователей. Вместо непосредственного назначения разрешений отдельным пользователям разрешения объединяются в «роли», а затем пользователи назначаются на эти роли.
В оркестрации контейнеров RBAC гарантирует, что пользователи, приложения и службы имеют только необходимые разрешения для взаимодействия с ресурсами (например, Pod, развёртываниями и секретами).
Основные элементы RBAC в K8s
RBAC Kubernetes использует несколько ключевых типов ресурсов:
- Role: определяет разрешения в определённом пространстве имён (например, «может просматривать Pod» в пространстве имён «dev»).
- ClusterRole: определяет разрешения во всём кластере (например, «может просматривать все Pod» или «может управлять узлами»).
- RoleBinding: предоставляет разрешения, определённые в Role, пользователю, группе или ServiceAccount в пределах пространства имён.
- ClusterRoleBinding: предоставляет разрешения, определённые в ClusterRole, пользователю, группе или ServiceAccount во всём кластере.
Пример RBAC: ограничение доступа
Рассмотрим пример предоставления определённой учётной записи службы разрешения только на просмотр списка и получение Pod в конкретном пространстве имён. Это обеспечивает соблюдение принципа наименьших привилегий.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
namespace: default
subjects:
- kind: ServiceAccount
name: pod-viewer-sa # Name of the ServiceAccount to bind to
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.ioПроверьте свои знания
Вы узнали о защите конфиденциальных данных и управлении доступом. Самое время быстро проверить знания!
Повторение: защита приложений
Отличная работа! В этом уроке Вы узнали о двух важнейших основах безопасности контейнеров:
- Управление секретами: защита конфиденциальных данных с помощью Docker Secrets и Kubernetes Secrets, а также понимание их преимуществ и ограничений.
- Управление доступом на основе ролей (RBAC): реализация детализированных разрешений в Kubernetes для обеспечения принципа наименьших привилегий.
Освоив эти подходы, Вы создаёте более надёжные и безопасные контейнеризированные приложения!
Часто задаваемые вопросы
Урок «Управление секретами и RBAC» бесплатный?
Да — полный текст урока «Управление секретами и RBAC» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Управление секретами и RBAC»?
Изучите продвинутые стратегии управления конфиденциальными данными и внедрения ролевого управления доступом (RBAC) в средах контейнеров. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Управление секретами и RBAC»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проверка безопасности образов контейнеров
- Безопасность контейнеров во время выполнения
- Управление секретами и RBAC
- Сетевые политики и минимальные привилегии в сети