Безпека контейнерів у хмарі: основні практики та щоденне застосування

Рафель Перейра де Мело

Вступ

Зі збільшенням використання контейнерів у хмарних середовищах забезпечення безпеки цих додатків стало критичним пріоритетом для багатьох компаній. Мене звати Рафель Перейра де Мело, і я вивчаю та впроваджую практики безпеки в середовищах контейнерів. У цій статті я хочу поділитися цими важливими практиками безпеки та розповісти, як їх можна застосувати у вашій щоденній роботі для кращого захисту ваших систем і даних.

Важливість безпеки контейнерів у хмарних середовищах

Безпека контейнерів є критично важливою, оскільки хоча ці середовища забезпечують портативність та ефективність, вони також несуть нові вразливості. Недостатня безпека може призвести до порушень, що компрометують цілісність і конфіденційність даних.

Огляд безпеки контейнерів

Що таке контейнери?

Контейнери — це легкі програмні одиниці, які включають код і його залежності, дозволяючи додаткам працювати стабільно в різних обчислювальних середовищах.

Основні загрози та вразливості

  • Підвищення привілеїв: Користувачі можуть отримати підвищені привілеї.
  • Компрометовані образи контейнерів: Використання неперевірених або вразливих образів.
  • Погане управління секретами: Неналежне зберігання облікових даних і ключів.

Переваги належних практик безпеки

  • Зниження ризиків: Менше ймовірність порушень і компрометації даних.
  • Відповідність: Виконання вимог нормативних актів і стандартів.
  • Надійність: Більш стабільне та надійне середовище для критичних додатків.

Тема 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 для підвищення безпеки

  1. 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

Leave a Reply

Your email address will not be published. Required fields are marked *