Поделиться через


Политика безопасности для конфиденциальных контейнеров в Служба Azure Kubernetes

Как описано консорциумом конфиденциальных вычислений (CCC), "Конфиденциальные вычисления — это защита используемых данных путем выполнения вычислений в аппаратной среде доверенного выполнения (TEE). Конфиденциальные контейнеры AKS предназначены для защиты данных pod Kubernetes, используемых из-за пределов этих модулей. Каждый модуль pod выполняется в виртуальной машине служебной программы (UVM), защищенной TEE AMD SEV-SNP путем шифрования данных в использовании и предотвращения доступа к данным операционной системой узла (ОС). Инженеры Майкрософт сотрудничали с конфиденциальными контейнерами (CoCo) и сообществами с открытым исходным кодом Kata Containers по проектированию и реализации конфиденциальных контейнеров.

Общие сведения о политике безопасности

Одним из основных компонентов архитектуры системы Kata Containers является агент Kata. При использовании контейнеров Kata для реализации конфиденциальных контейнеров агент выполняется внутри аппаратной среды TEE и поэтому является частью доверенной вычислительной базы pod (TCB). Как показано на следующей схеме, агент Kata предоставляет набор API ttrpc , позволяющий системным компонентам за пределами TEE создавать и управлять конфиденциальными модулями Pod Kubernetes. Эти другие компоненты (например, Kata Shim) не являются частью TCB pod. Поэтому агент должен защитить себя от потенциально ошибок или вредоносных вызовов API.

Схема модели политики безопасности конфиденциальных контейнеров AKS.

В конфиденциальных контейнерах AKS API агента Kata реализуется с помощью политики безопасности (также известной как политика агента Kata), указанной владельцами конфиденциальных модулей pod. Документ политики содержит правила и данные, соответствующие каждому модулем pod, используя стандартный язык политики Rego в отрасли. Принудительное применение политики на виртуальной машине служебной программы (UVM) реализуется с помощью агента open Policy (OPA) — выпускника проекта Cloud Native Computing Foundation (CNCF).

Содержимое политики

Политика безопасности описывает все вызовы API ttrpc агента (и параметры этих вызовов API), ожидаемые для создания и управления конфиденциальным модулем pod. Документ политики каждого модуля pod — это текстовый файл с помощью языка Rego. В документе политики есть три высокоуровневых раздела.

Data

Данные политики зависят от каждого модуля pod. Он содержит, например:

  • Список контейнеров, которые должны быть созданы в модуле pod.
  • Список API-интерфейсов, заблокированных политикой по умолчанию (по соображениям конфиденциальности).

Примеры данных, включенных в документ политики для каждого контейнера в модуле pod:

  • Сведения о целостности изображения.
  • Команды, выполняемые в контейнере.
  • Тома хранилища и подключения.
  • Контекст безопасности выполнения. Например, является ли корневая файловая система доступной только для чтения?
  • Разрешен ли процесс получить новые привилегии?
  • среды.
  • Другие поля из конфигурации среды выполнения контейнера Open Container Initiative (OCI).

Правила

Правила политики, указанные в формате Rego, выполняются с помощью OPA для каждого вызова API агента Kata за пределами виртуальной машины служебной программы (UVM). Агент предоставляет все входные данные API для OPA, а OPA использует правила для проверки соответствия входных данных политик. Если правила политики и данные не допускают входные данные API, агент отклоняет вызов API, возвращая сообщение об ошибке "заблокировано политикой". Ниже приведены некоторые примеры правил:

  • Каждый слой контейнера предоставляется как устройство, доступное только для чтения virtio, для виртуальной машины служебной программы (UVM). Целостность этих блочных устройств защищена с помощью технологии dm-verity ядра Linux. Ожидаемое корневое значение дерева хэша dm-verity включается в данные политики и проверяется во время выполнения правилами политики.
  • Правила отклоняют создание контейнера при обнаружении неожиданной командной строки, подключения хранилища, контекста безопасности выполнения или переменной среды.

По умолчанию правила политики являются общими для всех модулей pod. Средство genpolicy создает данные политики и зависит от каждого модуля pod.

Значения по умолчанию

При оценке правил Rego с помощью данных политики и входных данных API в качестве параметров OPA пытается найти по крайней мере один набор правил, возвращающий true значение на основе входных данных. Если правила не возвращаются true, OPA возвращает агенту значение по умолчанию для этого API. Примеры значений по умолчанию из политики:

  • default CreateContainerRequest := false — означает, что любой вызов API CreateContainer отклоняется, если набор правил политики явно не разрешает этот вызов.

  • default GuestDetailsRequest := true — означает, что вызовы извне TEE к API GuestDetails всегда разрешены, так как данные, возвращаемые этим API, не учитывает конфиденциальность рабочих нагрузок клиента.

Отправка политики агенту Kata

Все виртуальные машины конфиденциальной контейнерной программы AKS (UVM) запускают с помощью универсальной политики по умолчанию, включенной в корневую файловую систему виртуальной машины служебной машины (UVM). Таким образом, политика, соответствующая фактической рабочей нагрузке клиента, должна быть предоставлена агенту во время выполнения. Текст политики внедрен в файл манифеста YAML, как описано ранее, и предоставляется таким образом агенту на ранних этапах инициализации виртуальной машины служебной машины (UVM). Заметка политики проходит через компоненты kubelet, контейнеры и компоненты Kata shim в системе конфиденциальных контейнеров AKS. Затем агент, работающий вместе с OPA, применяет политику для всех вызовов собственных API.

Политика предоставляется с помощью компонентов, которые не являются частью TCB, поэтому изначально эта политика не является доверенной. Надежность политики должна быть создана с помощью удаленной аттестации, как описано в следующем разделе.

Установка доверия к документу политики

Перед созданием виртуальной машины служебной программы (UVM) ката вычисляет хэш SHA256 документа политики и присоединяет это хэш-значение к TEE. Это действие создает сильную привязку между содержимым политики и виртуальной машины служебной программы (UVM). Это поле TEE не изменяется позже программным обеспечением, выполняемым внутри виртуальной машины служебной программы (UVM), или за ее пределами.

После получения политики агент проверяет хэш политики в неизменяемом поле TEE. Агент отклоняет входящую политику, если обнаруживает хэш-несоответствие.

Перед обработкой конфиденциальной информации рабочие нагрузки должны выполнить шаги удаленной аттестации, чтобы доказать любой проверяющей стороне, что рабочая нагрузка выполняется с помощью ожидаемых версий TEE, ОС, агента, OPA и корневой файловой системы. Аттестация реализована в контейнере, работающем внутри виртуальной машины служебной программы (UVM), которая получает подписанные доказательства аттестации из оборудования AMD SEV-SNP. Одним из полей подтверждения аттестации является поле teE политики, описанное ранее. Поэтому служба аттестации может проверить целостность политики, сравнивая значение этого поля с ожидаемым хэшом политики pod.

Применение политики

Агент Ката несет ответственность за применение политики. Корпорация Майкрософт способствовала сообществу Kata и CoCo код агента, отвечающий за проверку политики для каждого вызова API ttrpc агента. Перед выполнением действий, соответствующих API, агент использует REST API OPA для проверки разрешения или блокировки вызова правил политики и данных.

Следующие шаги

Развертывание конфиденциального контейнера в AKS