RBAC Airlock позволяет задавать детальные разрешения для аутентификации на Linux-серверах, подключённых к Airlock.

Пример политики: администраторы серверов имеют доступ ко всему, QA и инженеры — полный доступ к staging, инженеры могут получить временный доступ к production в экстренных случаях.

Конфигурация роли

Ресурс role предоставляет следующие средства ограничения доступа к серверам:

kind: role
version: v5
metadata:
  name: developer
spec:
  allow:
    logins: [ubuntu, debian, '{{internal.logins}}']
    node_labels:
      'env': 'test'
      '*': '*'
      'region': ['eu-central-1', 'eu-west-1']
      'reg': '^eu-central-1|eu-west-1$'
    host_groups: [ubuntu, nginx, other]
    host_sudoers:
    - 'ALL=(ALL) NOPASSWD: ALL'
  deny:
    logins:
    - root

Правила deny имеют приоритет. В примере выше попытка входа под root будет отклонена.

Шаблонные переменные

Поля роли поддерживают шаблонные переменные.

Переменные {{external.xyz}} заменяются значениями от SSO-провайдера. Для OIDC xyz — claim; для SAML — assertion.

Пример: назначение окружений и логинов из SAML-атрибутов:

spec:
  allow:
    node_labels:
    - env: '{{external.environments}}'
    logins:
    - '{{external.allowedlogins}}'

Переменная {{internal.logins}} применяется к локальным пользователям и trusted clusters. Локальный пользователь с trait logins: jeff получит логины jeff и ubuntu:

spec:
  allow:
    logins: ['{{internal.logins}}', ubuntu]

Опции роли для SSH

Блок options задаёт возможности Airlock для пользователей с ролью:

spec:
  options:
    create_host_user_mode: drop
    forward_agent: true
    port_forwarding: true
    ssh_file_copy: false
    client_idle_timeout: never
    disconnect_expired_cert: no
    max_sessions: 10
    enhanced_recording:
    - command
    - disk
    - network
    permit_x11_forwarding: true
    max_connections: 2
    record_session:
      default: best_effort
      ssh: best_effort
    require_session_mfa: true
    pin_source_ip: true
    cert_extensions:
     - type: ssh
       mode: extension
       name: login@example.com
       value: "{{ external.login }}"
ОпцияОписание
create_host_user_modeАвтосоздание пользователя на хосте (drop, keep, off)
forward_agentSSH agent forwarding
port_forwardingTCP port forwarding
ssh_file_copySCP/SFTP (по умолчанию true)
require_session_mfaДополнительный MFA при начале сессии
pin_source_ipПривязка сертификата к IP входа

Пример: разделение окружений

kind: role
version: v5
metadata:
  name: staging-access
spec:
  allow:
    logins: [ubuntu, deploy]
    node_labels:
      'env': 'staging'
  deny:
    node_labels:
      'env': 'prod'

Создание и назначение:

airctl create -f staging-access.yaml
airctl users update developer --set-roles=access,staging-access

Проверка доступа

Пользователь видит доступные серверы:

airsh ls

Подключение к серверу:

airsh ssh user@hostname