0Pricing
Docker & DevOps Fundamentals · Урок

Управление секретами и RBAC

Изучите продвинутые стратегии управления конфиденциальными данными и внедрения ролевого управления доступом (RBAC) в средах контейнеров.

«Управление секретами и RBAC» — бесплатный урок Docker & DevOps Fundamentals на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Docker & DevOps Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Защита среды контейнеров

Добро пожаловать! В этом уроке мы подробно рассмотрим важные практики безопасности контейнеризированных приложений: управление секретами и управление доступом на основе ролей (RBAC).

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

Управление секретами и RBAC — иллюстрация 1

Опасность встраивания секретов в код

Встраивание конфиденциальной информации, такой как ключи 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) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Управление секретами и RBAC»?

Изучите продвинутые стратегии управления конфиденциальными данными и внедрения ролевого управления доступом (RBAC) в средах контейнеров. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?

Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Управление секретами и RBAC»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?

Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проверка безопасности образов контейнеров
  2. Безопасность контейнеров во время выполнения
  3. Управление секретами и RBAC
  4. Сетевые политики и минимальные привилегии в сети
← Назад к Docker & DevOps Fundamentals