Назначение UID/GID

В Kubernetes каждый Pod запускается с определённым User ID (UID) и Group ID (GID) для обеспечения безопасности и правильного контроля доступа. По умолчанию Pods могут запускаться от имени пользователя root (UID 0), что может представлять угрозу безопасности. Для повышения безопасности рекомендуется назначать Pods не-root UID и GID.

ACP позволяет автоматически назначать namespace с определёнными диапазонами UID и GID, чтобы гарантировать, что все Pods в namespace запускаются с заданными идентификаторами пользователя и группы.

Содержание

Включение назначения UID/GID

Чтобы включить назначение UID/GID для namespace, выполните следующие шаги:

  1. Перейдите в Project Management.
  2. В левой навигационной панели нажмите Namespace.
  3. Выберите нужный namespace.
  4. Нажмите Actions > Upate Pod Security Policy.
  5. Измените значение опции Enforce на Restricted, нажмите Update.
  6. Нажмите иконку редактирования рядом с Labels, добавьте метку с ключом security.cpaas.io/enabled и значением true, нажмите Update. (Чтобы отключить, удалите эту метку или установите значение false.)
  7. Нажмите Save.

Проверка назначения UID/GID

Диапазон UID/GID

На странице с деталями namespace вы можете увидеть назначенные диапазоны UID и GID в разделе Annotations.

Аннотация security.cpaas.io/uid-range указывает диапазон UID/GID, которые могут быть назначены Pods в namespace, например, security.cpaas.io/uid-range=1000002000-1000011999 означает, что диапазон uid/gid находится в пределах от 1000002000 до 1000011999.

Проверка UID/GID Pod

Если pod не указывает runAsUser и fsGroup в securityContext, платформа автоматически назначит первое значение из назначенного диапазона uid.

  1. Создайте Pod в namespace с помощью следующей YAML-конфигурации:

    apiVersion: v1
    kind: Pod
    metadata:
      name: uid-gid-test-pod
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ["sleep", "3600"]
  2. После создания Pod получите его YAML, чтобы проверить назначенные UID и GID:

    kubectl get pod uid-gid-test-pod -n <namespace-name> -o yaml

В YAML Pod будут показаны назначенные UID и GID в разделе securityContext:

apiVersion: v1
kind: Pod
metadata:
  name: uid-gid-test-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["sleep", "3600"]
    securityContext:
      runAsUser: 1000000
  securityContext:
    fsGroup: 1000000

Если pod указывает runAsUser и fsGroup в securityContext, платформа проверит, находятся ли указанные UID/GID в пределах назначенного диапазона. Если нет, создание Pod завершится ошибкой.

  1. Создайте Pod в namespace с помощью следующей YAML-конфигурации:

    apiVersion: v1
    kind: Pod
    metadata:
      name: uid-gid-test-pod-invalid
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ["sleep", "3600"]
        securityContext:
          runAsUser: 2000000  # Неверный UID, вне назначенного диапазона
      securityContext:
        fsGroup: 2000000  # Неверный GID, вне назначенного диапазона
  2. После применения YAML создание Pod завершится ошибкой с сообщением, что указанные UID/GID находятся вне назначенного диапазона.