Рафель Перейра де Мело
Вступ
Зі збільшенням використання контейнерів у хмарних середовищах забезпечення безпеки цих додатків стало критичним пріоритетом для багатьох компаній. Мене звати Рафель Перейра де Мело, і я вивчаю та впроваджую практики безпеки в середовищах контейнерів. У цій статті я хочу поділитися цими важливими практиками безпеки та розповісти, як їх можна застосувати у вашій щоденній роботі для кращого захисту ваших систем і даних.
Важливість безпеки контейнерів у хмарних середовищах
Безпека контейнерів є критично важливою, оскільки хоча ці середовища забезпечують портативність та ефективність, вони також несуть нові вразливості. Недостатня безпека може призвести до порушень, що компрометують цілісність і конфіденційність даних.
Огляд безпеки контейнерів
Що таке контейнери?
Контейнери — це легкі програмні одиниці, які включають код і його залежності, дозволяючи додаткам працювати стабільно в різних обчислювальних середовищах.
Основні загрози та вразливості
- Підвищення привілеїв: Користувачі можуть отримати підвищені привілеї.
- Компрометовані образи контейнерів: Використання неперевірених або вразливих образів.
- Погане управління секретами: Неналежне зберігання облікових даних і ключів.
Переваги належних практик безпеки
- Зниження ризиків: Менше ймовірність порушень і компрометації даних.
- Відповідність: Виконання вимог нормативних актів і стандартів.
- Надійність: Більш стабільне та надійне середовище для критичних додатків.
Тема 1: Видалення користувача root
Проблема використання користувача root в контейнерах
Запуск контейнерів з привілеями root є ризикованою практикою, яка може призвести до підвищення привілеїв, якщо вразливість буде використана.
Налаштування контейнерів без root
- Dockerfile: Встановіть користувача без привілеїв під час побудови образу.
- Спеціальні конфігурації: Налаштуйте дозволи та властивості для служб, які потребують привілеїв.
Приклад неправильного Dockerfile
FROM ubuntu:latest
У першому прикладі ми бачимо, що не створено/не визначено користувача для запуску додатка, що означає, що за замовчуванням контейнер, який запускає цей додаток, працюватиме як root.
Приклад правильного Dockerfile
FROM ubuntu:latest
RUN useradd -ms /bin/bash myuser <-----
USER myuser <-----
У наведеному прикладі ми бачимо створення користувача і наступне встановлення цього користувача як за замовчуванням для контейнера. Цей користувач, навіть без визначених дозволів та інших атрибутів, не має таких самих привілеїв, як користувач root. Це запобігає встановленню пакетів та інших залежностей у контейнері.
Тема 2: Kubernetes та контекст безпеки
Роль Kubernetes в управлінні контейнерами
Kubernetes — це відкрита платформа оркестрації контейнерів, яка автоматизує розгортання, масштабування та управління контейнеризованими додатками. Спочатку розроблена Google, Kubernetes стала стандартом для управління контейнерами в продуктивних середовищах.
Він надає надійну та гнучку інфраструктуру, дозволяючи компаніям ефективно та безпечно розгортати й підтримувати свої додатки.
Основні можливості Kubernetes: https://kubernetes.io/
- Оркестрація контейнерів: Автоматично координує розгортання, обслуговування та масштабування контейнерів.
- Самовідновлення: Перезапускає зламані контейнери, заміняє та переналаштовує контейнери, підтримуючи здоров'я додатків.
- Масштабованість: Автоматично налаштовує кількість контейнерів відповідно до навантаження та вимог додатків.
- Розгортання та відкат: Дозволяє розгортати нові версії додатків без простоїв та швидко відкатувати зміни у випадку збоїв.
- Управління конфігурацією та секретами: Безпечно зберігає та керує конфіденційними даними, такими як паролі, токени та SSH-ключі.
Як використовувати Security Context у Kubernetes для підвищення безпеки
- Security Context у Kubernetes — це конфігурація, яка визначає привілеї безпеки та контролі для Pod або контейнера. Вона дозволяє вказувати, як повинні виконуватися Pods і контейнери, підвищуючи безпеку додатка та кластеру.
Компоненти Security Context:
- UID та GID: Визначає користувача та групу, під якими контейнер повинен працювати. (RunAsUser та RunAsGroup)
- Привілейований режим: Вказує, чи повинен контейнер працювати в привілеєвому режимі, надаючи доступ до всіх пристроїв хоста.
- Можливості: Додає або видаляє стандартні можливості з контейнера.
- Опції SELinux: Конфігурації для Security-Enhanced Linux (SELinux).
- AppArmor: Профілі безпеки для обмеження дій додатка.
- Seccomp: Профілі для обмеження системних викликів, які контейнер може робити.
Приклади конфігурації та найкращі практики
Приклад конфігурації Security Context у Pod:
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: secure-container
image: nginx
securityContext:
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
allowPrivilegeEscalation: false
runAsUser: 1000
runAsGroup: 1000
readOnlyRootFilesystem: true
seccompProfile:
type:runtimeDefault
PS ¹: Якщо користувач файлу yaml відрізняється від того, що зазначений у Dockerfile вашого образу, то він перезапише й запустить з користувачем, вказаним у файлі yaml.
PS²: Вам потрібно з'ясувати, які можливості найкраще підходять для вашої ситуації. Перевірте тут: https://man7.org/linux/man-pages/man7/capabilities.7.html
PS³: allowPrivilegeEscalation: false
Щоб ця властивість працювала, ви повинні переконатися, що ваш користувач НЕ є root. Якщо ви хочете перевірити, наступний інструмент може допомогти вам знайти вразливості у вашому файлі Yaml. https://www.checkov.io/ | Пошукайте CKVK8S20 в документації та дізнайтеся, як перевіряється вразливість за допомогою Checkov. https://www.checkov.io/5.Policy Index/kubernetes.html
Ну, я планую оновити цю статтю в майбутньому з іншими хорошими практиками, але вже зараз вміст цієї сторінки надає достатньо безпеки для наших додатків, які працюють у хмарних середовищах. Сподіваюся, вам сподобалося і ви застосуєте це у своєму щоденному житті!
Перекладено з: Security in Cloud Containers: Essential Practices and Daily Applications